【AWS CDK】Lambda の Provisioned Concurrency を設定する

はじめに

テントの中から失礼します、CX事業本部のてんとタカハシです!

今回は、AWS CDK で Lambda の Provisioned Concurrency を設定してみました。

Provisioned Concurrency の概要については下記の記事をご参照ください。

ソースコードは下記のリポジトリにも置いてあります。

GitHub - iam326/cdk-lambda-provisioned-concurrency

環境

環境は下記の通りです。

$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.15.7
BuildVersion:	19H2

$ cdk --version
1.86.0 (build a10cfcf)

$ yarn --version
1.22.10

$ node --version
v14.7.0

実装

実装は下記の通りです。

Provisioned Concurrency を設定するには、エイリアスかバージョンを指定する必要があるため、ここでは最新のバージョン($LATEST ではない)を指すエイリアスを作成しているのがポイントです。

lib/cdk-lambda-provisioned-concurrency-stack.ts

import * as cdk from '@aws-cdk/core';
import * as lambda from '@aws-cdk/aws-lambda';

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

    const func = new lambda.Function(this, 'SampleLambdaFunction', {
      code: lambda.Code.fromAsset('dist/hello-world'),
      functionName: 'SampleLambdaFunction',
      handler: 'index.handler',
      runtime: lambda.Runtime.NODEJS_12_X,
      currentVersionOptions: {
        removalPolicy: cdk.RemovalPolicy.RETAIN,
      },
      // 予約された同時実行数の設定
      reservedConcurrentExecutions: 100,
    });

    // 最新のバージョンを指すエイリアスを作成してから、
    func.currentVersion.addAlias('Alias', {
      // プロビジョニングされた同時実行数の設定を行う
      provisionedConcurrentExecutions: 5,
    });
  }
}

デプロイ

デプロイを開始すると、Provisioned Concurrency のステータスが「準備完了」になるまで、スタックの作成は終わりません。

スタックの作成中に Lambda の画面を確認すると、ステータスが「進行中」の設定が存在していることを確認できます。

スタックの作成が終了すると、

ステータスが「準備完了」に変わっていることを確認できます。

おわりに

Lambda の Provisioned Concurrency はとても便利な機能ですが、うっかり設定したまま放置してしまうと、なかなかにコストが嵩んでしまうので、消し忘れにご注意を。

今回は以上になります。最後まで読んで頂きありがとうございました!