0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

AWS CDK のローカル開発環境を作ろう!のメモ

Last updated at Posted at 2025-02-16

はじめに

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のためのリソース削除方法

現時点では不明であり手作業での削除になりそう

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?