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

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

Amazon SAM模板的全局变量部分

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

Globals部分由AWS::Serverless::FunctionAWS::Serverless::ApiAWS::Serverless::HttpApi、和AWS::Serverless::SimpleTable资源支持。

示例:

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使用 “nodejs12.x” 表示Runtime,“180” 秒,使用 “index.handler” 表示HandlerTimeout HelloWorldFunction除了继承的 TABLE_NAME 之外,还添加了 MESSAGE 环境变量。 ThumbnailFunction继承所有Globals属性并添加 API 事件源。

支持的资源和属性

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

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

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

隐式展示

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

可覆盖

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

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

下面几节介绍覆盖(overriding)如何处理不同的数据类型。

原始数据类型被替换

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

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

示例:

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

fRuntime or 设置MyFunctionpython3.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

fSecurityGroupIdsMyFunction or 设置为VpcConfig以下内容:

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