从 Amazon ECS 和 Amazon EKS 检索配置数据 - Amazon AppConfig
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

从 Amazon ECS 和 Amazon EKS 检索配置数据

您可以使用代理 Amazon AppConfig 与亚马逊弹性容器服务 (Amazon ECS) 和亚马逊 Elastic Kubernetes 服务 (Amazon EKS) 集成。 Amazon AppConfig 该代理充当 sidecar 容器,与您的 Amazon ECS 和 Amazon EKS 容器应用程序一起运行。该代理通过以下方式增强容器化应用程序的处理和管理:

  • 代理通过使用 Amazon Identity and Access Management (IAM) 角色并管理配置数据的本地缓存来代表您进行调用 Amazon AppConfig 。通过从本地缓存中提取配置数据,应用程序需要更少的代码更新来管理配置数据,在几毫秒内检索配置数据,并且不受可能中断对此类数据的调用的网络问题的影响。*

  • 该代理为检索和解析 Amazon AppConfig 功能标记提供了原生体验。

  • 该代理开箱即用,提供了缓存策略、轮询间隔和本地配置数据可用性的最佳实践,同时跟踪后续服务调用所需的配置令牌。

  • 在后台运行时,代理会定期轮询 Amazon AppConfig 数据平面以获取配置数据更新。容器化应用程序可以通过连接到端口 2772(可自定义的默认端口值)上的本地主机并调用 HTTP GET 来检索数据。

  • Amazon AppConfig 代理无需重新启动或回收容器即可更新容器中的配置数据。

*Amazon AppConfig 代理会在服务首次检索您的配置数据时缓存数据。因此,检索数据的第一次调用比后续调用慢。

开始前的准备工作

要 Amazon AppConfig 与容器应用程序集成,必须创建 Amazon AppConfig 构件和配置数据,包括功能标志或自由格式配置数据。有关更多信息,请参阅 在中创建功能标志和自由格式配置数据 Amazon AppConfig

要检索托管的配置数据 Amazon AppConfig,您的容器应用程序必须配置为可以访问 Amazon AppConfig 数据平面。要为您的应用程序授予访问权限,请更新您的容器服务 IAM 角色使用的 IAM 权限策略。具体而言,您必须将 appconfig:StartConfigurationSessionappconfig:GetLatestConfiguration 操作添加到策略中。容器服务 IAM 角色包括以下内容:

  • Amazon ECS 任务角色

  • Amazon EKS 节点角色

  • Amazon Fargate (Fargate) 容器执行角色(如果您的 Amazon EKS 容器使用 Fargate 进行计算处理)

有关如何添加权限至策略的信息,请参阅《IAM 用户指南》中的添加和删除 IAM 身份权限

启动 Amazon AppConfig Agent for Amazon ECS 集成

Amazon AppConfig Agent sidecar 容器将在您的 Amazon ECS 环境中自动可用。要使用 Amazon AppConfig Agent sidecar 容器,必须将其启动。

启动 Amazon ECS(控制台)
  1. https://console.aws.amazon.com/ecs/v2 打开控制台。

  2. 在导航窗格中,选择 Task definitions(任务定义)。

  3. 选择应用程序的任务定义,然后选择最新版本。

  4. 选择创建新的修订创建新的修订

  5. 选择添加更多容器

  6. 名称中,输入 Amazon AppConfig 代理容器的唯一名称。

  7. 对于 Image URI,输入:public.ecr.aws/aws-appconfig/aws-appconfig-agent:2.x

  8. 对于 基本容器,选择

  9. 端口映射 部分中,选择 添加端口映射

  10. 对于容器端口,输入 2772

    注意

    Amazon AppConfig 默认情况下,代理在端口 2772 上运行。也可指定不同的端口。

  11. 选择创建。Amazon ECS 将创建新的容器修订并显示详细信息。

  12. 在导航窗格中,选择 集群,然后在列表中选择应用程序的集群。

  13. 服务 选项卡上,为应用程序选择服务。

  14. 选择更新

  15. 部署配置 下,对于 修订,选择最新的修订。

  16. 选择更新。Amazon ECS 部署最新的任务定义。

  17. 部署完成后,您可以在 “配置和任务” 选项卡上验证 Amazon AppConfig 代理是否正在运行。在 任务 选项卡上,选择正在运行的任务。

  18. 在 “容器” 部分,确认已列出 Amazon AppConfig 代理容器。

  19. 要验证 Amazon AppConfig 代理是否已启动,请选择日志选项卡。在 A Amazon AppConfig gent 容器中找到如下语句:[appconfig agent] 1970/01/01 00:00:00 INFO serving on localhost:2772

注意

您可以通过输入或更改环境变量来调整 Amazon AppConfig Agent 的默认行为。有关可用环境变量的更多信息,请参阅 使用环境变量为 Amazon ECS 和 Amazon EKS 配置 Amazon AppConfig 代理。有关如何在 Amazon ECS 中更改环境变量的信息,请参阅 Amazon Elastic Container Service 开发人员指南 中的 将环境变量传递到容器

启动 Amazon AppConfig agent for Amazon EKS 集成

Amazon AppConfig Agent sidecar 容器将在您的 Amazon EKS 环境中自动可用。要使用 Amazon AppConfig Agent sidecar 容器,必须将其启动。以下过程介绍如何使用 Amazon EKS kubectl 命令行工具在容器应用程序的 kubeconfig 文件中进行更改。有关创建或编辑 kubeconfig 文件的更多信息,请参阅 Amazon EKS 用户指南 中的 为 Amazon EKS 集群创建或更新 kubeconfig 文件

启动 Amazon 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. 将 Amazon 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
    注意

    请注意以下信息。

    • Amazon AppConfig 默认情况下,代理在端口 2772 上运行。也可指定不同的端口。

    • 您可以通过输入环境变量来调整 Amazon AppConfig Agent 的默认行为。有关更多信息,请参阅 使用环境变量为 Amazon ECS 和 Amazon EKS 配置 Amazon AppConfig 代理

    • 对于 SERVICE_ REGION,请指定 Amazon AppConfig 代理检索配置数据的 Amazon Web Services 区域 代码(例如us-west-1)。

  3. kubectl 工具中运行以下命令,将更改应用于群集。

    kubectl apply -f my-deployment.yml
  4. 部署完成后,验证 Amazon AppConfig 代理是否正在运行。使用以下命令查看应用程序 Pod 日志文件。

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

    在 A Amazon AppConfig gent 容器中找到如下语句:[appconfig agent] 1970/01/01 00:00:00 INFO serving on localhost:2772

注意

您可以通过输入或更改环境变量来调整 Amazon AppConfig Agent 的默认行为。有关可用环境变量的更多信息,请参阅 使用环境变量为 Amazon ECS 和 Amazon EKS 配置 Amazon AppConfig 代理

使用环境变量为 Amazon ECS 和 Amazon EKS 配置 Amazon AppConfig 代理

您可以通过更改 Amazon AppConfig 代理容器的以下环境变量来配置代理。

环境变量 详细信息 默认值

ACCESS_TOKEN

此环境变量定义从代理 HTTP 服务器请求配置数据时必须提供的令牌。必须在授权类型为 Bearer 的 HTTP 请求授权标头中设置令牌的值。下面是一个例子。

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

BACKUP_DIRECTORY

此环境变量使 Amazon AppConfig 代理能够将其检索到的每个配置的备份保存到指定目录中。

重要

备份到磁盘的配置未加密。如果您的配置包含敏感数据, Amazon AppConfig 建议您在文件系统权限方面采用最小权限原则。有关更多信息,请参阅 Amazon AppConfig 中的安全性

None(无)

HTTP_PORT

此环境变量指定运行代理的 HTTP 服务器的端口。

2772

LOG_LEVEL

此环境变量指定代理记录的详细程度。每个级别包括当前级别和所有更高级别。变量是区分大小写的。从最详细到最不详细,日志级别为:debuginfowarnerrornoneDebug 包含有关代理的详细信息,包括计时信息。

info

MANIFEST

此环境变量将 Amazon AppConfig Agent 配置为利用其他每个配置的功能,例如多帐户检索和将配置保存到磁盘。您可以输入以下值之一:

  • "app:env:manifest-config"

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

有关使用这些功能的更多信息,请参阅 其他检索功能

true

MAX_CONNECTIONS

此环境变量配置代理用于从 Amazon AppConfig检索配置的最大连接数。

3

POLL_INTERVAL

此环境变量控制代理轮 Amazon AppConfig 询更新配置数据的频率。您可以指定间隔的秒数。您还可以指定一个带有时间单位的数字:s 表示秒,m 表示分钟,h 表示小时。如果未指定单位,则代理默认为秒。例如,60 秒、60 秒和 1 分钟会产生相同的轮询间隔。

45 秒

PREFETCH_LIST

此环境变量指定代理启动后立即请求 Amazon AppConfig 的配置数据。

PRELOAD_BACKUPS

如果设置为true, Amazon AppConfig 代理会将中找到的配置备份加载BACKUP_DIRECTORY到内存中,并立即检查服务中是否存在更新的版本。如果设置为false,则只有在无法从服务中检索配置数据时(例如,如果您的网络出现问题), Amazon AppConfig 代理才会加载配置备份中的内容。

true
PROXY_HEADERS 此环境变量指定 PROXY_URL 环境变量中引用的代理所需的标头。其值是以逗号分隔的标头列表。每个标头使用以下形式:
"header: value"
PROXY_URL 此环境变量指定用于从代理到的连接的代理 URL Amazon Web Services,包括 Amazon AppConfig。 HTTPS并支持 HTTP URL。

REQUEST_TIMEOUT

此环境变量控制代理等待响应的 Amazon AppConfig时间。如果服务没有响应,则请求将失败。

如果请求用于初始数据检索,则代理会向应用程序返回错误。

如果在对更新的数据进行后台检查期间发生超时,代理会记录错误,并在短暂延迟后重试。

您可以指定超时的毫秒数。您还可以指定一个带有时间单位的数字:ms 表示毫秒,s 表示秒。如果未指定单位,则代理默认为毫秒。例如,5000、5000ms 和 5s 会产生相同的请求超时值。

3000 毫秒
ROLE_ARN 此环境变量指定 IAM 角色的亚马逊资源名称 (ARN)。 Amazon AppConfig 代理扮演此角色来检索配置数据。
ROLE_EXTERNAL_ID 此环境变量指定要与代入角色 ARN 一起使用的外部 ID。
ROLE_SESSION_NAME 此环境变量指定要与代入的 IAM 角色的凭证关联的会话名称。
SERVICE_REGION 此环境变量指定了 Amazon AppConfig Agent Amazon Web Services 区域 用来调用 Amazon AppConfig 服务的替代方案。如果未定义,代理将尝试确定当前区域。如果不能,则代理无法启动。

WAIT_ON_MANIFEST

此环境变量将 Amazon AppConfig Agent 配置为等到清单处理完毕后再完成启动。

true

检索配置数据

您可以使用 HTTP localhost 调用从 Amazon AppConfig 代理中检索配置数据。以下示例将 curl 与 HTTP 客户端一起使用。您可以使用应用程序语言或可用库支持的任何可用 HTTP 客户端调用代理。

注意

如果您的应用程序使用正斜杠(例如 “test-backend/test-service”),要检索配置数据,则需要使用 URL 编码。

检索任何已部署配置的完整内容

$ curl "http://localhost:2772/applications/application_name/environments/environment_name/configurations/configuration_name"

Feature Flag 类型的 Amazon AppConfig 配置中检索单个标志及其属性

$ curl "http://localhost:2772/applications/application_name/environments/environment_name/configurations/configuration_name?flag=flag_name"

Feature Flag 类型的 Amazon AppConfig 配置访问多个标志及其属性

$ curl "http://localhost:2772/applications/application_name/environments/environment_name/configurations/configuration_name?flag=flag_name_one&flag=flag_name_two"