模板的 “全局” 部分 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::CapacityProvider

  • 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: CapacityProvider: InstanceRequirements: KmsKeyArn: OperatorRole: PropagateTags: ScalingConfig: Tags: VpcConfig: Function: Architectures: AssumeRolePolicyDocument: AutoPublishAlias: AutoPublishAliasAllProperties: CapacityProviderConfig: CodeSigningConfigArn: CodeUri: DeadLetterQueue: DeploymentPreference: Description: DurableConfig: Environment: EphemeralStorage: EventInvokeConfig: FileSystemConfigs: FunctionScalingConfig: FunctionUrlConfig: Handler: KmsKeyArn: Layers: LoggingConfig: MemorySize: PermissionsBoundary: PropagateTags: ProvisionedConcurrencyConfig: PublishToLatestPublished: RecursiveLoop: ReservedConcurrentExecutions: RolePath: Runtime: RuntimeManagementConfig: SnapStart: SourceKMSKeyArn: Tags: TenancyConfig: Timeout: Tracing: VersionDeletionPolicy: VpcConfig: HttpApi: AccessLogSettings: Auth: PropagateTags: StageVariables: Tags: SimpleTable: SSESpecification: StateMachine: PropagateTags:
注意

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

隐含的 APIs

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

可覆盖属性

资源可以覆盖您在 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" ]