背景
アップデートで、AWS App Runnerデプロイ時にAWS Secrets ManagerとSSM Pramaeter Storeの値を環境変数として取得することができるようになりました。
SSM パラメータから値を取得するケースは結構ありそうなので試してみます。
前提
コンテナは作成、ECRにPush済みです。
環境変数$TEST_PARAMの値を画面に出力するコンテナを作成しました。
環境変数が設定されていない状態だとなにも出力されません。
パラメータの作成
ssm パラメータの作成を行います。
name:test-param
,value:test-value
として作成しました。
$ aws ssm put-parameter \
--name "test-param" \
--type "String" \
--value "test-value"
インスタンスロールの作成
App RunnerがSSM Parameter Storeにアクセスするためにインスタンスロールを作成し、ssmへのアクセス権限を付与します。
IAMのコンソールから以下の設定でロールを作成します。
信頼されたエンティティ
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "tasks.apprunner.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
RoleにアタッチするPolicy
{
"Statement": [
{
"Action": [
"ssm:GetParameters"
],
"Effect": "Allow",
"Resource": [
"arn:aws:ssm:<region>:<aws_account_id>:parameter/<parameter_name>"
]
}
],
"Version": "2012-10-17"
}
Serviceの作成
App Runnerのサービスを作成します。
環境変数欄で環境変数を設定します。
name:TEST_PARAM
valule:arn:aws:ssm:<region>:<aws_account_id>:parameter/<parameter_name>
インスタンスロールには先ほど作成したRoleを選択します。
確認
デプロイ後、デフォルトドメインにアクセスすると、パラメータ値が取得されて表示されることを確認できました。
終わりに
ssm パラメータからパラメータ値を取得し、App Runnerの環境変数に配置するところまでを確認しました。
実際に試してみて。一度取得したパラメータ値から更新する場合はタスクを再デプロイしてパラメータ値を再取得する必要がありそうな点が気になりました。
余談ですがCopilotのmanifestでも試してみたのですが、うまくできなかったのでCopilotにはまだ未対応なのかもしれません。Copiloetで取得する場合はSecrets機能を使うのがベタかなと思います。