Open4

AWS CDKの勉強なのだ

fagaifagai

cdkがv2.18.0、v1.150.0未満だとawsのssoによる参照ができない。

なので実行時はaws-vault等との併用が必要になる

aws-vault exec プロファイル名 -- npx aws-cdk@1.x deploy

なお、以降のバージョンでは以下のようにssoのログインを行った上で実行が可能

aws sso login --profile 対象プロファイル名
npx aws-cdk@1.x deploy --profile 対象プロファイル名
fagaifagai

LambdaでAWS Parameters and Secrets Lambda 拡張機能を使う場合

ssm:GetParameterkms:DecryptSecureStringのロールを前もってLambdaに付与しておく

import {
    aws_lambda as lambda,
} from 'aws-cdk-lib'

const paramsAndSecrets = lambda.ParamsAndSecretsLayerVersion.fromVersion(
        lambda.ParamsAndSecretsVersions.V1_0_103,
        {
            cacheSize: 500,
            logLevel: lambda.ParamsAndSecretsLogLevel.DEBUG,
        }
    );

CDKのバージョンをそれなりにちゃんと上げてればこのパラメータ名がlambdaの関数を作成する際にパラメータとして設定できるのでセットすれば良い

https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_lambda.ParamsAndSecretsLayerVersion.html

ただこれはイメージを利用しない場合だけ。
イメージを利用する場合は拡張のレイヤーを自分で埋め込む必要がある。

FROM public.ecr.aws/aws-cli/aws-cli:2.15.29 as extension-layer

ARG AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION:-"ap-northeast-1"}
ARG AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID:-""}
ARG AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY:-""}
ENV AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}
ENV AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
ENV AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}

RUN mkdir -p /opt

RUN yum update -y \
  && yum install -y unzip

RUN curl $(aws lambda get-layer-version-by-arn --arn arn:aws:lambda:ap-northeast-1:133490724326:layer:AWS-Parameters-and-Secrets-Lambda-Extension:2 --query 'Content.Location' --output text) --output layer.zip
RUN unzip layer.zip -d /opt
RUN rm layer.zip

FROM 実行イメージ

COPY --from=extension-layer /opt /opt

この通り、厄介なところでAWSの認証情報でビルドしないと行けなかったりする

この拡張の実装はいわゆるプロキシであるためここまでやるよりはアプリケーション側で吸収させるほうが良い可能性もある・・・