- クラウド技術
LocalStackに対してAWS CDKでデプロイしてみた
- #AWS
この記事を書いたチーム:tenko
はじめに
【エンジニア募集中】フルリモート可◎、売上/従業員数9年連続UP、平均残業8時間、有給取得率90%、年休124日以上 etc. 詳細はこちらから>
Local Stack便利ですよね。私の現場では、Unit Test時にAWSリソースのMockとして使用しています。今回は、このLocal Stackに対してAWS CDK経由でのデプロイを試してみようかと思います。
開発環境
1 2 3 4 5 |
- Ubuntu 20.04 on WSL - Nodejs 20.x - AWS CDK 2.140.0 - Docker version 27.0.3, build 7d4bcd8 - Docker-compose |
Local Stack用意
インストール方法は色々ありますが、docker compose経由が楽です。こちらを参考にしていきます。
- 以下の内容でdocker-compose.yml作成
123456789101112131415version: "3.8"services:localstack:container_name: "${LOCALSTACK_DOCKER_NAME:-localstack-main}"image: localstack/localstack:latestports:- "127.0.0.1:4566:4566" # LocalStack Gateway- "127.0.0.1:4510-4559:4510-4559" # external services port rangeenvironment:# LocalStack configuration: https://docs.localstack.cloud/references/configuration/- DEBUG=${DEBUG:-0}volumes:- "${LOCALSTACK_VOLUME_DIR:-./volume}:/var/lib/localstack"- "/var/run/docker.sock:/var/run/docker.sock" - コンテナ起動
1docker compose up -d -
接続テスト
12345# AWSサービスエンドポイントをLocalStackに設定export AWS_ENDPOINT_URL=http://localhost:4566# S3 Bucketを一覧表示 エラーが起きずに空のリストが表示されればオーケーaws s3 ls
CDKプロジェクト作成
ここから見出しに関する本文を記載
- AWS CDKとAWS CDK Localのインストール
1npm install -g aws-cdk aws-cdk-local - プロジェクト作成
12mkdir hello-cdk && cd hello-cdkcdk init app --language typescript以下のようなプロジェクトが作成されます
123456789101112├── README.md├── bin│ └── hello-cdk.ts├── cdk.json├── jest.config.js├── lib│ └── hello-cdk-stack.ts├── package-lock.json├── package.json├── test│ └── hello-cdk.test.ts└── tsconfig.json - 今回は、lib/hello-cdk-stack.tsにSQSを作成するコードを記述していきます。
12345678910111213141516import * as cdk from 'aws-cdk-lib';import { Construct } from 'constructs';import * as sqs from 'aws-cdk-lib/aws-sqs';export class HelloCdkStack extends cdk.Stack {constructor(scope: Construct, id: string, props?: cdk.StackProps) {super(scope, id, props);// The code that defines your stack goes here// example resourceconst queue = new sqs.Queue(this, 'HelloCdkQueue', {visibilityTimeout: cdk.Duration.seconds(300)});}}
LocalStackへデプロイ
- cdklocalを用いて、Bootstrapを行います。
1cdklocal bootstrap
123456⏳ Bootstrapping environment aws://000000000000/ap-northeast-1...Trusted accounts for deployment: (none)Trusted accounts for lookup: (none)Using default execution policy of 'arn:aws:iam::aws:policy/AdministratorAccess'. Pass '--cloudformation-execution-policies' to customize.CDKToolkit: creating CloudFormation changeset...✅ Environment aws://000000000000/ap-northeast-1 bootstrapped.
- デプロイを実行
1cdklocal bootstrap1234567891011121314151617✨ Synthesis time: 4.54sHelloCdkStack: start: Building de6c03de9ff4df3f1d14ea56db5630226f950ca578b2aff5e8dec47f281887e4:current_account-current_regionHelloCdkStack: success: Built de6c03de9ff4df3f1d14ea56db5630226f950ca578b2aff5e8dec47f281887e4:current_account-current_regionHelloCdkStack: start: Publishing de6c03de9ff4df3f1d14ea56db5630226f950ca578b2aff5e8dec47f281887e4:current_account-current_regionHelloCdkStack: success: Published de6c03de9ff4df3f1d14ea56db5630226f950ca578b2aff5e8dec47f281887e4:current_account-current_regionHelloCdkStack: deploying... [1/1]HelloCdkStack: creating CloudFormation changeset...✅ HelloCdkStack✨ Deployment time: 5.2sStack ARN:arn:aws:cloudformation:ap-northeast-1:000000000000:stack/HelloCdkStack/de5c42bf✨ Total time: 9.74s
まとめ
意外と簡単にできましたね。
Unit Test時のMockとして利用できるものは他にもありますが、moto3などと合わせて選択肢の1つとして覚えておくのも良いかもしれません。
ちなみに対応済みのサービスはこちらから確認できます。
【エンジニア募集中】フルリモートも◎(リモート率85.7%)、平均残業8時間、年休124日以上、有給取得率90% etc. 詳細はこちらから>