翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon ECSおよび Amazon での AWS AppConfig エージェントの使用 EKS
AWS AppConfig エージェントを使用して、Amazon Elastic Container Service (Amazon ECS) および Amazon Elastic Kubernetes Service (Amazon EKS) AWS AppConfig と統合できます。エージェントは、Amazon ECSおよび Amazon コンテナアプリケーションと一緒に実行されるサイドカーEKSコンテナとして機能します。エージェントは、次の方法でコンテナ化されたアプリケーションの処理と管理を強化します。
-
エージェントは、 AWS Identity and Access Management (IAM) ロールを使用して設定データのローカルキャッシュを管理することで、 AWS AppConfig ユーザーに代わって を呼び出します。ローカルキャッシュから設定データを引き出すことで、アプリケーションが設定データを管理するために必要となるコードの更新が少なくなり、設定データをミリ秒単位で取得でき、そのようなデータの呼び出しを妨げるネットワークの問題による影響を受けなくなります。*
-
エージェントは、 AWS AppConfig 機能フラグを取得して解決するためのネイティブエクスペリエンスを提供します。
-
すぐに使用できるエージェントで、キャッシュ戦略、ポーリング間隔、ローカル設定データの可用性に関するベストプラクティスを提供すると同時に、以降のサービスコールに必要な設定トークンを追跡します。
-
バックグラウンドで実行中、エージェントは定期的に AWS AppConfig データプレーンをポーリングして設定データの更新を行います。コンテナ化されたアプリケーションは、ポート 2772 (カスタマイズ可能なデフォルトポート値) で localhost に接続し、 HTTPGETを呼び出してデータを取得することでデータを取得できます。
-
AWS AppConfig エージェントは、コンテナを再起動またはリサイクルすることなく、コンテナの設定データを更新します。
*AWS AppConfig エージェントは、サービスが設定データを初めて取得するときにデータをキャッシュします。このため、データを取得する最初の呼び出しは、それ以降の呼び出しよりも時間がかかります。
開始する前に
コンテナアプリケーション AWS AppConfig と統合するには、機能フラグやフリーフォーム設定データなどの AWS AppConfig アーティファクトと設定データを作成する必要があります。詳細については、「で機能フラグとフリーフォーム設定データを作成する AWS AppConfig」を参照してください。
によってホストされる設定データを取得するには AWS AppConfig、コンテナアプリケーションに AWS AppConfig データプレーンへのアクセスを設定する必要があります。アプリケーションにアクセスを許可するには、コンテナサービスIAMロールで使用されるIAMアクセス許可ポリシーを更新します。具体的には、appconfig:StartConfigurationSession
と appconfig:GetLatestConfiguration
ポリシーにとアクションを追加する必要があります。コンテナサービスIAMロールには以下が含まれます。
-
Amazon ECSタスクロール
-
Amazon EKSノードロール
-
AWS Fargate (Fargate) ポッド実行ロール (Amazon EKSコンテナがコンピューティング処理に Fargate を使用している場合)
ポリシーへのアクセス許可の追加の詳細については、「 ユーザーガイド」のIAM「ID アクセス許可の追加と削除IAM」を参照してください。
トピック
Amazon ECS統合用の エージェントの開始 AWS AppConfig
AWS AppConfig エージェントサイドカーコンテナは、Amazon 環境で自動的に使用できますECS。これを使用するには、次の手順で説明されているように起動する必要があります。
Amazon ECS (コンソール) を起動するには
https://console.aws.amazon.com/ecs/v2
でコンソールを開きます。 -
ナビゲーションペインで、タスクの定義 を選択します。
-
アプリケーションのタスク定義を選択し、最新のリビジョンを選択します。
-
新しいリビジョンの作成 、JSON で新しいリビジョンを作成の順に選択します。
-
コンテナをさらに追加 を選択します。
-
名前 に、 AWS AppConfig エージェントコンテナの一意の名前を入力します。
-
イメージ にはURI、次のように入力します。
public.ecr.aws/aws-appconfig/aws-appconfig-agent:2.x
-
エッセンシャルコンテナ で はい を選択します。
-
ポートマッピングセクションで、ポートマッピングを追加を選択します。
-
コンテナパス に、「
2772
」と入力します。注記
AWS AppConfig エージェントはデフォルトでポート 2772 で実行されます。または、別のポートを指定することもできます。
-
[Create] (作成) を選択します。Amazon ECS は新しいコンテナリビジョンを作成し、詳細を表示します。
-
ナビゲーションペインで、アプリケーション を選択し、リストからアプリケーションの名前を選択します。
-
サービス タブで、アプリケーションのサービスを選択します。
-
更新 を選択します。
-
デプロイ設定 の リビジョン で、最新のリビジョンを選択します。
-
[Update] (更新) を選択します。Amazon は最新のタスク定義をECSデプロイします。
-
デプロイが完了したら、 設定とタスク タブで AWS AppConfig エージェントが実行されていることを確認できます。タスク タブで、実行中のタスクを選択します。
-
「コンテナ」セクションで、 AWS AppConfig エージェントコンテナがリストされていることを確認します。
-
AWS AppConfig エージェントが起動したことを確認するには、ログタブを選択します。 AWS AppConfig エージェントコンテナに対して次のようなステートメントを見つけます。
[appconfig agent] 1970/01/01 00:00:00 INFO serving on localhost:2772
注記
環境変数を入力または変更することで、 AWS AppConfig エージェントのデフォルトの動作を調整できます。利用可能な環境変数の詳細については、「(オプション) 環境変数を使用して Amazon ECSと Amazon の AWS AppConfig エージェントを設定する EKS」を参照してください。Amazon で環境変数を変更する方法についてはECS、「Amazon Elastic Container Service デベロッパーガイド」の「コンテナへの環境変数の受け渡し」を参照してください。
Amazon EKS統合用の エージェントの開始 AWS AppConfig
AWS AppConfig エージェントサイドカーコンテナは、Amazon 環境で自動的に使用できますEKS。これを使用するには、開始する必要があります。次の手順では、Amazon EKS kubectl
コマンドラインツールを使用してエージェントを起動する方法について説明します。
注記
続行する前に、kubeconfig
ファイルが最新であることを確認します。kubeconfig
ファイルの作成または編集の詳細については、「Amazon ユーザーガイド」の「Amazon EKSクラスターの kubeconfig ファイルの作成または更新」を参照してください。 EKS
AWS AppConfig エージェントを開始するには (kubectl コマンドラインツール)
-
アプリケーションのマニフェストを開き、Amazon EKSアプリケーションが単一コンテナデプロイとして実行されていることを確認します。ファイルの内容は次のようになります。
apiVersion: apps/v1 kind: Deployment metadata: name:
my-app
namespace:my-namespace
labels: app:my-application-label
spec: replicas: 1 selector: matchLabels: app:my-application-label
template: metadata: labels: app:my-application-label
spec: containers: - name:my-app
image:my-repo
/my-image
imagePullPolicy: IfNotPresent -
AWS AppConfig エージェントコンテナ定義の詳細をデプロイマニフェストに追加します。
- name: appconfig-agent image: public.ecr.aws/aws-appconfig/aws-appconfig-agent:2.x ports: - name: http containerPort: 2772 protocol: TCP env: - name:
SERVICE_REGION
value: region imagePullPolicy: IfNotPresent注記
以下の情報に注意してください。
-
AWS AppConfig エージェントはデフォルトでポート 2772 で実行されます。または、別のポートを指定することもできます。
-
環境変数を入力して、 AWS AppConfig エージェントのデフォルトの動作を調整できます。詳細については、「(オプション) 環境変数を使用して Amazon ECSと Amazon の AWS AppConfig エージェントを設定する EKS」を参照してください。
-
[
SERVICE_REGION
、 AWS AppConfig エージェントが設定データを取得する AWS リージョン コード ( などus-west-1
) を指定します。
-
-
次の
kubectl
コマンドを実行して、クラスターに変更を適用します。置換my-deployment
デプロイマニフェストの名前。kubectl apply -f
my-deployment
.yml -
デプロイが完了したら、 AWS AppConfig エージェントが実行されていることを確認します。アプリケーション Pod のログファイルを表示するには、次のコマンドを使用します。
kubectl logs -n
my-namespace
-c appconfig-agentmy-pod
AWS AppConfig エージェントコンテナに対して次のようなステートメントを見つけます。
[appconfig agent] 1970/01/01 00:00:00 INFO serving on localhost:2772
注記
環境変数を入力または変更することで、 AWS AppConfig エージェントのデフォルトの動作を調整できます。利用可能な環境変数の詳細については、「(オプション) 環境変数を使用して Amazon ECSと Amazon の AWS AppConfig エージェントを設定する EKS」を参照してください。
(オプション) 環境変数を使用して Amazon ECSと Amazon の AWS AppConfig エージェントを設定する EKS
AWS AppConfig エージェントコンテナの次の環境変数を変更することで、エージェントを設定できます。
環境変数 | 詳細 | デフォルト値 |
---|---|---|
|
この環境変数は、エージェントHTTPサーバーから設定データをリクエストするときに指定する必要があるトークンを定義します。トークンの値は、認証タイプが のHTTPリクエスト認証ヘッダーで設定する必要があります
|
なし |
|
この環境変数により、 AWS AppConfig エージェントは取得した各設定のバックアップを指定されたディレクトリに保存できます。 重要ディスクにバックアップされた設定は暗号化されません。設定に機密データが含まれている場合は、ファイルシステムのアクセス許可で最小特権の原則を実践 AWS AppConfig することをお勧めします。詳細については、「のセキュリティ AWS AppConfig」を参照してください。 |
なし |
|
この環境変数は、エージェントのHTTPサーバーを実行するポートを指定します。 |
2772 |
|
この環境変数は、エージェントがログに記録する詳細レベルを指定します。各レベルには、現在レベルとそれより上位のすべてのレベルが含まれます。変数は、大文字と小文字が区別されます。ログレベルは |
|
|
ログが書き込まれるディスクがある場所。指定しない場合、ログは stderr に書き込まれます。 |
なし |
|
この環境変数は、マルチアカウント取得やディスク への設定の保存など、設定ごとに追加の機能を利用するように AWS AppConfig エージェントを設定します。次のいずれかの値を入力できます。
これらの機能の詳細については、「マニフェストを使用して追加の取り出し機能を有効にする」を参照してください。 |
true |
|
この環境変数は、エージェントが AWS AppConfigから設定を取得するために使用する最大接続数を設定します。 |
3 |
|
この環境変数は、エージェントが AWS AppConfig 更新された設定データをポーリングする頻度を制御します。間隔の秒数を指定できます。時間単位で数値を指定することもできます。s は秒、m は分、h は時間です。単位が指定されなかった場合、エージェントはデフォルトで秒になります。たとえば、60 、60 秒、1m の場合、ポーリング間隔は同じになります。 |
45 秒 |
|
この環境変数は、エージェントが起動 AWS AppConfig するとすぐに からリクエストする設定データを指定します。 |
なし |
|
に設定すると |
true |
PROXY_HEADERS |
この環境変数は、PROXY_URL 環境変数で参照されるプロキシに必要なヘッダーを指定します。値は、コンマで区切られたヘッダーの一覧です。各ヘッダーは次の形式を使用します。
|
なし |
PROXY_URL |
この環境変数は、エージェントから URLへの接続に使用するプロキシを指定します AWS AppConfig。 AWS サービスHTTPS と HTTP URLsがサポートされています。 |
なし |
|
この環境変数は、エージェントが からの応答を待機する時間を制御します AWS AppConfig。サービスが応答しない場合、リクエストは失敗となります。 リクエストが初期データ取得に関するものである場合、エージェントはアプリケーションにエラーを返します。 更新データのバックグラウンドチェック中にタイムアウトが発生した場合、エージェントはエラーを記録し、しばらくしてから再試行します。 タイムアウトのミリ秒数を指定できます。時間単位で数値を指定することもできます。msはミリ秒、sは秒を表します。単位が指定されなかった場合、エージェントはデフォルトでミリ秒になります。たとえば、5000 、5000 ミリ秒、5 秒の場合、リクエストのタイムアウト値は同じになります。 |
3000 ミリ秒 |
ROLE_ARN |
この環境変数は、 IAMロールの Amazon リソースネーム (ARN) を指定します。 AWS AppConfig エージェントはこのロールを引き受けて設定データを取得します。 | なし |
ROLE_EXTERNAL_ID |
この環境変数は、引き受けたロール で使用する外部 ID を指定しますARN。 | なし |
ROLE_SESSION_NAME |
この環境変数は、引き受けたIAMロールの認証情報に関連付けるセッション名を指定します。 | なし |
SERVICE_REGION |
この環境変数は、 AWS リージョン エージェントが AWS AppConfig サービスを呼び出すために使用する代替 AWS AppConfig 手段を指定します。未定義のままにすると、エージェントは現在のリージョンを特定しようとします。確認できない場合、エージェントは起動に失敗します。 | なし |
|
この環境変数は、起動を完了する前にマニフェストが処理されるまで待機するように AWS AppConfig エージェントを設定します。 |
true |
設定データの取得
HTTP localhost 呼び出しを使用して、 AWS AppConfig エージェントから設定データを取得できます。次の例では、 HTTPクライアントcurl
で を使用します。アプリケーション言語または使用可能なライブラリでサポートされている任意の使用可能なHTTPクライアントを使用してエージェントを呼び出すことができます。
注記
アプリケーションが「test-backend/test-service」などのスラッシュを使用している場合に設定データを取得するには、URLエンコーディングを使用する必要があります。
デプロイされた設定内容をすべて取得するには
$ curl "http://localhost:2772/applications/
application_name
/environments/environment_name
/configurations/configuration_name
"
AWS AppConfig
タイプの Feature Flag
設定から個々のフラグとその属性を取得します。
$ curl "http://localhost:2772/applications/
application_name
/environments/environment_name
/configurations/configuration_name
?flag=flag_name
"
AWS AppConfig
タイプの Feature Flag
設定から複数のフラグとその属性にアクセスします。
$ curl "http://localhost:2772/applications/
application_name
/environments/environment_name
/configurations/configuration_name
?flag=flag_name_one
&flag=flag_name_two
"