本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在亚马逊ECS和亚马逊上使用 AWS AppConfig 代理 EKS
您可以使用代理 AWS AppConfig 与亚马逊弹性容器服务(亚马逊ECS)和亚马逊 Elastic Kubernetes 服务(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) 容器执行角色(如果您的亚马逊EKS容器使用 Fargate 进行计算处理)
有关向策略添加权限的更多信息,请参阅《IAM用户指南》中的添加和删除IAM身份权限。
主题
启动亚马逊ECS集成 AWS AppConfig 代理
AWS AppConfig Agent sidecar 容器将在您的 Amazon ECS 环境中自动可用。要使用它,必须按照以下步骤启动它。
启动 AmazonECS(控制台)
在 https://console.aws.amazon.com/ecs/v2
中打开控制台。 -
在导航窗格中,选择 Task definitions(任务定义)。
-
选择应用程序的任务定义,然后选择最新版本。
-
选择创建新的修订、创建新的修订。
-
选择添加更多容器。
-
在名称中,输入 AWS AppConfig 代理容器的唯一名称。
-
对于 “图片”URI,输入:
public.ecr.aws/aws-appconfig/aws-appconfig-agent:2.x
-
对于 基本容器,选择 是。
-
在 端口映射 部分中,选择 添加端口映射。
-
对于容器端口,输入
2772
。注意
AWS AppConfig 默认情况下,代理在端口 2772 上运行。也可指定不同的端口。
-
选择创建。Amazon ECS 创建了新的容器版本并显示了详情。
-
在导航窗格中,选择 集群,然后在列表中选择应用程序的集群。
-
在 服务 选项卡上,为应用程序选择服务。
-
选择更新。
-
在 部署配置 下,对于 修订,选择最新的修订。
-
选择更新。Amazon ECS 部署了最新的任务定义。
-
部署完成后,您可以在 “配置和任务” 选项卡上验证 AWS AppConfig 代理是否正在运行。在 任务 选项卡上,选择正在运行的任务。
-
在 “容器” 部分,确认已列出 AWS AppConfig 代理容器。
-
要验证 AWS AppConfig 代理是否已启动,请选择日志选项卡。在 A AWS AppConfig gent 容器中找到如下语句:
[appconfig agent] 1970/01/01 00:00:00 INFO serving on localhost:2772
注意
您可以通过输入或更改环境变量来调整 AWS AppConfig Agent 的默认行为。有关可用环境变量的更多信息,请参阅 (可选)使用环境变量为亚马逊ECS和亚马逊配置 AWS AppConfig 代理 EKS。有关如何在亚马逊中更改环境变量的信息ECS,请参阅《亚马逊弹性容器服务开发者指南》中的将环境变量传递到容器。
启动亚马逊EKS集成 AWS AppConfig 代理
AWS AppConfig Agent sidecar 容器将在您的 Amazon EKS 环境中自动可用。要使用它,你必须启动它。以下过程介绍如何使用 Amazon EKS kubectl
命令行工具启动代理。
注意
在继续操作之前,请确保您的kubeconfig
文件是最新的。有关创建或编辑kubeconfig
文件的更多信息,请参阅亚马逊用户指南中的为亚马逊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 Agent 的默认行为。有关更多信息,请参阅 (可选)使用环境变量为亚马逊ECS和亚马逊配置 AWS AppConfig 代理 EKS。
-
对于
SERVICE_REGION
,指定 AWS AppConfig 代理检索配置数据的 AWS 区域 代码(例如us-west-1
)。
-
-
运行以下
kubectl
命令将更改应用于您的集群。Replace(替换)my-deployment
使用您的部署清单的名称。kubectl apply -f
my-deployment
.yml -
部署完成后,验证 AWS AppConfig 代理是否正在运行。使用以下命令查看应用程序 Pod 日志文件。
kubectl logs -n
my-namespace
-c appconfig-agentmy-pod
在 A AWS AppConfig gent 容器中找到如下语句:
[appconfig agent] 1970/01/01 00:00:00 INFO serving on localhost:2772
注意
您可以通过输入或更改环境变量来调整 AWS AppConfig Agent 的默认行为。有关可用环境变量的更多信息,请参阅 (可选)使用环境变量为亚马逊ECS和亚马逊配置 AWS AppConfig 代理 EKS。
(可选)使用环境变量为亚马逊ECS和亚马逊配置 AWS AppConfig 代理 EKS
您可以通过更改 AWS AppConfig 代理容器的以下环境变量来配置代理。
环境变量 | 详细信息 | 默认值 |
---|---|---|
|
此环境变量定义了从代理HTTP服务器请求配置数据时必须提供的标记。令牌的值必须在HTTP请求授权标头中设置,授权类型为
|
无 |
|
此环境变量使 AWS AppConfig 代理能够将其检索到的每个配置的备份保存到指定目录中。 重要备份到磁盘的配置未加密。如果您的配置包含敏感数据, AWS AppConfig 建议您在文件系统权限方面采用最小权限原则。有关更多信息,请参阅 安全性 AWS AppConfig。 |
None(无) |
|
此环境变量指定代理HTTP服务器运行的端口。 |
2772 |
|
此环境变量指定代理记录的详细程度。每个级别包括当前级别和所有更高级别。变量是区分大小写的。从最详细到最不详细,日志级别为: |
|
|
写入日志的磁盘位置。如果未指定,则日志将写入 stderr。 |
无 |
|
此环境变量将 AWS AppConfig Agent 配置为利用其他每个配置的功能,例如多帐户检索和将配置保存到磁盘。您可以输入以下值之一:
有关使用这些功能的更多信息,请参阅 使用清单启用其他检索功能。 |
true |
|
此环境变量配置代理用于从 AWS AppConfig检索配置的最大连接数。 |
3 |
|
此环境变量控制代理轮 AWS AppConfig 询更新配置数据的频率。您可以指定间隔的秒数。您还可以指定一个带有时间单位的数字:s 表示秒,m 表示分钟,h 表示小时。如果未指定单位,则代理默认为秒。例如,60 秒、60 秒和 1 分钟会产生相同的轮询间隔。 |
45 秒 |
|
此环境变量指定代理启动后立即请求 AWS AppConfig 的配置数据。 |
无 |
|
如果设置为 |
true |
PROXY_HEADERS |
此环境变量指定 PROXY_URL 环境变量中引用的代理所需的标头。其值是以逗号分隔的标头列表。每个标头使用以下形式:
|
无 |
PROXY_URL |
此环境变量指定用于从代理URL到的连接的代理 AWS 服务,包括 AWS AppConfig。 HTTPS 并HTTP URLs得到支持。 |
无 |
|
此环境变量控制代理等待响应的 AWS AppConfig时间。如果服务没有响应,则请求将失败。 如果请求用于初始数据检索,则代理会向应用程序返回错误。 如果在对更新的数据进行后台检查期间发生超时,代理会记录错误,并在短暂延迟后重试。 您可以指定超时的毫秒数。您还可以指定一个带有时间单位的数字:ms 表示毫秒,s 表示秒。如果未指定单位,则代理默认为毫秒。例如,5000、5000ms 和 5s 会产生相同的请求超时值。 |
3000 毫秒 |
ROLE_ARN |
此环境变量指定IAM角色的 Amazon 资源名称 (ARN)。 AWS AppConfig 代理扮演此角色来检索配置数据。 | 无 |
ROLE_EXTERNAL_ID |
此环境变量指定用于代入角色的外部 ID ARN。 | 无 |
ROLE_SESSION_NAME |
此环境变量指定要与所担任IAM角色的凭据关联的会话名称。 | 无 |
SERVICE_REGION |
此环境变量指定了 AWS AppConfig Agent AWS 区域 用来调用 AWS AppConfig 服务的替代方案。如果未定义,代理将尝试确定当前区域。如果不能,则代理无法启动。 | 无 |
|
此环境变量将 AWS AppConfig Agent 配置为等到清单处理完毕后再完成启动。 |
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
"
从 Feature Flag
类型的 AWS AppConfig
配置中检索单个标志及其属性
$ curl "http://localhost:2772/applications/
application_name
/environments/environment_name
/configurations/configuration_name
?flag=flag_name
"
从 Feature Flag
类型的 AWS AppConfig
配置访问多个标志及其属性
$ curl "http://localhost:2772/applications/
application_name
/environments/environment_name
/configurations/configuration_name
?flag=flag_name_one
&flag=flag_name_two
"