Hello, World!!を返すだけのlambdaをCDKで作る
1 2 3 4 5 6 7 8 9 10 11 12 |
# 任意の作業ディレクトリで mkdir mini-cdk-lambda && cd mini-cdk-lambda # CDK 初期化(TypeScript) npm i -g aws-cdk@latest cdk init app --language typescript # 依存(CDK v2 は aws-cdk-lib と constructs だけでOK) npm i aws-cdk-lib constructs # Lambda のソース置き場を作成 mkdir -p src/app |
src/app/handler.py
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 最小のハンドラ。外部依存なし。 # 役割: API Gateway(REST) → Lambda で "Hello" を返すだけ。 import json def handler(event, context): # ここに業務ロジックを分離していくとテストが楽(今回は最小) body = {"message": "Hello from Lambda (Python)!"} return { "statusCode": 200, "headers": {"content-type": "application/json"}, "body": json.dumps(body, ensure_ascii=False), } |
lib/mini_cdk_lambda-stack.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
// コメントは全て日本語 import { Stack, StackProps, Duration } from "aws-cdk-lib"; import { Construct } from "constructs"; import * as lambda from "aws-cdk-lib/aws-lambda"; import * as apigw from "aws-cdk-lib/aws-apigateway"; import * as path from "path"; export class MiniCdkLambdaStack extends Stack { constructor(scope: Construct, id: string, props?: StackProps) { super(scope, id, props); // --- Python Lambda(外部依存なしなので fromAsset でOK) --- const fn = new lambda.Function(this, "HelloFn", { runtime: lambda.Runtime.PYTHON_3_12, // Python 実行環境 handler: "handler.handler", // ファイル名.handler 関数名 code: lambda.Code.fromAsset(path.join(__dirname, "../src/app")), timeout: Duration.seconds(5), description: "最小のPython Lambda(Hello応答)", }); // --- REST API(/ へ GET で Lambda を叩く) --- const api = new apigw.RestApi(this, "MiniApi", { restApiName: "mini-cdk-lambda-api", deployOptions: { stageName: "prod" }, // 最小構成 }); // ルート(/)に GET を生やす api.root.addMethod("GET", new apigw.LambdaIntegration(fn)); // 出力(エンドポイントURL) new (require("aws-cdk-lib").CfnOutput)(this, "ApiUrl", { value: api.url ?? "undefined", description: "APIのベースURL", }); } } |
デプロイする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# 初回のみ(アカウント×リージョンで1回) # AWSにS3バケット・IAMロールなどを作る。これらの情報をSSMに登録。以後の "cdk deploy" 時にそれらを利用 cdk bootstrap # 差分確認(任意) cdk diff # デプロイ cdk deploy # 出力に ApiUrl が表示されます(例: https://xxxx.execute-api.ap-northeast-1.amazonaws.com/prod/) # {"message": "Hello from Lambda (Python)!"} # 不要なったら、作ったスタックを削除 cdk destroy |