Amplifyで作ったECSのContainerからSecrets Managerを参照する
2020/12にAmplify CLIでFargateを利用したcontainerのデプロイが可能になりました。
こちらの記事を見ながら試してみました。
この記事のとおりに進めることで、containerが無事に動いてバックエンドのAPIを作ることができました。
そうなってくると、次はDBアクセスをしたくなり、DB接続情報をSecrets Managerで管理したいと思いました。
調べてみた
公式ドキュメントにEnvironment variables and secrets
という項目が!!
どうやら、DockerfileだけでDeployするとsecretは使えなそうでdocker-compose.ymlが必要そう。
やってみた
ドキュメント通りにdocker-compose.ymlを作って、amplify push
docker-compose.yml
version: "3.8"
services:
backend:
build:
args:
- NODE_ENV=development
context: backend
environment:
- DATABASE_NAME=mydb
secrets:
DB_PASSWORD:
file: ../secrets/.secret-pass
結果
- AWS Secrets Managerにsecretは作られた
- containerからは参照できない
ダメやん。。。
解決方法
docker-compose.yml
version: "3.8"
services:
backend:
build:
args:
- NODE_ENV=development
context: backend
environment:
- DATABASE_NAME=mydb
secrets:
- DB_PASSWORD
secrets:
DB_PASSWORD:
file: ../secrets/.secret-pass
serviceの中にsecretsへの参照情報を加えるが正解でした。
これで、バックエンド開発が楽になるぞ!!
secretsが参照できなくなる事象(2021/02/06追記)
-
amplify push
した時に、下記の質問が表示されるのですが、これにNo
を選択すると、登録済みのsecretへのECS(container)からの参照が削除されて使えなくなってしまいます- つまりsecretを持ってない開発者はPushできない。。。
"Secret configuration detected. Do you wish to store new values in the cloud?"
- amplify-cliのバージョンは4.41.2
- 2021-02-06現在
- AWSのサポートに問い合わせ中
- 2021-02-16時点で調査中とのこと。たぶんバグ。
- 2021-02-19 バグ確定。issueになりました。