

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Sección global de la plantilla AWS SAM
<a name="sam-specification-template-anatomy-globals"></a>

A veces, los recursos que declaras en una AWS SAM plantilla tienen configuraciones comunes. Por ejemplo, es posible que tenga una aplicación con varios recursos de `AWS::Serverless::Function` que tengan configuraciones `Runtime`, `Memory`, `VPCConfig`, `Environment` y `Cors` idénticas. En lugar de duplicar esta información en todos los recursos, puede declararlos una vez en la sección `Globals` y dejar que los recursos los hereden.

La `Globals` sección admite los siguientes tipos AWS SAM de recursos:
+ `AWS::Serverless::Api`
+ `AWS::Serverless::CapacityProvider`
+ `AWS::Serverless::Function`
+ `AWS::Serverless::HttpApi`
+ `AWS::Serverless::SimpleTable`
+ `AWS::Serverless::StateMachine`

Ejemplo:

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

En este ejemplo, tanto `HelloWorldFunction` como `ThumbnailFunction` utilizan “nodejs12.x” para `Runtime`, “180” segundos para `Timeout` e “index.handler” para `Handler`. `HelloWorldFunction` agrega la variable de entorno MESSAGE, además del TABLE\$1NAME heredado. `ThumbnailFunction` hereda todas las propiedades de `Globals` y añade un origen de eventos de la API.

## Recursos y propiedades compatibles
<a name="sam-specification-template-anatomy-globals-supported-resources-and-properties"></a>

AWS SAM admite los siguientes recursos y propiedades.

```
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:
```

**nota**  
No se admiten recursos y propiedades que no se incluyan en la lista anterior. Algunas de las razones por las que no se admiten son: 1) Presentan posibles problemas de seguridad o 2) Hacen que la plantilla sea difícil de entender.

## Implícito APIs
<a name="sam-specification-template-anatomy-globals-implicit-apis"></a>

AWS SAM se crea de *forma implícita APIs* al declarar una API en la `Events` sección. Se puede utilizar `Globals` para anular todas las propiedades de implícita. APIs

## Propiedades anulables
<a name="sam-specification-template-anatomy-globals-overrideable"></a>

Los recursos pueden anular las propiedades que declare en la sección `Globals`. Por ejemplo, puede añadir nuevas variables a un mapa de variables de entorno o puede anular las variables declaradas globalmente. Sin embargo, el recurso no puede eliminar una propiedad especificada en la sección `Globals`.

De forma más general, la sección `Globals` declara las propiedades que comparten todos los recursos. Algunos recursos pueden proporcionar nuevos valores para las propiedades declaradas globalmente, pero no pueden eliminarlos. Si algunos recursos usan una propiedad pero otros no, no debe declararlos en la sección `Globals`.

En las secciones siguientes, se describe cómo funciona la anulación para distintos tipos de datos.

### Se sustituyen los tipos de datos primitivos
<a name="sam-specification-template-anatomy-globals-overrideable-primitives"></a>

Entre estos tipos de datos primitivos se incluyen cadenas, números, valores booleanos, etc.

El valor especificado en la sección `Resources` reemplaza al valor de la sección `Globals`.

Ejemplo:

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

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

El `Runtime` para `MyFunction` está establecido en `python3.9`.

### Los mapas se fusionan
<a name="sam-specification-template-anatomy-globals-overrideable-maps"></a>

Los mapas también se conocen como diccionarios o colecciones de pares de clave-valor.

Las entradas de mapas de la sección `Resources` se fusionan con las entradas de mapas globales. Si hay duplicados, la entrada de la sección `Resource` anula la entrada de la sección `Globals`.

Ejemplo:

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

Las variables de entorno `MyFunction` se establecen de la siguiente manera:

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

### Las listas son acumulativas
<a name="sam-specification-template-anatomy-globals-overrideable-lists"></a>

Las listas también se conocen como matrices.

Las entradas de la lista de la sección `Globals` se anteponen a la lista de la sección `Resources`.

Ejemplo:

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

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

Los `SecurityGroupIds` para la `VpcConfig` de `MyFunction` establecen de la siguiente manera:

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