LoginSignup
9
7

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-09-05

やりたいこと

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/ローカル実行で共通にできます。

9
7
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
9
7