AWS App RunnerでSSMのパラメータストアを使って環境変数を設定する
AWS App RunnerでSystem Managerのパラメータストアを使って環境変数を設定する方法を紹介します。
パラメータストアの設定
まずはパラメータストアでApp Runnerで使う環境変数を設定します
AWSコンソールからSystem Managerのパラメータストアを開き、パラメータストアをクリックします。
「Create Parameter」を開き必要な環境変数を設定します。
今回は以下の設定をした場合で紹介します。(TierはすべてStandard)
Name | Type | Data type | Value |
---|---|---|---|
/app-runner-sample/DB_USER | String | text | root |
/app-runner-sample/DB_PASSWORD | String | text | admin |
/app-runner-sample/DB_HOST | String | text | localhost |
作成したら後で使用するので各パラメータのArnをメモしておきます。
IAMロールの設定
App Runnerでパラメータストアの値を使うには、App Runnerのタスクロールの中にパラメータストアを読み込むためのポリシーを追加する必要があります。
AWSのコンソールからIAMを開いたら、「ロール」をクリックして「ロールを作成」でロールを作成します。
信頼されたエンティティを選択したら カスタム信頼ポリシー
を選択します。(普通はAWSのサービスを選択すれば出てくるはずですが、なぜか検索しても出てこないのでここでポリシーを手入力します)
カスタム信頼ポリシーを以下のjsonに書き換えます。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "tasks.apprunner.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
許可ポリシーでは、 AmazonSSMReadOnlyAccess
を選択します。もし、アプリケーションで他のAWSサービスを使う場合はそのポリシーも併せて追加します。
ここではロール名は SSMAccessFromApprunner
として作成します。
App Runnerの設定
それではApp Runnerの設定をします。
App Runnerのコンソールを開き、サービスの作成
をクリックします。
デプロイするアプリケーションのソースとデプロイの設定をした後、サービス設定の 環境変数を追加
をクリックして環境変数の設定をします。
ソースは SSMパラメータストア
、環境変数名にはアプリケーションで参照する環境変数名、環境変数の値にはパラメータストアで設定したときにメモしたARNを入力します。
「セキュリティ」のプルダウンを開いて、「アクセス許可」のインスタンスロールでは先ほど作成したApp Runnerのタスクロール(今回の場合は SSMAccessFromApprunner
)を選択します。(説明では「EC2用の作成された」と書いてあったので結構ハマりました…)
これでサービスを作成するとパラメータストアの値を環境変数として参照されるようになります。
まとめ
今回はApp RunnerでSystems Managerのパラメータストアを使って環境変数を設定する方法を紹介しました。
App RunnerはECSにはない便利機能があるのがいいところですが、今回の機能は地味につまづきどころがあるのでそこが改善されるといいなと思いました。
おまけ
実はパラメータストアにアクセスするためのIAMポリシーは以下のようにテンプレートがあることをこの記事を書いているときに気づきましたw
テンプレートなので、パラメータストアのパラメータ名は適宣書き換える必要はありますが、アカウントIDがついているので、プロダクトとして運用するならこのテンプレートを使って必要最小限のアクセス権限だけ付与するやり方もありです。
Discussion