Fargate+Secrets Managerで環境変数管理


前提

AWS CLIが入っていること

create secret

create secretをコマンドラインから行います。
createすると以下のように返されるはずです。

aws secretsmanager create-secret --region ap-northeast-1 --name DATABASE_URL     --description "AWS Database URL"     --secret-string xxxx.yyyyyy.ap-northeast-1.rds.amazonaws.com
{
    "ARN": "arn:aws:secretsmanager:ap-northeast-1:xxxxxx:secret:DATABASE_URL-xxxxxx",
    "Name": "DATABASE_URL",
    "VersionId": "7c6cd5b1-e4ae-415f-zzzzzzz-xxxxxxxx"
}

AWS Secrets Managerに行くと、登録されているのが確認できます。

Secrets Manager読み取り権限の付与

読み取りのポリシーを追加します。(自分の場合は ecstaskexecutionrole)
Attach inline policyから追加しました。たぶんここもスマートな方法があるのかと思いますが、とりあえずこれで、、、

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Resource": "arn:aws:secretsmanager:ap-northeast-1:803801015105:secret:DATABASE_URL-xxxxxx"
        }
    ]
}

task definitionの整理

これをfargateのtask definitionのjsonファイルに貼り付けます。

task-definition.json
# 必要なコンテナの定義に追加
"secrets": [
  {
    "name": "DATABASE_URL",
    "valueFrom": "arn:aws:secretsmanager:ap-northeast-1:803801015105:secret:DATABASE_URL-xxxxxx"
  }
]

参考