搭配 Amazon ECS和 Amazon 使用 AWS AppConfig 客服人員 EKS - AWS AppConfig

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

搭配 Amazon ECS和 Amazon 使用 AWS AppConfig 客服人員 EKS

您可以使用 AWS AppConfig Agent AWS AppConfig 與 Amazon Elastic Container Service (Amazon ECS) 和 Amazon Elastic Kubernetes Service (Amazon EKS) 整合。代理程式可做為與 Amazon ECS和 Amazon 容器應用程式一起執行的邊車EKS容器。代理程式會以下列方式增強容器化應用程式處理和管理:

  • 客服人員會使用 AWS Identity and Access Management (IAM) 角色 AWS AppConfig 來代表您呼叫 ,並管理組態資料的本機快取。透過從本機快取提取組態資料,您的應用程式需要較少的程式碼更新來管理組態資料、在幾毫秒內擷取組態資料,並且不受可能中斷對此類資料呼叫的網路問題影響。*

  • 客服人員提供原生體驗,以擷取和解決 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 Pod 執行角色 (如果您的 Amazon EKS容器使用 Fargate 進行運算處理)

如需將許可新增至政策的詳細資訊,請參閱 IAM 使用者指南 中的新增和移除IAM身分許可

啟動 Amazon ECS整合的 AWS AppConfig 代理程式

AWS AppConfig 客服人員側載容器會自動在您的 Amazon ECS環境中提供。若要使用它,您必須啟動它,如下列程序所述。

啟動 Amazon ECS(主控台)
  1. https://console.aws.amazon.com/ecs/v2 開啟主控台。

  2. 在導覽窗格中,選擇 Task Definitions (任務定義)。

  3. 選擇應用程式的任務定義,然後選擇最新版本。

  4. 選擇建立新的修訂版本 建立新的修訂版本

  5. 選擇新增更多容器

  6. 針對名稱 ,輸入 AWS AppConfig 客服人員容器的唯一名稱。

  7. 針對映像 URI,輸入: public.ecr.aws/aws-appconfig/aws-appconfig-agent:2.x

  8. 針對必要容器 ,選擇

  9. 連接埠映射區段中,選擇新增連接埠映射

  10. 對於容器連接埠 ,輸入 2772

    注意

    AWS AppConfig 根據預設,代理程式會在連接埠 2772 上執行。您可以指定不同的連接埠。

  11. 選擇 Create (建立)。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 的 AWS AppConfig Agent EKS。如需有關如何在 Amazon 中變更環境變數的資訊ECS,請參閱 Amazon Elastic Container Service 開發人員指南 中的將環境變數傳遞至容器

啟動 Amazon EKS整合的 AWS AppConfig 代理程式

AWS AppConfig 客服人員側載容器會自動在您的 Amazon EKS環境中提供。若要使用它,您必須啟動它。下列程序說明如何使用 Amazon EKSkubectl命令列工具來啟動代理程式。

注意

在繼續之前,請確定您的kubeconfig檔案是最新的。如需建立或編輯kubeconfig檔案的詳細資訊,請參閱 Amazon 使用者指南 中的為 Amazon EKS叢集建立或更新 kubeconfig 檔案 EKS

啟動 AWS AppConfig 代理程式 (kubectl 命令列工具)
  1. 開啟應用程式的清單,並確認您的 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 客服人員容器定義詳細資訊新增至部署資訊清單。

    - 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
    注意

    記下以下資訊。

  3. 執行下列kubectl命令,將變更套用至叢集。Replace (取代) my-deployment 您的部署資訊清單名稱。

    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 的 AWS AppConfig Agent EKS

(選用) 使用環境變數來設定 Amazon ECS和 Amazon 的 AWS AppConfig Agent EKS

您可以變更 AWS AppConfig 代理程式容器的下列環境變數來設定代理程式。

環境變數 詳細資訊 預設值

ACCESS_TOKEN

此環境變數會定義權杖,從代理HTTP伺服器請求組態資料時必須提供該權杖。權杖的值必須在 授權類型的HTTP請求授權標頭中設定Bearer。請見此處範例。

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

此環境變數會指定代理程式記錄的詳細資訊層級。每個層級都包含目前層級和所有更高層級。這些變數區分大小寫。從最詳細到最不詳細,日誌層級為:debugwarnerror、 和 noneinfoDebug包含有關代理程式的詳細資訊,包括時間資訊。

info

LOG_PATH

寫入日誌的磁碟位置。如果未指定,日誌會寫入 stderr。

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 和 1 公尺會產生相同的輪詢間隔。

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 服務,包括HTTPURLs支援 AWS AppConfig。 HTTPS和 。

REQUEST_TIMEOUT

此環境變數控制客服人員等待來自 的回應的時間量 AWS AppConfig。如果服務未回應,則請求會失敗。

如果請求是初始資料擷取,代理程式會將錯誤傳回至您的應用程式。

如果在背景檢查更新的資料期間發生逾時,客服人員會記錄錯誤,並在短暫延遲後重試。

您可以指定逾時的毫秒數。您也可以指定具有時間單位的數字:毫秒為 毫秒,秒為 。如果未指定單位,代理程式預設為毫秒。例如,5000、5000ms 和 5s 會產生相同的請求逾時值。

3000 毫秒
ROLE_ARN 此環境變數會指定IAM角色的 Amazon Resource Name (ARN)。 AWS AppConfig 客服人員會擔任此角色來擷取組態資料。
ROLE_EXTERNAL_ID 此環境變數會指定要與擔任角色 搭配使用的外部 IDARN。
ROLE_SESSION_NAME 此環境變數會指定要與擔任IAM角色的憑證相關聯的工作階段名稱。
SERVICE_REGION 此環境變數指定 AWS 區域 代理程式用來呼叫 AWS AppConfig 服務的替代方案 AWS AppConfig 。如果未定義,客服人員會嘗試判斷目前的區域。如果無法啟動,代理程式將無法啟動。

WAIT_ON_MANIFEST

此環境變數會將 AWS AppConfig 客服人員設定為等到資訊清單處理完畢再完成啟動。

true

擷取組態資料

您可以使用 HTTP localhost 呼叫從 AWS AppConfig 客服人員擷取組態資料。下列範例curl搭配HTTP用戶端使用。您可以使用應用程式語言或可用程式庫支援的任何可用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"