

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

# 模板的 “全局” 部分 AWS SAM
<a name="sam-specification-template-anatomy-globals"></a>

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

该`Globals`部分支持以下 AWS 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
```

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

## 支持的资源和属性
<a name="sam-specification-template-anatomy-globals-supported-resources-and-properties"></a>

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

```
Globals:
  Api:
    AccessLogSetting:
    Auth:
    BinaryMediaTypes:
    CacheClusterEnabled:
    CacheClusterSize:
    CanarySetting:
    Cors:
    DefinitionUri:
    Domain:
    EndpointConfiguration:
    EndpointAccessMode:
    GatewayResponses:
    MethodSettings:
    MinimumCompressionSize:
    Name:
    OpenApiVersion:
    PropagateTags:
    SecurityPolicy:
    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
<a name="sam-specification-template-anatomy-globals-implicit-apis"></a>

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

## 可覆盖属性
<a name="sam-specification-template-anatomy-globals-overrideable"></a>

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

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

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

### 替换原始数据类型
<a name="sam-specification-template-anatomy-globals-overrideable-primitives"></a>

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

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

示例：

```
Globals:
  Function:
    Runtime: nodejs12.x

Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      Runtime: python3.9
```

`MyFunction` 的 `Runtime` 设置为 `python3.9`。

### 合并映射
<a name="sam-specification-template-anatomy-globals-overrideable-maps"></a>

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

`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"
}
```

### 添加列表
<a name="sam-specification-template-anatomy-globals-overrideable-lists"></a>

列表也称为数组。

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

示例：

```
Globals:
  Function:
    VpcConfig:
      SecurityGroupIds:
        - sg-123
        - sg-456

Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      VpcConfig:
        SecurityGroupIds:
          - sg-first
```

针对 `MyFunction` 的 `VpcConfig` 的 `SecurityGroupIds` 设置如下：

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