Creación de plantillas de inicialización con CloudFormation - AWS CloudFormation

Creación de plantillas de inicialización con CloudFormation

En esta sección se proporciona un ejemplo de creación de una plantilla de inicialización de Amazon EC2 mediante CloudFormation. Las plantillas de lanzamiento le permiten crear plantillas para configurar y aprovisionar instancias de Amazon EC2 en AWS. Puede utilizar plantillas de lanzamiento para almacenar parámetros de lanzamiento con el objetivo de no tener que especificarlos cada vez que lance una instancia. Para obtener más ejemplos, consulte la sección Ejemplos del recurso de AWS::EC2::LaunchTemplate.

Para obtener más información sobre las plantillas de inicialización, consulte Almacenamiento de parámetros de inicialización de instancias en plantillas de inicialización de Amazon EC2 en la Guía del usuario de Amazon EC2.

Para obtener información acerca de cómo crear una plantilla de inicialización para utilizarla con los grupos de escalado automático, consulte Plantillas de inicialización de escalado automático en la Guía del usuario de Amazon EC2 Auto Scaling.

Creación de una plantilla de lanzamiento que especifique grupos de seguridad, etiquetas, datos del usuario y un rol de IAM

En este fragmento se muestra un recurso AWS::EC2::LaunchTemplate que contiene la información de configuración para lanzar una instancia. Los usuarios especifican valores para las propiedades ImageId, InstanceType, SecurityGroups, UserData y TagSpecifications. La propiedad SecurityGroups especifica un grupo de seguridad de EC2 existente y un nuevo grupo de seguridad. La función Ref obtiene el ID del recurso myNewEC2SecurityGroup de AWS::EC2::SecurityGroup que se declara en otra parte de la plantilla de pila.

La plantilla de lanzamiento incluye una sección para datos de usuario personalizados. En esta sección, puede pasar tareas de configuración y scripts que se ejecutan cuando se lanza una instancia. En este ejemplo, los datos de usuario instalan el agente de AWS Systems Manager e inicia el agente.

La plantilla de lanzamiento también incluye un rol de IAM que permite a las aplicaciones que se ejecutan en instancias llevar a cabo acciones en su nombre. En este ejemplo, se muestra un recurso AWS::IAM::Role para la plantilla de lanzamiento, que utiliza la propiedad IamInstanceProfile para especificar el rol de IAM. La función Ref obtiene el nombre del recurso myInstanceProfile de AWS::IAM::InstanceProfile. Para configurar los permisos del rol de IAM, debe especificar un valor para la propiedad ManagedPolicyArns.

JSON

{ "Resources":{ "myLaunchTemplate":{ "Type":"AWS::EC2::LaunchTemplate", "Properties":{ "LaunchTemplateName":{ "Fn::Sub": "${AWS::StackName}-launch-template" }, "LaunchTemplateData":{ "ImageId":"ami-02354e95b3example", "InstanceType":"t3.micro", "IamInstanceProfile":{ "Name":{ "Ref":"myInstanceProfile" } }, "SecurityGroupIds":[ { "Ref":"myNewEC2SecurityGroup" }, "sg-083cd3bfb8example" ], "UserData":{ "Fn::Base64":{ "Fn::Join": [ "", [ "#!/bin/bash\n", "cd /tmp\n", "yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm\n", "systemctl enable amazon-ssm-agent\n", "systemctl start amazon-ssm-agent\n" ] ] } }, "TagSpecifications":[ { "ResourceType":"instance", "Tags":[ { "Key":"environment", "Value":"development" } ] }, { "ResourceType":"volume", "Tags":[ { "Key":"environment", "Value":"development" } ] } ] } } }, "myInstanceRole":{ "Type":"AWS::IAM::Role", "Properties":{ "RoleName":"InstanceRole", "AssumeRolePolicyDocument":{ "Version":"2012-10-17", "Statement":[ { "Effect":"Allow", "Principal":{ "Service":[ "ec2.amazonaws.com" ] }, "Action":[ "sts:AssumeRole" ] } ] }, "ManagedPolicyArns":[ "arn:aws:iam::aws:policy/myCustomerManagedPolicy" ] } }, "myInstanceProfile":{ "Type":"AWS::IAM::InstanceProfile", "Properties":{ "Path":"/", "Roles":[ { "Ref":"myInstanceRole" } ] } } } }

YAML

--- Resources: myLaunchTemplate: Type: AWS::EC2::LaunchTemplate Properties: LaunchTemplateName: !Sub ${AWS::StackName}-launch-template LaunchTemplateData: ImageId: ami-02354e95b3example InstanceType: t3.micro IamInstanceProfile: Name: !Ref myInstanceProfile SecurityGroupIds: - !Ref myNewEC2SecurityGroup - sg-083cd3bfb8example UserData: Fn::Base64: !Sub | #!/bin/bash cd /tmp yum install -y https://s3.amazonaws.com/ec2-downloads-windows/SSMAgent/latest/linux_amd64/amazon-ssm-agent.rpm systemctl enable amazon-ssm-agent systemctl start amazon-ssm-agent TagSpecifications: - ResourceType: instance Tags: - Key: environment Value: development - ResourceType: volume Tags: - Key: environment Value: development myInstanceRole: Type: AWS::IAM::Role Properties: RoleName: InstanceRole AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: 'Allow' Principal: Service: - 'ec2.amazonaws.com' Action: - 'sts:AssumeRole' ManagedPolicyArns: - 'arn:aws:iam::aws:policy/myCustomerManagedPolicy' myInstanceProfile: Type: AWS::IAM::InstanceProfile Properties: Path: '/' Roles: - !Ref myInstanceRole