[AWS CDK] SSMのパラメータストアにあるStringとSecure StringをLambdaで使ってみた

SSM(Systems Manager)のパラメータストアでは、次の3種類をサポートしています。

  • String
  • String List
  • Secure String

これらにSlackのWebhookURLなどを格納して、Lambdaで使うことがよくあります。(Git管理コードに含めたくない等)

そこで本記事では、下記についてAWS CDKを使ってやってみました!

  • String
    • Lambdaの環境変数に設定し、コードで参照する
  • Secure String
    • Lambdaのコード内でSSMから取得する

なお、Secure Stringは、CloudFormation(やAWS SAM、AWS CDK)のLambdaは未サポートのため、コードでSSMから取得する必要があります。 (RDSのMasterUserPasswordなど、一部のみサポートされています)

環境

項目 バージョン
macOS Mojave 10.14.6
AWS CDK 1.9.0 (build 30f158a)
node v10.16.1
npm 6.9.0

SSMのパラメータストアにStringとSecure Stringを追加する

あらかじめ追加しておきます。

$ aws ssm put-parameter \
    --type 'String' \
    --name '/CDK/Sample/NormalParam1' \
    --value 'this is normal param1.'
{
    "Version": 1
}
$ aws ssm put-parameter \
    --type 'SecureString' \
    --name '/CDK/Sample/SecureParam1' \
    --value 'this is secure param1.'
{
    "Version": 1
}

AWS CDKプロジェクトの構築

$ mkdir AWSCDK-SSM-SecureStringSample
$ cd AWSCDK-SSM-SecureStringSample
$ cdk init app --language=typescript

必要なライブラリをインストールします。

$ npm install --save @aws-cdk/aws-apigateway
$ npm install --save @aws-cdk/aws-lambda
$ npm install --save @aws-cdk/aws-ssm
$ npm install --save @aws-cdk/aws-iam
$ npm install --save-dev aws-sdk

AWS CDKで適当にWebAPIを作る

Lambdaコードを書く

まずはファイルを作ります。

$ mkdir -p src/lambda/
$ touch src/lambda/app.ts

続いてコードを下記にします。

インフラをコードで書く!!!

続いてlib/awscdk-ssm-secure_string_sample-stack.tsを下記にします。

ビルドする

npm run build

デプロイする

cdk deploy

動作確認

normal_param1secure_param1がバッチリ取得できました!

$ curl https://xxxxx.execute-api.ap-northeast-1.amazonaws.com/prod/abcd1234
{
    "normal_param1":"this is normal param1.",
    "secure_param1":"this is secure param1.",
    "message":"request id: abcd1234"
}

AWSの様子

SSM(Systems Manager)

SSMパラメータストアの様子

Lambda

Lambdaの環境変数の様子

さいごに

書く量は、CloudFormationとそんなに変わらないですが、デフォルト値の設定や取得できなかったとき、という部分をコードで書けるので楽になりそうな予感がしました。

参考