为 REST API 部署设置阶段变量 - Amazon API Gateway
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

为 REST API 部署设置阶段变量

阶段变量是您可以定义为与 REST API 部署阶段关联的配置属性的名称-值对。它们与环境变量的功能类似,可用于 API 设置和映射模板。

例如,您可以在阶段配置中定义一个阶段变量,然后针对 REST API 中的方法将其值设置为 HTTP 集成的 URL 字符串。之后,您可以使用 API 设置中的关联阶段变量名称引用该 URL 字符串。这样,您就可以通过将阶段变量值重置为相应的 URL,在每个阶段对不同端点使用同一 API 设置。

此外,您还可以访问映射模板中的阶段变量,或者将配置参数传递给 Amazon Lambda 或 HTTP 后端。

有关映射模板的更多信息,请参阅API Gateway 映射模板和访问日志记录变量引用

注意

阶段变量不适用于敏感数据,例如凭证。要将敏感数据传递给集成,请使用 Amazon Lambda 授权方。您可以在 Lambda 授权方的输出中将敏感数据传递给集成。要了解更多信息,请参阅“来自 Amazon API Gateway Lambda 授权方的输出”。

使用案例

使用 API Gateway 中的部署阶段,您可以管理各 API 的多个发布阶段,例如内部测试、测试和生产。通过阶段变量,您可以将 API 部署阶段配置为与不同的后端端点交互。

例如,您的 API 可以将 GET 请求作为 HTTP 代理传递给后端 Web 主机 (例如 http://example.com)。在这种情况下,后端 Web 主机将在阶段变量中配置,这样一来,当开发人员调用生产端点时,API Gateway 将调用 example.com。当您调用测试端点时,API Gateway 将使用在测试阶段的阶段变量中配置的值,并调用不同的 Web 主机(例如 beta.example.com)。同样,阶段变量可用于为 API 中的每个阶段指定不同的 Amazon Lambda 函数名称。

您还可以使用阶段变量,通过映射模板将配置参数传递给 Lambda 函数。例如,您可能需要针对 API 中的多个阶段重复使用同一个 Lambda 函数,但是该函数应根据调用的阶段,从不同的 Amazon DynamoDB 表中读取数据。在为 Lambda 函数生成请求的映射模板中,您可以使用阶段变量来将表的名称传递给 Lambda。

示例

要使用阶段变量自定义 HTTP 集成端点,您必须首先配置具有指定名称的阶段变量(例如 url),然后为其分配一个值(例如 example.com)。接下来,从您的方法配置中,设置 HTTP 代理集成。您可以告知 API Gateway 使用阶段变量值 http://${stageVariables.url},而不是输入端点的 URL。此值将指示 API Gateway 在运行时替换您的阶段变量 ${},具体取决于 API 正在哪个阶段运行。

您可以通过与在凭证字段中指定 Lambda 函数名称、Amazon服务代理路径或Amazon角色 ARN 类似的方式引用阶段变量。

将 Lambda 函数名称指定为阶段变量值时,您必须手动配置对 Lambda 函数的权限。当您在 API Gateway 控制台中指定 Lambda 函数时,将弹出一条 Amazon CLI 命令,让您配置正确的权限。您还可以使用 Amazon Command Line Interface (Amazon CLI) 来执行此操作。

aws lambda add-permission --function-name "arn:aws:lambda:us-east-2:123456789012:function:my-function" --source-arn "arn:aws:execute-api:us-east-2:123456789012:api_id/*/HTTP_METHOD/resource" --principal apigateway.amazonaws.com --statement-id apigateway-access --action lambda:InvokeFunction