こんにちは。
毎日を必死にしがみついて生きている、ポンコツエンジニアです。
業務でAWS CDK に触れる機会がありましたので、
せっかくなら環境構築から触ってみようと思い、備忘録としてこの記事を残します。
目的
本記事では、AWS CDKの初期開発環境構築とローカルでdeployができる環境を整備し、typescript で実装をすることを目的とした記事です。
前提条件
以下の環境が既に整備されていること
- Node.js
- Docker Compose
実行環境
ProductName: macOS
ProductVersion: 12.7.1
Node.js: v20.10.0
npm: 10.2.3
環境構築
LocalStack用プロファイル設定
aws configure --profile localstack
AWS Access Key ID [None]: dummy
AWS Secret Access Key [None]: dummy
Default region name [None]:
Default output format [None]:
プロファイルだけ作成する必要があるので IDなどの情報は適当で良いです。
※本記事では "dummy" としています。
ディレクトリ作成 / 移動
mkdir skillup-study-cdk && cd skillup-study-cdk
CDKプロジェクト作成
npx aws-cdk@ init app --language typescript
aws-cdk-local インストール
aws-cdk をローカル環境でdeployするためにaws-cdk-localをインストールします。
npm install aws-cdk-local
※注意※
aws-cdk と aws-cdk-localはグローバルにインストールするのではなく、ローカルにインストールし、npxで呼び出すようにします。
グローバルに入れたCDKとローカルのCDKのバージョンの違いによってエラーになるためです。
docker-compose.yml 作成
LocalStackをdocker-compose でローカルのDocker上に立ち上げるためymlファイルを作成します。
touch docker-compose.yml
version: "3.8"
services:
test-localstack:
container_name: test-localstack
image: localstack/localstack:1.3.1
ports:
- 4566:4566
environment:
- DEFAULT_REGION=ap-northeast-1
- DOCKER_SOCK=/var/run/docker.sock
- DEBUG=1
volumes:
- test-localstack:/var/lib/localstack/
- /var/run/docker.sock:/var/run/docker.sock
networks:
test-network:
networks:
test-network:
volumes:
test-localstack:
LocalStack 起動
ローカル環境へのdeploy時は必ずLocalStackを起動してください
docker-compose up -d
LocalStack 起動確認
localstack status services
S3バケットを作成してローカル環境に向けてデプロイしてみる
LocalStackの起動確認が取れたら、S3バケットを作成して、ローカル環境に向けてデプロイをしてみましょう。
S3バケットを作成する
stackファイルに変更する
mv lib/skillup-study-cdk-stack.ts lib/stack.ts
lib/stack.tsの編集
- S3バケットを作成する
import * as cdk from "aws-cdk-lib";
import { Construct } from "constructs";
import * as s3 from "aws-cdk-lib/aws-s3";
export class SkillUpStudyStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
const bucket = new s3.Bucket(this, "CreateBucket", {
bucketName: "test-bucket-20240422",
versioned: true,
});
}
}
bin/skillup-study-cdk.ts の編集
- stack.ts を呼び出す
import 'source-map-support/register';
import * as cdk from 'aws-cdk-lib';
import { SkillUpStudyStack } from '../lib/stack';
const app = new cdk.App();
const prefix = 'Test';
new SkillUpStudyStack(app, `${prefix}SkillUpStudy`);
一番最初のdeploy前のおまじない
deploy時の一番最初の一回のみ以下のコマンドを実行します。
※cdklocal コマンドでローカル環境にデプロイできます
npx aws-cdk-local bootstrap
deploy
npx aws-cdk-local deploy
# 結果
✨ Synthesis time: 4.58s
Stack: start: Building fd40ed898e39bddce371e56c819a052298f01555434527cf1c0c63ccd2ead45e:current_account-current_region
Stack: success: Built fd40ed898e39bddce371e56c819a052298f01555434527cf1c0c63ccd2ead45e:current_account-current_region
Stack: start: Publishing fd40ed898e39bddce371e56c819a052298f01555434527cf1c0c63ccd2ead45e:current_account-current_region
Stack: success: Published fd40ed898e39bddce371e56c819a052298f01555434527cf1c0c63ccd2ead45e:current_account-current_region
Stack: deploying... [1/1]
Stack: creating CloudFormation changeset...
✅ Stack
✨ Deployment time: 5.1s
Stack ARN:
arn:aws:cloudformation:ap-northeast-1:000000000000:stack/Stack/dbc0586e
✨ Total time: 9.68s
LocalStackにdeployされたリソースを確認してみる
aws s3コマンドでS3バケットの確認をする
endpoint にLocalStackのURLを、profileにLocalStack用のprofileを指定します。
aws s3 ls --endpoint-url=http://localhost:4566 --profile localstack
# 結果
2024-04-23 09:14:33 cdk-hnb659fds-assets-000000000000-ap-northeast-1 # cdkがstackをdeployするために一時的に資材を格納するために作成されるS3バケット
2024-04-23 09:17:50 test-bucket-20240422 # cdkで定義した作成対象バケット
aws cdk を使ってS3バケットを作成することができました。
これで初期構築は終了です。