はじめに
AWS CDK のローカル開発環境を作ろう!のWebサイトでAWS CDK
を使ったローカル開発環境の整備を行った際の個人的なメモです。
快適な開発環境を整えよう
までは終了し、CDKプロジェクトを作成する
ところからのメモになる
AWS CDKとは
覚えておくべき CDK コマンド一覧
🛠 プロジェクトの新規作成
コマンド | 説明 |
---|---|
npx cdk init app --language=<LANG> |
新規プロジェクトの作成 (<LANG> に typescript などを指定) |
npx cdk bootstrap |
AWS 環境をブートストラップ (必要なリソースを作成) |
npx cdk list |
CDK アプリに含まれるスタック一覧を表示 |
🚀 デプロイ関連
コマンド | 説明 |
---|---|
npx cdk synth |
CloudFormation テンプレートを合成 |
npx cdk deploy |
CDK スタックをデプロイ |
npx cdk deploy --hotswap |
デプロイ時間を短縮 (コード変更のみ更新) |
npx cdk watch |
ファイルを変更すると自動デプロイ |
🔄 差分の確認
コマンド | 説明 |
---|---|
npx cdk diff |
現在の CloudFormation スタックとの差分を確認 |
🗑 作成したリソースを削除
コマンド | 説明 |
---|---|
npx cdk destroy |
デプロイしたリソースを削除 |
1. CDKプロジェクトを作成
npx cdk init app --language=typescript
node_modulesがインストールされるが、そのディレクトリを省くと下記のようなファイル群が用意される。
tree -I "node_modules"
.
├── 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
4 directories, 9 files
AWS 環境を ブートストラップ する。この操作によって、「CDKToolkit」のスタックが作成され、CDK 専用の Amazon S3 バケットや IAM ロールなどの AWS CDK の動作に必要なリソースが用意されます。
npx cdk bootstrap
作成されたリソースの確認方法
Amazon ECRリポジトリ
aws ecr describe-repositories
CloudFormation スタック
aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE
S3 バケット
aws s3 ls
IMS ロール
aws iam list-roles | grep "cdk-hnb659fds"
SSM パラメータ
aws ssm get-parameter --name /cdk-bootstrap/hnb659fds/version
CDK アプリに含まれるスタックを確認
$ npx cdk list
HelloCdkStack
2. Lambda関数を作成してHTTPSでアクセスする
lib/hello-cdk-stack.ts
を変更してLambda関数を作成する
import * as cdk from 'aws-cdk-lib';
import { Construct } from 'constructs';
// Import the Lambda module
import * as lambda from 'aws-cdk-lib/aws-lambda';
export class HelloCdkStack extends cdk.Stack {
constructor(scope: Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// Define the Lambda function resource
const myFunction = new lambda.Function(this, "HelloWorldFunction", {
runtime: lambda.Runtime.NODEJS_20_X, // Provide any supported Node.js runtime
handler: "index.handler",
code: lambda.Code.fromInline(`
exports.handler = async function(event) {
return {
statusCode: 200,
body: JSON.stringify('Hello World!'),
};
};
`),
});
// リソース管理のためにタグを付ける
cdk.Tags.of(myFunction).add('WPS', 'cdktest_rairaii');
// HTTPSでアクセス可能にする
// Define the Lambda function URL resource
const myFunctionUrl = myFunction.addFunctionUrl({
authType: lambda.FunctionUrlAuthType.NONE,
});
// Define a CloudFormation output for your URL
new cdk.CfnOutput(this, "myFunctionUrlOutput", {
value: myFunctionUrl.url,
})
// ここまで HTTPSでアクセス可能にする
}
}
3. AWSにデプロイ
CloudFormation テンプレートを合成する
npx cdk synth
デプロイを実行する。npx cdk synth
を実行していない場合は自動実行される。
npx cdk deploy
4. Lambda関数の動作確認
curl
コマンドで動作確認をする
curl https://<Lambda関数のURL>/
"Hello CDK!"%
5. 作成したリソースを削除
今回作成したリソースを削除する
npx cdk destroy
削除されるリソース
Are you sure you want to delete: HelloCdkStack (y/n)? y
HelloCdkStack: destroying... [1/1]
HelloCdkStack | 0 | 12:45:59 PM | DELETE_IN_PROGRESS | AWS::CloudFormation::Stack | HelloCdkStack User Initiated
HelloCdkStack | 0 | 12:46:00 PM | DELETE_IN_PROGRESS | AWS::Lambda::Url | HelloWorldFunction/FunctionUrl (HelloWorldFunctionFunctionUrl4150BDAD)
HelloCdkStack | 0 | 12:46:00 PM | DELETE_IN_PROGRESS | AWS::Lambda::Permission | HelloWorldFunction/invoke-function-url (HelloWorldFunctioninvokefunctionurlA2CB1A84)
HelloCdkStack | 0 | 12:46:00 PM | DELETE_IN_PROGRESS | AWS::CDK::Metadata | CDKMetadata/Default (CDKMetadata)
HelloCdkStack | 1 | 12:46:01 PM | DELETE_COMPLETE | AWS::Lambda::Permission | HelloWorldFunction/invoke-function-url (HelloWorldFunctioninvokefunctionurlA2CB1A84)
HelloCdkStack | 2 | 12:46:02 PM | DELETE_COMPLETE | AWS::CDK::Metadata | CDKMetadata/Default (CDKMetadata)
HelloCdkStack | 3 | 12:46:02 PM | DELETE_COMPLETE | AWS::Lambda::Url | HelloWorldFunction/FunctionUrl (HelloWorldFunctionFunctionUrl4150BDAD)
HelloCdkStack | 3 | 12:46:02 PM | DELETE_IN_PROGRESS | AWS::Lambda::Function | HelloWorldFunction (HelloWorldFunctionB2AB6E79)
HelloCdkStack | 4 | 12:46:06 PM | DELETE_COMPLETE | AWS::Lambda::Function | HelloWorldFunction (HelloWorldFunctionB2AB6E79)
HelloCdkStack | 4 | 12:46:06 PM | DELETE_IN_PROGRESS | AWS::IAM::Role | HelloWorldFunction/ServiceRole (HelloWorldFunctionServiceRole8E0BD458)
CDKのためのリソース削除方法
現時点では不明であり手作業での削除になりそう