

# Configuración de instancias de Amazon EC2 con CloudFormation
<a name="quickref-ec2-instance-config"></a>

Los siguientes fragmentos muestran cómo configurar las instancias de Amazon EC2 mediante CloudFormation.

**Topics**
+ [Configuración general de Amazon EC2](#quickref-ec2-instance-config-general)
+ [Especificación de las asignaciones de dispositivos de bloques para la instancia.](#scenario-ec2-bdm)

## Configuración general de Amazon EC2
<a name="quickref-ec2-instance-config-general"></a>

Los siguientes fragmentos muestran las configuraciones generales de las instancias de Amazon EC2 mediante CloudFormation.

**Topics**
+ [Creación de una instancia de Amazon EC2 en una zona de disponibilidad específica](#scenario-ec2-instance)
+ [Configuración de una instancia de Amazon EC2 con un volumen de EBS y datos de usuario](#scenario-ec2-instance-with-vol-and-tags)
+ [Definición del nombre de la tabla de DynamoDB en los datos de usuario para el lanzamiento de la instancia de Amazon EC2](#scenario-ec2-with-sdb-domain)
+ [Creación de un volumen de Amazon EBS con `DeletionPolicy`](#scenario-ec2-volume)

### Creación de una instancia de Amazon EC2 en una zona de disponibilidad específica
<a name="scenario-ec2-instance"></a>

En el siguiente fragmento se crea una instancia de Amazon EC2 en la zona de disponibilidad específica con un recurso [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html). El código de la zona de disponibilidad es el código de la región seguido de un identificador de letra. Puede lanzar una instancia en una sola zona de disponibilidad. 

#### JSON
<a name="quickref-ec2-example-6.json"></a>

```
1. "Ec2Instance": {
2.     "Type": "AWS::EC2::Instance",
3.     "Properties": {
4.         "AvailabilityZone": "aa-example-1a",
5.         "ImageId": "ami-1234567890abcdef0"
6.     }
7. }
```

#### YAML
<a name="quickref-ec2-example-6.yaml"></a>

```
1. Ec2Instance:
2.   Type: AWS::EC2::Instance
3.   Properties:
4.     AvailabilityZone: aa-example-1a
5.     ImageId: ami-1234567890abcdef0
```

### Configuración de una instancia de Amazon EC2 con un volumen de EBS y datos de usuario
<a name="scenario-ec2-instance-with-vol-and-tags"></a>

El siguiente fragmento crea una instancia de Amazon EC2 con una etiqueta, un volumen de EBS y datos de usuario. Utiliza un recurso [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html). En la misma plantilla, debe definir un recurso [AWS::EC2::SecurityGroup](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-securitygroup.html), un recurso [AWS::SNS::Topic](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-sns-topic.html) y un recurso [AWS::EC2::Volume](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-volume.html). Se debe definir `KeyName` en la sección `Parameters` de la plantilla.

Las etiquetas permiten clasificar los recursos de AWS de diversas maneras, por ejemplo, según su finalidad, propietario o entorno. Los datos de usuario permiten aprovisionar scripts o datos personalizados a una instancia durante el lanzamiento. Estos datos facilitan la automatización de tareas, la configuración del software, la instalación de paquetes y otras acciones en una instancia durante la inicialización. 

Para obtener más información sobre el etiquetado de recursos, consulte [Etiquetar los recursos de Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) en la *Guía del usuario de Amazon EC2*. 

Para obtener información sobre los datos de usuario, consulte [Uso de los metadatos de la instancia para administrar su instancia de EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) en la *Guía del usuario de Amazon EC2*.

#### JSON
<a name="quickref-ec2-example-7.json"></a>

```
 1. "Ec2Instance": {
 2.   "Type": "AWS::EC2::Instance",
 3.   "Properties": {
 4.     "KeyName": { "Ref": "KeyName" },
 5.     "SecurityGroups": [ { "Ref": "Ec2SecurityGroup" } ],
 6.     "UserData": {
 7.       "Fn::Base64": {
 8.         "Fn::Join": [ ":", [
 9.             "PORT=80",
10.             "TOPIC=",
11.             { "Ref": "MySNSTopic" }
12.           ]
13.         ]
14.       }
15.     },
16.     "InstanceType": "aa.size",
17.     "AvailabilityZone": "aa-example-1a",
18.     "ImageId": "ami-1234567890abcdef0",
19.     "Volumes": [
20.       {
21.         "VolumeId": { "Ref": "MyVolumeResource" },
22.         "Device": "/dev/sdk"
23.       }
24.     ],
25.     "Tags": [ { "Key": "Name", "Value": "MyTag" } ]
26.   }
27. }
```

#### YAML
<a name="quickref-ec2-example-7.yaml"></a>

```
 1. Ec2Instance:
 2.   Type: AWS::EC2::Instance
 3.   Properties:
 4.     KeyName: !Ref KeyName
 5.     SecurityGroups:
 6.       - !Ref Ec2SecurityGroup
 7.     UserData:
 8.       Fn::Base64:
 9.         Fn::Join:
10.           - ":"
11.           - - "PORT=80"
12.             - "TOPIC="
13.             - !Ref MySNSTopic
14.     InstanceType: aa.size
15.     AvailabilityZone: aa-example-1a
16.     ImageId: ami-1234567890abcdef0
17.     Volumes:
18.       - VolumeId: !Ref MyVolumeResource
19.         Device: "/dev/sdk"
20.     Tags:
21.       - Key: Name
22.         Value: MyTag
```

### Definición del nombre de la tabla de DynamoDB en los datos de usuario para el lanzamiento de la instancia de Amazon EC2
<a name="scenario-ec2-with-sdb-domain"></a>

El siguiente fragmento crea una instancia de Amazon EC2 y define un nombre de tabla de DynamoDB en los datos de usuario para pasarlo a la instancia en el momento del lanzamiento. Utiliza un recurso [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html). Puede definir parámetros o valores dinámicos en los datos del usuario para transferirlos a una instancia de EC2 en el momento del lanzamiento. 

Para obtener más información sobre los datos de usuario, consulte [Uso de los metadatos de la instancia para administrar su instancia de EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) en la *Guía del usuario de Amazon EC2*.

#### JSON
<a name="quickref-ec2-example-8.json"></a>

```
 1. "Ec2Instance": {
 2.     "Type": "AWS::EC2::Instance",
 3.     "Properties": {
 4.         "UserData": {
 5.             "Fn::Base64": {
 6.                 "Fn::Join": [
 7.                     "",
 8.                     [
 9.                         "TableName=",
10.                         {
11.                             "Ref": "DynamoDBTableName"
12.                         }
13.                     ]
14.                 ]
15.             }
16.         },
17.         "AvailabilityZone": "aa-example-1a",
18.         "ImageId": "ami-1234567890abcdef0"
19.     }
20. }
```

#### YAML
<a name="quickref-ec2-example-8.yaml"></a>

```
 1. Ec2Instance:
 2.   Type: AWS::EC2::Instance
 3.   Properties:
 4.     UserData:
 5.       Fn::Base64:
 6.         Fn::Join:
 7.           - ''
 8.           - - 'TableName='
 9.             - Ref: DynamoDBTableName
10.     AvailabilityZone: aa-example-1a
11.     ImageId: ami-1234567890abcdef0
```

### Creación de un volumen de Amazon EBS con `DeletionPolicy`
<a name="scenario-ec2-volume"></a>

Los siguientes fragmentos crean un volumen de Amazon EBS mediante un recurso [AWS::EC2::Volume](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-volume.html) de Amazon EC2. Puede usar las propiedades `Size` o `SnapshotID` para definir el volumen, pero no ambas. Un atributo `DeletionPolicy` está configurado para crear una instantánea del volumen cuando se elimina la pila. 

Para obtener más información acerca del atributo `DeletionPolicy`, consulte [Atributo DeletionPolicy](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-attribute-deletionpolicy.html).

Para más información sobre la creación de una instantánea en EBS, consulte [Creación de un volumen de Amazon EBS](https://docs.aws.amazon.com/ebs/latest/userguide/ebs-creating-volume.html).

#### JSON
<a name="quickref-ec2-example-13.json"></a>

Este fragmento de código crea un volumen de Amazon EBS con un **tamaño** especificado. El tamaño está establecido en 10, pero puede ajustarlo según sea necesario. El recurso [AWS::EC2::Volume](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-volume.html) le permite especificar el tamaño o el ID de una instantánea, pero no ambos.

```
 1. "MyEBSVolume": {
 2.     "Type": "AWS::EC2::Volume",
 3.     "Properties": {
 4.         "Size": "10",
 5.         "AvailabilityZone": {
 6.             "Ref": "AvailabilityZone"
 7.         }
 8.     },
 9.     "DeletionPolicy": "Snapshot"
10. }
```

Este fragmento de código crea un volumen de Amazon EBS con un **ID de instantánea** proporcionado. El recurso [AWS::EC2::Volume](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-volume.html) le permite especificar el tamaño o el ID de una instantánea, pero no ambos.

```
 1. "MyEBSVolume": {
 2.     "Type": "AWS::EC2::Volume",
 3.     "Properties": {
 4.         "SnapshotId" : "snap-1234567890abcdef0",
 5.         "AvailabilityZone": {
 6.             "Ref": "AvailabilityZone"
 7.         }
 8.     },
 9.     "DeletionPolicy": "Snapshot"
10. }
```

#### YAML
<a name="quickref-ec2-example-13.yaml"></a>

Este fragmento de código crea un volumen de Amazon EBS con un **tamaño** especificado. El tamaño está establecido en 10, pero puede ajustarlo según sea necesario. El recurso [AWS::EC2::Volume](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-volume.html) le permite especificar el tamaño o el ID de una instantánea, pero no ambos.

```
1. MyEBSVolume:
2.   Type: AWS::EC2::Volume
3.   Properties:
4.     Size: 10
5.     AvailabilityZone:
6.       Ref: AvailabilityZone
7.   DeletionPolicy: Snapshot
```

Este fragmento de código crea un volumen de Amazon EBS con un **ID de instantánea** proporcionado. El recurso [AWS::EC2::Volume](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-volume.html) le permite especificar el tamaño o el ID de una instantánea, pero no ambos.

```
1. MyEBSVolume:
2.   Type: AWS::EC2::Volume
3.   Properties:
4.     SnapshotId: snap-1234567890abcdef0
5.     AvailabilityZone:
6.       Ref: AvailabilityZone
7.   DeletionPolicy: Snapshot
```

## Especificación de las asignaciones de dispositivos de bloques para la instancia.
<a name="scenario-ec2-bdm"></a>

Una asignación de dispositivos de bloques define los dispositivos de bloques, que incluye volúmenes de almacén de instancias y volúmenes de EBS para asociar a la instancia. Puede especificar una asignación de dispositivos de bloques al crear una AMI para que todas las instancias que se lancen desde la AMI utilicen dicha asignación. También puede especificar una asignación de dispositivos de bloques cuando se lanza una instancia, de forma que esta asignación anula la especificada en la AMI desde la que se lanzó la instancia.

Puede usar los siguientes fragmentos de plantilla para especificar las asignaciones de dispositivos de bloques para sus volúmenes de EBS o de almacén de instancias mediante la propiedad `BlockDeviceMappings` de un recurso de [AWS::EC2::Instance](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-ec2-instance.html). 

Para obtener más información acerca de la asignación de dispositivos de bloques, consulte [Asignaciones de dispositivos de bloques para volúmenes en instancias de Amazon EC2](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/block-device-mapping-concepts.html) en la *Guía del usuario de Amazon EC2*.

**Topics**
+ [Especificación de las asignaciones de dispositivos de bloques para dos volúmenes de EBS](#w2aac11c41c43c13b9c11)
+ [Cualquier entrada de asignación de dispositivos de bloques para el almacén de instancias.](#w2aac11c41c43c13b9c13)

### Especificación de las asignaciones de dispositivos de bloques para dos volúmenes de EBS
<a name="w2aac11c41c43c13b9c11"></a>

#### JSON
<a name="quickref-ec2-example-1.json"></a>

```
"Ec2Instance": {
    "Type": "AWS::EC2::Instance",
    "Properties": {
      "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}",
      "KeyName": { "Ref": "KeyName" },
      "InstanceType": { "Ref": "InstanceType" },
      "SecurityGroups": [{ "Ref": "Ec2SecurityGroup" }],
      "BlockDeviceMappings": [
        {
          "DeviceName": "/dev/sda1",
          "Ebs": { "VolumeSize": "50" }
        },
        {
          "DeviceName": "/dev/sdm",
          "Ebs": { "VolumeSize": "100" }
        }
      ]
    }
  }
}
```

#### YAML
<a name="quickref-ec2-example-1.yaml"></a>

```
EC2Instance:
    Type: AWS::EC2::Instance
    Properties:
      ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}'
      KeyName: !Ref KeyName
      InstanceType: !Ref InstanceType
      SecurityGroups:
        - !Ref Ec2SecurityGroup
      BlockDeviceMappings:
        -
          DeviceName: /dev/sda1
          Ebs:
            VolumeSize: 50
        -
          DeviceName: /dev/sdm
          Ebs:
            VolumeSize: 100
```

### Cualquier entrada de asignación de dispositivos de bloques para el almacén de instancias.
<a name="w2aac11c41c43c13b9c13"></a>

#### JSON
<a name="quickref-ec2-example-2.json"></a>

```
"Ec2Instance" : {
  "Type" : "AWS::EC2::Instance", 
  "Properties" : {
    "ImageId" : "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}",
    "KeyName" : { "Ref" : "KeyName" },
    "InstanceType": { "Ref": "InstanceType" },
    "SecurityGroups" : [{ "Ref" : "Ec2SecurityGroup" }],
    "BlockDeviceMappings" : [
      {
        "DeviceName"  : "/dev/sdc",
        "VirtualName" : "ephemeral0"
      }
    ]
  }
}
```

#### YAML
<a name="quickref-ec2-example-2.yaml"></a>

```
EC2Instance:
  Type: AWS::EC2::Instance
  Properties:
    ImageId: '{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}'
    KeyName: !Ref KeyName
    InstanceType: !Ref InstanceType
    SecurityGroups:
      - !Ref Ec2SecurityGroup
    BlockDeviceMappings:
      - DeviceName: /dev/sdc
        VirtualName: ephemeral0
```