AWS AppConfig Agentとは
AppConfigの値をアプリケーションの代わりに自動でポーリング・データのキャッシュを行ってくれるサービスです。
これを利用することにより、カスタムでAWSのAPIを利用してデータを取りに行ったりキャッシュを構成する必要がなくなりました。
AWS AppConfigについては以下を参照下さい。
ためす
以下の手順を参考に試してみます。
前提
- 検証用ECRに適当なイメージをPush済み
- 作成はコチラを参考にcurlだけインストールしています。
- AppConfig上に簡単なプロファイルを作成して適当な環境にデプロイ済み
- ECSタスクロールは作成済み
- AppConfigのアクセス権限を付与
- ssmのアクセス権限を付与(ecs exec用)
タスク定義の作成
「ECS」→「タスク定義」→「新しいタスク定義の作成」からタスク定義を作成します。
コンテナ- 1に作成したコンテナの設定を行い、「コンテナの追加」を選択します。
AppConfigAgentのサイドカーコンテナを以下のように定義します。
- 画像URI:
public.ecr.aws/aws-appconfig/aws-appconfig-agent:2.x
- 必須コンテナ:はい
- ポートマッピング:追加
- コンテナポート2772
ECSタスクロールでAppConfigへのアクセス権限があるロールを指定し、作成します。
クラスター/サービスの作成
「ECS」→「クラスター」→「クラスターの作成」からクラスターを作成します。
クラスターが作成出来たらサービスを作成します。
作成したクラスターを選択し、サービスタブから「作成」を選択します。
今回は検証の為ネットワーク設定でパブリックサブネットのみを指定しています。確認していませんが、プライベートサブネット内でAgentを利用する場合は恐らくNatGatewayなどが必要となってくると思われます。
サービス作成後、ログ上で以下のようなメッセージが表示されます。
値の確認
実際にAppConfigからエージェント経由で値を取得できているか確認します。
ECS Execを利用し、コンテナに入ります。
CloudShellを開き、以下のコマンドでECS Execを有効化します。
aws ecs update-service \
--cluster <ClusterName> \
--service <ServiceName> \
--enable-execute-command | grep enableExecuteCommand
trueが返ってきたら「新しいデプロイの強制」オプションにチェックを入れてサービスの更新を行い、タスクを入れ替えます。
以下のコマンドでAgentではない方のコンテナに入ります。
aws ecs execute-command --cluster <ClusterName> \
--task <TaskID> \
--container <ContainerName> \
--interactive \
--command "/bin/sh"
以下のコマンドでAppConfigの値を取得することができます。
curl "http://localhost:2772/applications/<application_name>/environments/<environment_name>/configurations/<configuration_name>"