🍧

Amplifyで作ったECSのContainerからSecrets Managerを参照する

2021/01/29に公開

2020/12にAmplify CLIでFargateを利用したcontainerのデプロイが可能になりました。
こちらの記事を見ながら試してみました。
https://dev.classmethod.jp/articles/amplify-cli-containerize/

この記事のとおりに進めることで、containerが無事に動いてバックエンドのAPIを作ることができました。
そうなってくると、次はDBアクセスをしたくなり、DB接続情報をSecrets Managerで管理したいと思いました。

調べてみた

公式ドキュメントにEnvironment variables and secretsという項目が!!
https://docs.amplify.aws/cli/usage/containers#environment-variables-and-secrets

どうやら、DockerfileだけでDeployするとsecretは使えなそうでdocker-compose.ymlが必要そう。

やってみた(NGパターン)

ドキュメント通りに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からは参照できない

ダメやん。。。

2022-02-07追記

  • AWSのドキュメントがいつの間にか修正されていますね。NGパターンの記載はなくなりました。

解決方法

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追記 → 2021/05/14追記)

この事象は、Amplify CLIのv4.51.0にて修正されました

  • amplify push した時に、下記の質問が表示されるのですが、これにNoを選択すると、登録済みのsecretへのECS(container)からの参照が削除されて使えなくなってしまいます
    • つまりsecretを持ってない開発者はPushできない。。。
"Secret configuration detected. Do you wish to store new values in the cloud?"
NCDCエンジニアブログ

Discussion