なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

AWS CDK で Lambda を URL 付きのコンテナイメージとしてデプロイしたい

AWS CDK を使って、 AWS Lambda のコンテナイメージを使用した関数 をデプロイしたのでメモしておく。 まずはプロジェクト初期化:

$ pnpm install -g aws-cdk
$ cdk init app --language typescript

初期化できたら、 lib/xxx-stack.ts を編集。 以下のようにする:

import * as cdk from "aws-cdk-lib";
import * as lambda from "aws-cdk-lib/aws-lambda";
import { HttpMethod } from "aws-cdk-lib/aws-events";
import { Construct } from "constructs";

export class TestStack extends cdk.Stack {
  constructor(scope: Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // コンテナイメージ関数を使う
    const func = new lambda.DockerImageFunction(this, "TestFunction", {
      // Dockerfile があるディレクトリを指定
      code: lambda.DockerImageCode.fromImageAsset(`${__dirname}/../..`),
      // タイムアウトなどはお好みで
      timeout: cdk.Duration.seconds(60),
      memorySize: 2048,
    });

    // 戻り値に対して `addFunctionUrl` を呼び出し。 CORS 設定もお好きに
    const url = func.addFunctionUrl({
      authType: lambda.FunctionUrlAuthType.NONE,
      cors: {
        allowedMethods: [HttpMethod.GET, HttpMethod.POST],
        allowedOrigins: ["*"],
      },
    });
  }
}

この状態で cdk deploy すると、関数 URL が生成されたかつ、コンテナイメージとしてデプロイされた Lambda が作られる。 ということでメモでした。