やりたいこと
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/ローカル実行で共通にできます。