Amazon ECS および Amazon EKS からの設定データを取得します。 - AWS AppConfig

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon ECS および Amazon EKS からの設定データを取得します。

AWS AppConfig エージェントを使用して、Amazon Elastic Container Service (Amazon ECS) および Amazon Elastic Kubernetes Service (Amazon EKS) AWS AppConfig と統合できます。エージェントは Amazon ECS および Amazon EKS コンテナアプリケーションと並行して実行されるサイドカーコンテナとして機能します。エージェントは、次の方法でコンテナ化されたアプリケーションの処理と管理を強化します。

  • エージェントは AWS AppConfig 、 AWS Identity and Access Management (IAM) ロールを使用して設定データのローカルキャッシュを管理することで、ユーザーに代わって を呼び出します。ローカルキャッシュから設定データを引き出すことで、アプリケーションが設定データを管理するために必要となるコードの更新が少なくなり、設定データをミリ秒単位で取得でき、そのようなデータの呼び出しを妨げるネットワークの問題による影響を受けなくなります。*

  • エージェントは、 AWS AppConfig 機能フラグを取得して解決するためのネイティブエクスペリエンスを提供します。

  • すぐに使用できるエージェントで、キャッシュ戦略、ポーリング間隔、ローカル設定データの可用性に関するベストプラクティスを提供すると同時に、以降のサービスコールに必要な設定トークンを追跡します。

  • バックグラウンドで実行されている間、エージェントは定期的に AWS AppConfig データプレーンをポーリングして設定データの更新を確認します。コンテナ化されたアプリケーションは、ポート 2772 (カスタマイズ可能なデフォルトポート値) で localhost に接続し、HTTP GET を呼び出してデータを取得できます。

  • AWS AppConfig エージェントは、コンテナを再起動またはリサイクルすることなく、コンテナの設定データを更新します。

*AWS AppConfig エージェントは、サービスが設定データを初めて取得するときにデータをキャッシュします。このため、データを取得する最初の呼び出しは、それ以降の呼び出しよりも時間がかかります。

開始する前に

コンテナアプリケーション AWS AppConfig と統合するには、機能フラグやフリーフォーム設定データなどの AWS AppConfig アーティファクトと設定データを作成する必要があります。詳細については、「で機能フラグとフリーフォーム設定データを作成する AWS AppConfig」を参照してください。

によってホストされている設定データを取得するには AWS AppConfig、コンテナアプリケーションに AWS AppConfig データプレーンへのアクセスを設定する必要があります。アプリケーションにアクセス権を付与するには、コンテナサービスの IAM ロールが使用する IAM アクセス権限ポリシーを更新します。具体的には、appconfig:StartConfigurationSessionappconfig:GetLatestConfiguration ポリシーにとアクションを追加する必要があります。コンテナサービスの IAM ロールには以下が含まれます。

  • Amazon ECS タスクロール。

  • Amazon EKS ノードロール

  • AWS Fargate (Fargate) ポッド実行ロール (Amazon EKS コンテナがコンピューティング処理に Fargate を使用している場合)

ポリシーに権限を追加する方法の詳細については、IAM ユーザーガイドのIAM ID 権限の追加と削除を参照してください。‬‬

Amazon ECS インテグレーション用 AWS AppConfig エージェントを起動します。

AWS AppConfig エージェントサイドカーコンテナは、Amazon ECS 環境で自動的に使用できます。 AWS AppConfig エージェントサイドカーコンテナを使用するには、起動する必要があります。

Amazon ECS (コンソール) を起動するには
  1. コンソール (https://console.aws.amazon.com/ecs/v2) を開きます。

  2. ナビゲーションペインで、タスクの定義 を選択します。

  3. アプリケーションのタスク定義を選択し、最新のリビジョンを選択します。

  4. 新しいリビジョンの作成JSON で新しいリビジョンを作成の順に選択します。

  5. コンテナをさらに追加 を選択します。

  6. 名前に、 AWS AppConfig エージェントコンテナの一意の名前を入力します。

  7. イメージ URI には、public.ecr.aws/aws-appconfig/aws-appconfig-agent:2.xを入力します。

  8. エッセンシャルコンテナはい を選択します。

  9. ポートマッピングセクションで、ポートマッピングを追加を選択します。

  10. コンテナパス に、「2772」と入力します。

    注記

    AWS AppConfig デフォルトでは、エージェントはポート 2772 で実行されます。または、別のポートを指定することもできます。

  11. 作成 を選択します。Amazon ECS は新しいコンテナリビジョンを作成し、詳細を表示します。

  12. ナビゲーションペインで、アプリケーション を選択し、リストからアプリケーションの名前を選択します。

  13. サービス タブで、アプリケーションのサービスを選択します。

  14. 更新 を選択します。

  15. デプロイ設定リビジョン で、最新のリビジョンを選択します。

  16. 更新 を選択します。Amazon ECS は最新のタスク定義をデプロイします。

  17. デプロイが完了したら、「設定とタスク」タブで AWS AppConfig エージェントが実行されていることを確認できます。タスク タブで、実行中のタスクを選択します。

  18. コンテナセクションで、 AWS AppConfig エージェントコンテナがリストされていることを確認します。

  19. AWS AppConfig エージェントが起動したことを確認するには、ログ タブを選択します。 AWS AppConfig エージェントコンテナの次のようなステートメントを見つけます。 [appconfig agent] 1970/01/01 00:00:00 INFO serving on localhost:2772

注記

環境変数を入力または変更することで、 AWS AppConfig エージェントのデフォルト動作を調整できます。利用可能な環境変数の詳細については、「環境変数を使用した Amazon ECS および Amazon EKS 用の AWS AppConfig エージェントの設定」を参照してください。Amazon ECS の環境変数を変更する方法については、『Amazon Elastic Container Service 開発者ガイド』の「環境変数をコンテナに渡す」を参照してください。

Amazon EKS インテグレーション AWS AppConfig エージェントを起動します。

AWS AppConfig エージェントサイドカーコンテナは、Amazon EKS 環境で自動的に使用できます。 AWS AppConfig エージェントサイドカーコンテナを使用するには、起動する必要があります。以下の手順では、Amazon EKS kubectl コマンドラインツールを使用して、コンテナアプリケーションの kubeconfig ファイルを変更する方法を説明します。kubeconfig ファイルの作成または編集の詳細については、Amazon EKS ユーザーガイドの「Amazon EKS クラスター用の kubeconfig ファイルの作成または更新」を参照してください。

AWS AppConfig エージェントを起動するには (kubectl コマンドラインツール)
  1. kubeconfig ファイルを開き、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
  2. AWS AppConfig エージェントコンテナ定義の詳細を YAML デプロイファイルに追加します。

    - 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 EKS 用の AWS AppConfig エージェントの設定」を参照してください。

    • SERVICE_REGION には、 AWS AppConfig エージェントが設定データを取得する AWS リージョン コード ( などus-west-1) を指定します。

  3. kubectl ツールで以下のコマンドを実行して、クラスターに変更を適用します。

    kubectl apply -f my-deployment.yml
  4. デプロイが完了したら、 AWS AppConfig エージェントが実行されていることを確認します。アプリケーション Pod のログファイルを表示するには、次のコマンドを使用します。

    kubectl logs -n my-namespace -c appconfig-agent my-pod

    AWS AppConfig エージェントコンテナの次のようなステートメントを見つけます。 [appconfig agent] 1970/01/01 00:00:00 INFO serving on localhost:2772

注記

環境変数を入力または変更することで、 AWS AppConfig エージェントのデフォルト動作を調整できます。利用可能な環境変数の詳細については、「環境変数を使用した Amazon ECS および Amazon EKS 用の AWS AppConfig エージェントの設定」を参照してください。

環境変数を使用した Amazon ECS および Amazon EKS 用の AWS AppConfig エージェントの設定

AWS AppConfig エージェントコンテナの次の環境変数を変更することで、 エージェントを設定できます。

環境変数 詳細 デフォルト値

ACCESS_TOKEN

この環境変数は、エージェント HTTP サーバーに設定データをリクエストするときに指定する必要があるトークンを定義します。トークンの値は、認証タイプ Bearer のHTTP リクエスト認証ヘッダーに設定する必要があります。以下はその例です。

GET /applications/my_app/... Host: localhost:2772 Authorization: Bearer <token value>
なし

BACKUP_DIRECTORY

この環境変数により、 AWS AppConfig エージェントは取得した各設定のバックアップを指定されたディレクトリに保存できます。

重要

ディスクにバックアップされた設定は暗号化されません。設定に機密データが含まれている場合は、ファイルシステムのアクセス許可を持つ最小特権の原則を実践 AWS AppConfig することをお勧めします。詳細については、「AWS AppConfig のセキュリティ」を参照してください。

なし

HTTP_PORT

この環境変数は、エージェントの HTTP サーバーが実行されるポートを指定します。

2772

LOG_LEVEL

この環境変数は、エージェントがログに記録する詳細レベルを指定します。各レベルには、現在レベルとそれより上位のすべてのレベルが含まれます。変数は、大文字と小文字が区別されます。ログレベルは debug, info, warn, error, none.情報など、エージェントに関する詳細情報が含まれます。Debug には、エージェントに関する時間情報などの詳細情報が含まれます。

info

MANIFEST

この環境変数は、マルチアカウントの取得ディスク への設定の保存など、追加の設定ごとの機能を利用するように AWS AppConfig エージェントを設定します。次のいずれかの値を入力できます。

  • "app:env:manifest-config"

  • "file:/fully/qualified/path/to/manifest.json"

これらの機能の詳細については、「その他の取り出し機能」を参照してください。

true

MAX_CONNECTIONS

この環境変数は、エージェントが AWS AppConfigから設定を取得するために使用する最大接続数を設定します。

3

POLL_INTERVAL

この環境変数は、 AWS AppConfig 更新された設定データをエージェントがポーリングする頻度を制御します。間隔の秒数を指定できます。時間単位で数値を指定することもできます。s は秒、m は分、h は時間です。単位が指定されなかった場合、エージェントはデフォルトで秒になります。たとえば、60 、60 秒、1m の場合、ポーリング間隔は同じになります。

45 秒

PREFETCH_LIST

この環境変数は、エージェントが起動 AWS AppConfig するとすぐにリクエストする設定データを指定します。

なし

PRELOAD_BACKUPS

に設定するとtrue、 AWS AppConfig エージェントは で見つかった設定バックアップをメモリBACKUP_DIRECTORYにロードし、サービスから新しいバージョンが存在するかどうかをすぐに確認します。に設定するとfalse、 AWS AppConfig エージェントが設定バックアップからコンテンツをロードするのは、ネットワークに問題がある場合など、サービスから設定データを取得できない場合のみです。

true
PROXY_HEADERS この環境変数は、PROXY_URL 環境変数で参照されるプロキシに必要なヘッダーを指定します。値は、コンマで区切られたヘッダーの一覧です。各ヘッダーは次の形式を使用します。
"header: value"
なし
PROXY_URL この環境変数は、エージェントから への接続に使用するプロキシ URL を指定します AWS AppConfig。 AWS のサービスHTTPSおよび HTTP URLs はサポートされています。 なし

REQUEST_TIMEOUT

この環境変数は、エージェントが からの応答を待機する時間を制御します AWS AppConfig。サービスが応答しない場合、リクエストは失敗となります。

リクエストが初期データ取得に関するものである場合、エージェントはアプリケーションにエラーを返します。

更新データのバックグラウンドチェック中にタイムアウトが発生した場合、エージェントはエラーを記録し、しばらくしてから再試行します。

タイムアウトのミリ秒数を指定できます。時間単位で数値を指定することもできます。msはミリ秒、sは秒を表します。単位が指定されなかった場合、エージェントはデフォルトでミリ秒になります。たとえば、5000 、5000 ミリ秒、5 秒の場合、リクエストのタイムアウト値は同じになります。

3000 ミリ秒
ROLE_ARN この環境変数は、IAM ロールの Amazon リソースネーム (ARN) を指定します。 AWS AppConfig エージェントはこのロールを引き受けて設定データを取得します。 なし
ROLE_EXTERNAL_ID この環境変数は、引き受けたロール ARN で使用する外部 ID を指定します。 なし
ROLE_SESSION_NAME この環境変数は、引き受ける IAM ロールの認証情報に関連付けるセッション名を指定します。 なし
SERVICE_REGION この環境変数は、 AWS リージョン エージェントが AWS AppConfig サービスを呼び出すために使用する代替 AWS AppConfig 方法を指定します。未定義のままにすると、エージェントは現在のリージョンを特定しようとします。確認できない場合、エージェントは起動に失敗します。 なし

WAIT_ON_MANIFEST

この環境変数は、起動を完了する前にマニフェストが処理されるまで待機するように 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"