Amazon API Gateway
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

为 REST API 部署设置阶段变量

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

例如,您可以在阶段配置中定义一个阶段变量,然后针对 REST API 中的方法将其值设置为 HTTP 集成的 URL 字符串。之后,您可以使用 API 设置中的关联阶段变量名称引用该 URL 字符串。这样一来,您就可以通过将阶段变量值重置为相应的 URL,在每个阶段对不同终端节点使用同一 API 设置。此外,您还可以访问映射模板中的阶段变量,或者将配置参数传递给 AWS Lambda 或 HTTP 后端。

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

使用案例

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

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

阶段变量不应用于 API 规范的安全定义部分。例如,您无法将不同的 Amazon Cognito 用户池用于不同阶段。

示例

要使用阶段变量自定义 HTTP 集成终端节点,您必须首先配置具有指定名称的阶段变量(例如 url),然后为其分配一个值(例如 example.com)。下一步,在您的方法配置中设置 HTTP 代理集成,然后让 API Gateway 使用阶段变量值 http://${stageVariables.url},而不是输入终端节点的 URL。此值将指示 API Gateway 在运行时替换您的阶段变量 ${},具体取决于 API 正在哪个阶段运行。您可以通过与在凭证字段中指定 Lambda 函数名称、AWS 服务代理路径或 AWS 角色 ARN 类似的方式引用阶段变量。

将 Lambda 函数名称指定为阶段变量值时,您必须手动配置 Lambda 函数的权限。您可以使用 AWS Command Line Interface 来执行此操作。

aws lambda add-permission --function-name arn:aws:lambda:XXXXXX:your-lambda-function-name --source-arn arn:aws:execute-api:us-east-1:YOUR_ACCOUNT_ID:api_id/*/HTTP_METHOD/resource --principal apigateway.amazonaws.com --statement-id apigateway-access --action lambda:InvokeFunction

以下示例将为 API Gateway 分配相关权限,使其能够调用名为 helloWorld 且代表 API 方法托管在 AWS 账户的 美国西部(俄勒冈) 区域中的 Lambda 函数。

arn arn:aws:execute-api:us-west-2:123123123123:bmmuvptwze/*/GET/hello

以下是使用 AWS CLI 执行同一命令的情形。

aws lambda add-permission --function-name arn:aws:lambda:us-east-1:123123123123:function:helloWorld --source-arn arn:aws:execute-api:us-west-2:123123123123:bmmuvptwze/*/GET/hello --principal apigateway.amazonaws.com --statement-id apigateway-access --action lambda:InvokeFunction

本页内容: