急遽帰省することになり、AWS Summit Japan 2024には関東に戻れるといいなと思っております。 AWS AppConfigがAWS PrivateLinkをサポートし始めたのが2023年12月のことで、まだ記憶に新しい出来事です。
本ブログ投稿では、ECS on Fargateを例として、AppConfigのPrivateLinkサポートを活用した具体的な設定方法と注意点をご紹介します。
- 読者の前提条件
- AWS AppConfigのAWS PrivateLinkサポートで何が変わるのか
- AppConfigのPrivateLinkの利用方法
- 注意点:AppConfigエージェントのコンテナイメージの取得について
- サンプルのGitHubリポジトリ
- おわりに
読者の前提条件
- ✅ AWS AppConfig、VPCエンドポイント、Amazon ECSを概要レベルで理解している必要があります。
AWS AppConfigのAWS PrivateLinkサポートで何が変わるのか
これまでは、プライベートサブネットからAWS AppConfigを利用するためには、NATゲートウェイが必要でした。
AppConfigがPrivateLinkに対応したことで、AppConfigへのアクセスをVPC Interface Endpointを経由して行えるようになり、NATゲートウェイが不要になりました。
AppConfigのPrivateLinkの利用方法
ここからは、Amazon ECSの例を用いて、AppConfigのPrivateLinkを利用する方法をご紹介します。
1. NAT Gatewayを利用しない状態での確認
まず、NATゲートウェイを利用せずにプライベートサブネットに配置されたECSタスクのAppConfigサイドカーコンテナでエラーが発生することを確認します。以下のCloudWatchLogsの内容から、タイムアウトエラーが発生していることがわかります。
2. AppConfigのVPCエンドポイントを追加する。
タイムアウトエラーを解消するために、AppConfigのVPCエンドポイントを追加します。AppConfigは2種類のエンドポイントがあり、「com.amazonaws.region.appconfig」と「com.amazonaws.region.appconfigdata」の両方のVPC Interface Endpointを設定してあげる必要があります。
VPC Interface Endpointの設定は、他のサービスと同様に、HTTPS(ポート443)に対するインバウンドを許可するセキュリティグループと、プライベートサブネットの指定が必要です。
3. AppConfigに接続して動作確認する
Web APIのエンドポイントをブラウザから呼び出して、AppConfigから設定内容を取得する動作を確認します。以下の画像のように、レスポンスにはconfig情報を含むJSONが返され、AppConfigから設定内容を適切に取得できていることが確認できます。
4. AppConfigの機能フラグを切り替えて動作確認する
次に、AppConfigの設定を更新しても正しく動作するか確認します。ここでは機能フラグを切り替えます。以下の画像のように、フラグをオンに変更してデプロイします。
デプロイ後にもう一度Web APIのエンドポイントをブラウザから呼び出すと、config情報のJSONの値が変更されていることがわかります。機能フラグの切り替えが適切に反映されていました。
注意点:AppConfigエージェントのコンテナイメージの取得について
AppConfigエージェントのコンテナイメージはECR Publicで公開されています。プライベートサブネットでNATゲートウェイを利用しない環境では、ECR Publicに接続できなくなります。その結果、コンテナイメージを取得できず、ECSサービスが起動できません。この問題を解決するための有効な方法として、Pull through cacheの設定を行うことができます。
Pull through cacheを利用したAppConfigエージェントのコンテナイメージの取得方法
次に、Pull through cacheを利用したAppConfigエージェントのコンテナイメージの取得方法を解説します。 まず、以下の画像のように、Pull through cacheを設定します。
次にAWS CLIを利用してECRにログインします。
# ログインコマンド例 $ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-public
ECR Publicにあるコンテナイメージを取得するには、ecr-publicのnamespaceを指定する必要があります。
# ECR Publicからコンテナイメージpullの例 $ docker image pull xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/ecr-public/aws-appconfig/aws-appconfig-agent:2.x
すると、自動的にプライベートリポジトリにPull through cacheとして保存されます。
あとは、ECSのタスク定義に、キャッシュされたコンテナイメージのURIを指定するだけでOKです。
サンプルのGitHubリポジトリ
こちらで紹介した方法で利用したソースコードは、以下のGitHubリポジトリにありますので、ご活用ください。
おわりに
AppConfigのPrivateLinkを活用して、セキュアなアプリケーション設定を実現する方法をご紹介しました。今回はECSの事例でしたが、機会があればVPC Lambdaにおけるプライベートサブネットでの利用例も紹介できればと考えています。AppConfigは漸進的なアプリケーション構築に必須であり、積極的に活用していきたいと考えております。参考になれば幸いです。