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

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

使用 Amazon AppConfig 代理 Lambda 扩展检索配置数据

Amazon Lambda 扩展是一个配套流程,用于增强 Lambda 函数的功能。可以在调用函数之前启动扩展,与函数并行运行,并在处理函数调用后继续运行。实际上,Lambda 扩展类似于与 Lambda 调用并行的客户端。此并行客户端可以在其生命周期中的任何时刻与您的函数交互。

如果您在 Lambda 函数中使用 Amazon AppConfig 功能标志或其他动态配置数据,那么我们建议您将代理 Lam Amazon AppConfig bda 扩展作为一个层添加到您的 Lambda 函数中。这使得调用功能标志变得更加简单,而且扩展本身包含了在降低成本的 Amazon AppConfig 同时简化使用的最佳实践。由于减少了对该 Amazon AppConfig 服务的 API 调用,缩短了 Lambda 函数的处理时间,从而降低了成本。有关 Lambda 扩展的更多信息,请参阅《Amazon Lambda 开发人员指南》中的Lambda 扩展

注意

Amazon AppConfig 定价基于调用和接收配置的次数。如果您的 Lambda 执行多次冷启动并频繁检索新的配置数据,则成本会增加。

本主题包括有关 A Amazon AppConfig gent Lambda 扩展的信息,以及如何配置该扩展以与您的 Lambda 函数配合使用的过程。

工作方式

如果您使用 Amazon AppConfig 管理没有 Lambda 扩展的 Lamb da 函数的配置,则必须通过与会话和配置 API 操作集成,将 Lambda 函数配置为接收配置更新。StartConfiguration GetLatest

将 Lambda Amazon AppConfig 代理扩展与您的 Lambda 函数集成可简化此过程。该扩展负责调用 Amazon AppConfig 服务、管理检索到的数据的本地缓存、跟踪下一次服务调用所需的配置令牌以及定期在后台检查配置更新。下图显示了它的工作方式。

A Amazon AppConfig gent Lambda 扩展的工作原理示意图
  1. 您可以将 Amazon AppConfig 代理 Lambda 扩展配置为 Lambda 函数的一个层。

  2. 要访问其配置数据,您的函数在上运行的 HTTP 端点上调用该 Amazon AppConfig 扩展程序localhost:2772

  3. 该扩展会维护配置数据的本地缓存。如果数据不在缓存中,则扩展程序会调用 Amazon AppConfig 以获取配置数据。

  4. 从服务接收配置后,扩展会将其存储在本地缓存中并将其传递给 Lambda 函数。

  5. Amazon AppConfig Agent Lambda 扩展定期在后台检查您的配置数据是否有更新。每次调用 Lambda 函数时,扩展都会检查自检索配置以来的运行时间。如果经过的时间大于配置的轮询间隔,则分机 Amazon AppConfig 将调用以检查新部署的数据,如果有更改,则更新本地缓存,并重置经过的时间。

注意
  • Lambda 会实例化与函数所需的并发级别相对应的单独实例。每个实例都是独立的,并维护自己的配置数据本地缓存。有关 Lambda 实例和并发的更多信息,请参阅《Lambda 开发人员指南》中的 管理 Lambda 函数并发

  • 从 Amazon AppConfig部署更新的配置后,配置更改显示在 Lambda 函数中所需的时间取决于您用于部署的部署策略和为扩展配置的轮询间隔。

开始前的准备工作

在启用 Amazon AppConfig 代理 Lambda 扩展之前,请执行以下操作:

  • 在 Lambda 函数中组织配置,以便将其外部化为 Amazon AppConfig。

  • 创建 Amazon AppConfig 构件和配置数据,包括功能标志或自由格式配置数据。有关更多信息,请参阅 在中创建功能标志和自由格式配置数据 Amazon AppConfig

  • 在 Lambda 函数执行角色使用的 Amazon Identity and Access Management (IAM) 策略中添加appconfig:StartConfigurationSessionappconfig:GetLatestConfiguration。有关更多信息,请参阅Amazon Lambda 开发人员指南 中的 Amazon Lambda 执行角色。有关 Amazon AppConfig 权限的更多信息,请参阅《服务授权参考》中的 Amazon AppConfig操作、资源和条件键

添加 Amazon AppConfig 代理 Lambda 扩展

要使用 Amazon AppConfig 代理 Lambda 扩展,您需要将扩展程序添加到您的 Lambda 中。这可以通过将 Amazon AppConfig 代理 Lambda 扩展作为层添加到您的 Lambda 函数中,或者在 Lambda 函数上启用该扩展作为容器映像来实现。

注意

该 Amazon AppConfig 扩展程序与运行时无关,并且支持所有运行时。

使用层和 ARN 添加 Amazon AppConfig 代理 Lambda 扩展

要使用 Amazon AppConfig 代理 Lambda 扩展,您需要将该扩展作为一个层添加到 Lambda 函数中。有关如何向函数添加层的信息,请参阅《Amazon Lambda 开发者指南》中的配置扩展。 Amazon Lambda 控制台中扩展的名称是 Amazon-AppConfig- Extension。另请注意,当您将扩展作为层添加到 Lambda 时,您必须指定 Amazon 资源名称(ARN)。从以下列表中选择一个 ARN,该列表与平台和您创建 Lambda 的 Amazon Web Services 区域 位置相对应。

如果您想在将扩展添加到函数中之前对其进行测试,可以使用以下代码示例来验证其是否有效。

import urllib.request def lambda_handler(event, context): url = f'http://localhost:2772/applications/application_name/environments/environment_name/configurations/configuration_name' config = urllib.request.urlopen(url).read() return config

要对其进行测试,请为 Python 创建一个新的 Lambda 函数,添加扩展,然后运行 Lambda 函数。运行 Lambda 函数后,Lambd Amazon AppConfig a 函数会返回您为 http://localhost:2772 路径指定的配置。有关如何创建 Lambda 函数的信息,请参阅 Amazon Lambda 《 Lambda 开发人员指南》中的 使用控制台创建 Lambda 函数

要将 Amazon AppConfig Agent Lambda 扩展添加为容器映像,请参阅。使用容器镜像添加 Amazon AppConfig 代理 Lambda 扩展

配置 Amazon AppConfig 代理 Lambda 扩展

您可以通过更改以下 Amazon Lambda 环境变量来配置扩展。有关更多信息,请参阅《Amazon Lambda 开发人员指南》中的使用 Amazon Lambda 环境变量

预取配置数据

环境变量 AWS_APPCONFIG_EXTENSION_PREFETCH_LIST 可以改善函数的启动时间。初始化 A Amazon AppConfig gent Lambda 扩展时,它会检索 Amazon AppConfig Lambda 开始初始化您的函数并调用您的处理程序之前的指定配置。在某些情况下,在函数请求配置数据之前,配置数据已在本地缓存中可用。

要使用预取功能,请将环境变量的值设置为与配置数据对应的路径。例如,如果您的配置对应于分别名为 “my_application”、“my_environmention” 和 “my_configuration_data” 的应用程序、环境和配置文件,则路径将为 /applications/my_application/environments/my_environment/configurations/my_configuration_data。您可以通过以逗号分隔的列表列出多个配置项目来指定这些配置项目(如果资源名称中包含逗号,请使用资源的 ID 值而不是其名称)。

从其他账户访问配置数据

A Amazon AppConfig gent Lambda 扩展可以通过指定授予数据权限的 IAM 角色从其他账户检索配置数据。要设置此策略,请按照下列步骤操作:

  1. 在 Amazon AppConfig 用于管理配置数据的账户中,创建一个具有信任策略的角色,该策略允许运行 Lambda 函数的账户访问appconfig:StartConfigurationSessionappconfig:GetLatestConfiguration操作以及与配置资源对应的部分或完整 ARN。 Amazon AppConfig

  2. 在运行 Lambda 函数的账户中,使用在步骤 1 中创建的角色的 ARN 将 AWS_APPCONFIG_EXTENSION_ROLE_ARN 环境变量添加到 Lambda 函数中。

  3. (可选)如果需要,可使用 AWS_APPCONFIG_EXTENSION_ROLE_EXTERNAL_ID 环境变量指定外部 ID。同样,可使用 AWS_APPCONFIG_EXTENSION_ROLE_SESSION_NAME 环境变量配置会话名称。

注意

请注意以下信息。

  • A Amazon AppConfig gent Lambda 扩展只能从一个账户检索数据。如果您指定 IAM 角色,则扩展将无法从运行 Lambda 函数的账户中检索配置数据。

  • Amazon Lambda 使用亚马逊日志记录有关 Amazon AppConfig Agent Lambda 扩展和 Lambda 函数的信息。 CloudWatch

环境变量 详细信息 默认值

AWS_APPCONFIG_EXTENSION_HTTP_PORT

此环境变量用于指定运行托管扩展的本地 HTTP 服务器的端口。

2772

AWS_APPCONFIG_EXTENSION_LOG_LEVEL

此环境变量指定将哪些 Amazon AppConfig 特定于扩展的日志发送到函数的 Amazon CloudWatch Logs。不区分大小写的有效值包括 debuginfowarnerrornone。调试包括有关扩展的详细信息,包括计时信息。

info

AWS_APPCONFIG_EXTENSION_MAX_CONNECTIONS

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

3

AWS_APPCONFIG_EXTENSION_POLL_INTERVAL_SECONDS

此环境变量控制扩展程序轮询更新配置的频率(以秒 Amazon AppConfig 为单位)。

45

AWS_APPCONFIG_EXTENSION_POLL_TIMEOUT_MILLIS

此环境变量控制扩展程序在刷新缓存中的数据 Amazon AppConfig 时等待响应的最大时间(以毫秒为单位)。如果在指定的时间内 Amazon AppConfig 没有响应,则扩展程序会跳过此轮询间隔并返回之前更新的缓存数据。

3000

AWS_APPCONFIG_EXTENSION_PREFETCH_LIST

此环境变量用于指定在函数初始化和处理程序运行之前,扩展开始检索的配置数据。它可以大大缩短函数的冷启动时间。

AWS_APPCONFIG_EXTENSION_PROXY_HEADERS 此环境变量用于指定 AWS_APPCONFIG_EXTENSION_PROXY_URL 环境变量中引用的代理所需的标头。其值是以逗号分隔的标头列表。每个标头使用以下形式:
"header: value"
AWS_APPCONFIG_EXTENSION_PROXY_URL 此环境变量指定用于从 Amazon AppConfig 扩展到的连接的代理 URL Amazon Web Services。 HTTPS并支持 HTTP URL。
AWS_APPCONFIG_EXTENSION_ROLE_ARN 此环境变量指定与该 Amazon AppConfig 扩展程序为检索配置而应担任的角色相对应的 IAM 角色 ARN。
AWS_APPCONFIG_EXTENSION_ROLE_EXTERNAL_ID 此环境变量指定要与代入角色 ARN 结合使用的外部 ID。
AWS_APPCONFIG_EXTENSION_ROLE_SESSION_NAME 此环境变量指定要与代入的 IAM 角色的凭证关联的会话名称。
AWS_APPCONFIG_EXTENSION_SERVICE_REGION 此环境变量指定了扩展程序在调用 Amazon AppConfig 服务时应使用的备用区域。如果未定义,则扩展将使用当前区域中的终端节点。

AWS_APPCONFIG_EXTENSION_MANIFEST

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

  • "app:env:manifest-config"

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

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

true

AWS_APPCONFIG_EXTENSION_WAIT_ON_MANIFEST

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

true

从功能标志配置中检索一个或多个标志

对于功能标志配置(类型 AWS.AppConfig.FeatureFlags 的配置),Lambda 扩展使您能够检索配置中的单个标志或标志子集。如果您的 Lambda 只需要使用配置文件中的几个标志,则检索一个或两个标志非常有用。下面的示例使用了 Python。

注意

只能在 A Amazon AppConfig gent Lambda 扩展版本 2.0.45 及更高版本中调用配置中的单个功能标志或部分标志。

您可以从本地 HTTP 端点检索 Amazon AppConfig 配置数据。要访问特定标志或标志列表,请使用 Amazon AppConfig 配置文件的 ?flag=flag_name 查询参数。

访问单个标志及其属性

import urllib.request def lambda_handler(event, context): url = f'http://localhost:2772/applications/application_name/environments/environment_name/configurations/configuration_name?flag=flag_name' config = urllib.request.urlopen(url).read() return config

访问多个标志及其属性

import urllib.request def lambda_handler(event, context): url = f'http://localhost:2772/applications/application_name/environments/environment_name/configurations/configuration_name?flag=flag_name_one&flag=flag_name_two' config = urllib.request.urlopen(url).read() return config

查看 Amazon AppConfig 代理 Lambda 扩展日志

您可以在日志中查看 Ag Amazon AppConfig ent Lambda 扩展程序的 Amazon Lambda 日志数据。日志条目开头为。appconfig agent以下为示例。

[appconfig agent] 2024/05/07 04:19:01 ERROR retrieve failure for 'SourceEventConfig:SourceEventConfigEnvironment:SourceEventConfigProfile': StartConfigurationSession: api error AccessDenied: User: arn:aws:sts::0123456789:assumed-role/us-east-1-LambdaRole/extension1 is not authorized to perform: sts:AssumeRole on resource: arn:aws:iam::0123456789:role/test1 (retry in 60s)