やりたいこと

https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/specifying-sensitive-data.html

Amazon ECS を使用すると、AWS Secrets Manager シークレットまたは AWS Systems Manager パラメータストアのパラメータに機密データを保存してコンテナの定義でそれを参照することによって、コンテナに機密データを挿入できます。この機能は、EC2 および Fargate の両方の起動タイプを使用するタスクでサポートされています。

これ、Secrets ManagerやSSMパラメータストアに保存している値をECSで実行するコンテナに環境変数として展開できるので便利です。
ただ、開発中などコンテナをローカルPCで実行(docker run)したいことも多いので、ローカル実行時も同じように展開するシェルを書きました。

やり方

要件

  • ServiceSettingsというパラメータを、dockerコンテナでSERVICE_SETTINGという環境変数に展開したい

前提条件

  • aws cliが入っていること

シェル

aws cliで値を引っ張ってきて -e で割り当てる

SecretsManagerの場合

setting=`aws secretsmanager get-secret-value --secret-id ServiceSetting --output text --query 'SecretString'`

docker run -it \
    -e  SERVICE_SETTING=$setting \
  ...

--output textにするのがミソ

SSM/ParameterStoreの場合

setting=`aws ssm get-parameter --name ServiceSetting --with-decryption --output text --query Parameter.Value | tr -d ' \n'`

docker run -it \
    -e  SERVICE_SETTING=$setting \
  ...

trでスペースと改行削除するのがミソ
暗号化してる前提で –with-decryption つけてます(してなかったらいらない)

これで

ストアの値を環境変数へ展開して利用するアプリケーション(on Docker)のコードを、ECS/ローカル実行で共通にできます。

元記事はこちら

DockerコンテナをローカルrunしたときECSと同じ様にSecretsManager/パラメータストアの値を環境変数に展開