Configuración de instancias de Amazon EC2 con AWS CloudFormation
Los siguientes fragmentos muestran cómo configurar las instancias de Amazon EC2 mediante AWS CloudFormation.
Categorías de fragmentos
Configuración general de Amazon EC2
Los siguientes fragmentos muestran las configuraciones generales de las instancias de Amazon EC2 mediante AWS CloudFormation.
Fragmentos de código de ejemplo
- Creación de una instancia de Amazon EC2 en una zona de disponibilidad específica
- Configuración de una instancia de Amazon EC2 con un volumen de EBS y datos de usuario
- Definición del nombre de la tabla de DynamoDB en los datos de usuario para el lanzamiento de la instancia de Amazon EC2
- Creación de un volumen de Amazon EBS con DeletionPolicy
Creación de una instancia de Amazon EC2 en una zona de disponibilidad específica
En el siguiente fragmento se crea una instancia de Amazon EC2 en la zona de disponibilidad específica con un recurso AWS::EC2::Instance. 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
"Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "AvailabilityZone": "
aa-example-1a
", "ImageId": "ami-1234567890abcdef0
" } }
YAML
Ec2Instance: Type: AWS::EC2::Instance Properties: AvailabilityZone:
aa-example-1a
ImageId:ami-1234567890abcdef0
Configuración de una instancia de Amazon EC2 con un volumen de EBS y datos de usuario
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. En la misma plantilla, debe definir un recurso AWS::EC2::SecurityGroup, un recurso AWS::SNS::Topic y un recurso AWS::EC2::Volume. 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 acerca de cómo etiquetar los recursos, consulte Etiquetado de los recursos de Amazon EC2.
Para más información, consulte Metadatos de instancia y datos de usuario.
JSON
"Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "KeyName": { "Ref": "KeyName" }, "SecurityGroups": [ { "Ref": "Ec2SecurityGroup" } ], "UserData": { "Fn::Base64": { "Fn::Join": [ ":", [ "PORT=80", "TOPIC=", { "Ref": "MySNSTopic" } ] ] } }, "InstanceType": "
aa.size
", "AvailabilityZone": "aa-example-1a
", "ImageId": "ami-1234567890abcdef0
", "Volumes": [ { "VolumeId": { "Ref": "MyVolumeResource" }, "Device": "/dev/sdk" } ], "Tags": [ { "Key": "Name", "Value": "MyTag" } ] } }
YAML
Ec2Instance: Type: AWS::EC2::Instance Properties: KeyName: !Ref KeyName SecurityGroups: - !Ref Ec2SecurityGroup UserData: Fn::Base64: Fn::Join: - ":" - - "PORT=80" - "TOPIC=" - !Ref MySNSTopic InstanceType:
aa.size
AvailabilityZone:aa-example-1a
ImageId:ami-1234567890abcdef0
Volumes: - VolumeId: !Ref MyVolumeResource Device: "/dev/sdk" Tags: - Key: Name 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
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. 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 más información, consulte Metadatos de instancia y datos de usuario.
JSON
"Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "TableName=", { "Ref": "DynamoDBTableName" } ] ] } }, "AvailabilityZone": "
aa-example-1a
", "ImageId": "ami-1234567890abcdef0
" } }
YAML
Ec2Instance: Type: AWS::EC2::Instance Properties: UserData: Fn::Base64: Fn::Join: - '' - - 'TableName=' - Ref: DynamoDBTableName AvailabilityZone:
aa-example-1a
ImageId:ami-1234567890abcdef0
Creación de un volumen de Amazon EBS con DeletionPolicy
Los siguientes fragmentos crean un volumen de Amazon EBS mediante un recurso AWS::EC2::Volume 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
.
Para más información sobre la creación de una instantánea en EBS, consulte Creación de un volumen de Amazon EBS.
JSON
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 le permite especificar el tamaño o el ID de una instantánea, pero no ambos.
"MyEBSVolume": { "Type": "AWS::EC2::Volume", "Properties": { "Size": "
10
", "AvailabilityZone": { "Ref": "AvailabilityZone" } }, "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 le permite especificar el tamaño o el ID de una instantánea, pero no ambos.
"MyEBSVolume": { "Type": "AWS::EC2::Volume", "Properties": { "SnapshotId" : "
snap-1234567890abcdef0
", "AvailabilityZone": { "Ref": "AvailabilityZone" } }, "DeletionPolicy": "Snapshot" }
YAML
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 le permite especificar el tamaño o el ID de una instantánea, pero no ambos.
MyEBSVolume: Type: AWS::EC2::Volume Properties: Size:
10
AvailabilityZone: Ref: AvailabilityZone 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 le permite especificar el tamaño o el ID de una instantánea, pero no ambos.
MyEBSVolume: Type: AWS::EC2::Volume Properties: SnapshotId:
snap-1234567890abcdef0
AvailabilityZone: Ref: AvailabilityZone DeletionPolicy: Snapshot
Especificación de las asignaciones de dispositivos de bloques para la instancia.
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.
Para obtener más información acerca de la asignación de dispositivos de bloques, consulte Asignación de dispositivos de bloques en la Guía del usuario de Amazon EC2.
Escenarios
Especificación de las asignaciones de dispositivos de bloques para dos volúmenes de EBS
JSON
"Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": { "Fn::FindInMap": [ "
AWSRegionArch2AMI
", { "Ref": "AWS::Region" }, { "Fn::FindInMap": [ "AWSInstanceType2Arch
", { "Ref": "InstanceType" }, "Arch" ] } ] }, "KeyName": { "Ref": "KeyName" }, "InstanceType": { "Ref": "InstanceType" }, "SecurityGroups": [{ "Ref": "Ec2SecurityGroup" }], "BlockDeviceMappings": [ { "DeviceName": "/dev/sda1
", "Ebs": { "VolumeSize": "50
" } }, { "DeviceName": "/dev/sdm
", "Ebs": { "VolumeSize": "100
" } } ] } } }
YAML
EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: !FindInMap [
AWSRegionArch2AMI
, !Ref 'AWS::Region', !FindInMap [AWSInstanceType2Arch
, !Ref InstanceType, Arch]] 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.
JSON
"Ec2Instance" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : { "Fn::FindInMap" : [ "
AWSRegionArch2AMI
", { "Ref" : "AWS::Region" }, "HVM64
" ]}, "KeyName" : { "Ref" : "KeyName" }, "InstanceType": { "Ref": "InstanceType" }, "SecurityGroups" : [{ "Ref" : "Ec2SecurityGroup" }], "BlockDeviceMappings" : [ { "DeviceName" : "/dev/sdc
", "VirtualName" : "ephemeral0
" } ] } }
YAML
EC2Instance: Type: AWS::EC2::Instance Properties: ImageId: !FindInMap -
AWSRegionArch2AMI
- !Ref AWS::Region - HVM64 KeyName: !Ref KeyName InstanceType: !Ref InstanceType SecurityGroups: - !Ref Ec2SecurityGroup BlockDeviceMappings: - DeviceName:/dev/sdc
VirtualName:ephemeral0