7
0

More than 1 year has passed since last update.

[AWS CDK]SSMのパラメータストアに登録したデータを環境変数にセットする方法

Last updated at Posted at 2022-12-06

はじめに

この記事は、ミロゴス Advent Calendar 2022 7日目の記事です。

LINEのチャネルシークレットとアクセストークンをSSMパラメータストアから取得してlambda環境変数にセットした方法をまとめました。

AWS Systems Manager(SSM)とは

AWS Systems Manager は、AWS クラウド で実行されるアプリケーションとインフラストラクチャの管理に役立つ一連の機能です。Systems Manager により、アプリケーションとリソースの管理が簡略化され、オペレーション上の問題の検出と解決にかかる時間が短縮されるほか、AWS リソースを大規模かつ安全に管理できるようになります。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/what-is-systems-manager.html

AWS Systems Manager Parameter Storeとは

AWS Systems Manager の一機能である Parameter Store は、設定データ管理と機密管理のための安全な階層型ストレージを提供します。パスワード、データベース文字列、Amazon Machine Image (AMI) ID、ライセンスコードなどのデータをパラメータ値として保存することができます。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/systems-manager-parameter-store.html

環境

cdk version
2.45.0

python version
3.9.6

aws-lambda-powertools version
1.27.0

実装の流れ

最初に、パラメータストアに必要なデータを登録します。

パラメータストアに登録

ターミナル
aws ssm put-parameter \
    --name "parameter-name" \
    --value "parameter-value" \
    --type SecureString \
    --tags "Key=tag-key,Value=tag-value"

# --name パラメータの名前
# --value パラメータの値
# --type 型
# --tags キーと値

上記のコマンドを実行後、AWS Systems Manager > パラメータストアから正常に登録されているか確認します。

スクリーンショット 2022-12-02 19.43.04.png

パラメータ名をlambda環境変数にセット

cdk_stack.py
from aws_cdk import aws_ssm as ssm
from aws_lambda_python_alpha as python_lambda

function_object = python_lambda.PythonFunction(
    #
    # 省略
    #
    environment={"ENV_PARAMETER_NAME": "parameter-name"}
)

# セキュリティで保護された文字列パラメータをインポートする場合
param = ssm.StringParameter.from_secure_string_parameter_attributes(self, "MySecureValue",
    parameter_name="parameter-name"
)

# 権限の付与
param.grant_read(grantee=function_object.handler)

CDKからlambdaへ環境変数をセットした後に対象のlambdaにaws_ssmのライブラリを使用して
SSMパラメータへの読み取り権限を付与します。

  • StringParameter (クラス)

    • 新しい文字列 SSM パラメータを作成します。
  • from_secure_string_parameter_attributes (静的メソッド)

    • SSM パラメータ ストアからセキュリティで保護された文字列パラメータをインポートします。
  • grant_read (メソッド)

パラメータの値を取得

index.py
from aws_lambda_powertools.utilities import parameters

value = parameters.get_parameter("parameter-name", decrypt=True)
# decrypt=True 暗号化されたデータを復号します

lambda上からlambda-powertoolsのparametersを使用してパラメータ名から値を取得します。

※パラメータストアに登録した型がSecureStringの場合
パラメータは暗号化されているため、取得の際に復号します。

  • parameters (クラス)
    • AWS Systems Manager Parameter Store、AWS Secrets Manager、AWS AppConfig、Amazon DynamoDBから 1 つまたは複数のパラメータ値を取得するか、独自のものを持ち込むための高水準関数を提供します。
  • get_parameters (メソッド)
    • (SSM) パラメータストアからパラメータ値を取得する

確認

下記2点が確認できれば完了です。

  • lambda > 環境変数からパラメータ名が存在しているか
    スクリーンショット 2022-12-02 19.45.00.png

  • lambda上からパラメータの値が取得できているか

    • ロググループ > ログイベントから確認
      スクリーンショット 2022-12-06 11.00.23.png

おわりに

AWS CDKを触ったばかりで知らないこともたくさんありますが
覚えたことを少しづつアウトプット出来ればと思います。

参考

https://docs.aws.amazon.com/cdk/api/v1/python/aws_cdk.aws_ssm/StringParameter.html
https://awslabs.github.io/aws-lambda-powertools-python/2.3.0/utilities/parameters/

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0