Amazon SAM 模板的全局变量部分 - Amazon Serverless Application Model
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

Amazon SAM 模板的全局变量部分

有时,您在 Amazon SAM 模板中声明的资源具有通用配置。例如,应用程序可能包含多个具有相同的 RuntimeMemoryVPCConfigEnvironmentCors 配置的 AWS::Serverless::Function 资源。与其在每个资源中复制这些信息,不如在 Globals 部分中声明一次,然后让您的资源继承它们。

Globals 部分支持以下 Amazon SAM 资源类型:

  • AWS::Serverless::Api

  • AWS::Serverless::Function

  • AWS::Serverless::HttpApi

  • AWS::Serverless::SimpleTable

  • AWS::Serverless::StateMachine

例如:

Globals: Function: Runtime: nodejs12.x Timeout: 180 Handler: index.handler Environment: Variables: TABLE_NAME: data-table Resources: HelloWorldFunction: Type: AWS::Serverless::Function Properties: Environment: Variables: MESSAGE: "Hello From SAM" ThumbnailFunction: Type: AWS::Serverless::Function Properties: Events: Thumbnail: Type: Api Properties: Path: /thumbnail Method: POST

在此示例中,HelloWorldFunctionThumbnailFunction 都使用如下配置:Runtime 为“nodejs12.x”,Timeout 为“180”秒,Handler 为“index.handler”。除了继承的 TABLE_NAME 之外,HelloWorldFunction 还会添加 MESSAGE 环境变量。ThumbnailFunction 会继承所有 Globals 属性并添加 API 事件源。

支持的资源和属性

Amazon SAM 支持以下资源和属性。

Globals: Api: AccessLogSetting: Auth: BinaryMediaTypes: CacheClusterEnabled: CacheClusterSize: CanarySetting: Cors: DefinitionUri: Domain: EndpointConfiguration: GatewayResponses: MethodSettings: MinimumCompressionSize: Name: OpenApiVersion: PropagateTags: TracingEnabled: Variables: Function: Architectures: AssumeRolePolicyDocument: AutoPublishAlias: CodeUri: DeadLetterQueue: DeploymentPreference: Description: Environment: EphemeralStorage: EventInvokeConfig: Handler: KmsKeyArn: Layers: MemorySize: PermissionsBoundary: PropagateTags: ProvisionedConcurrencyConfig: ReservedConcurrentExecutions: Runtime: Tags: Timeout: Tracing: VpcConfig: HttpApi: AccessLogSettings: Auth: PropagateTags: StageVariables: Tags: SimpleTable: SSESpecification: StateMachine: PropagateTags:
注意

系统不支持任何未包含在前面列表中的资源和属性。不支持它们的一些原因包括:1) 它们会带来潜在的安全问题,或者 2) 它们使模板难以理解。

隐式 API

当您在 Events 部分声明 API 时,Amazon SAM 会创建隐式 API。您可以使用 Globals 覆盖隐式 API 的所有属性。

可覆盖属性

资源可以覆盖您在 Globals 部分声明的属性。例如,您可以向环境变量映射中添加新变量,也可以覆盖全局声明的变量。但是资源无法删除 Globals 部分中指定的属性。

更笼统地说,Globals 部分会声明所有资源共享的属性。有些资源可以为全局声明的属性提供新的值,但它们无法将其删除。如果一些资源使用某属性而其他资源不使用,则不得在 Globals 部分中声明它们。

以下部分描述了覆盖如何应用于不同的数据类型。

替换原始数据类型

原始数据类型包括字符串、数字、布尔值等。

Resources 部分中指定的值替换 Globals 部分中的值。

例如:

Globals: Function: Runtime: nodejs12.x Resources: MyFunction: Type: AWS::Serverless::Function Properties: Runtime: python3.9

MyFunctionRuntime 设置为 python3.9

合并映射

映射也称为字典或键值对的集合。

Resources 部分中的映射条目与全局映射条目合并。如果存在重复项,则 Resource 部分条目将覆盖 Globals 部分条目。

例如:

Globals: Function: Environment: Variables: STAGE: Production TABLE_NAME: global-table Resources: MyFunction: Type: AWS::Serverless::Function Properties: Environment: Variables: TABLE_NAME: resource-table NEW_VAR: hello

MyFunction 的环境变量设置如下:

{ "STAGE": "Production", "TABLE_NAME": "resource-table", "NEW_VAR": "hello" }

添加列表

列表也称为数组。

Globals 部分中的列表条目添加到 Resources 部分的列表之前。

例如:

Globals: Function: VpcConfig: SecurityGroupIds: - sg-123 - sg-456 Resources: MyFunction: Type: AWS::Serverless::Function Properties: VpcConfig: SecurityGroupIds: - sg-first

针对 MyFunctionVpcConfigSecurityGroupIds 设置如下:

[ "sg-123", "sg-456", "sg-first" ]