Referencia a los recursos existentes y a los parámetros de Systems Manager con los tipos de parámetros proporcionados por CloudFormation - AWS CloudFormation

Referencia a los recursos existentes y a los parámetros de Systems Manager con los tipos de parámetros proporcionados por CloudFormation

Al crear la plantilla, puede crear parámetros que requieran que los usuarios introduzcan identificadores de los recursos de AWS existentes o parámetros de Systems Manager mediante tipos de parámetros especializados proporcionados por CloudFormation.

Información general

En CloudFormation, puede usar parámentros para personalizar las pilas al proporcionar valores de entrada durante la creación o actualización de la pila. Esta característica hace que sus plantillas sean reutilizables y flexibles en diferentes escenarios.

Los parámetros se definen en la sección Parameters de una plantilla de CloudFormation. Cada parámetro tiene un nombre y un tipo, y se puede tener varias configuraciones adicionales, como un valor predeterminado y valores permitidos. Para obtener más información, consulte Referencia sintáctica de la sección Parameters para las plantillas de CloudFormation.

El tipo de parámetro determina el tipo de valor de entrada que el parámetro puede aceptar. Por ejemplo, Number solo acepta valores numéricos, mientras que String acepta la entrada de texto.

CloudFormation proporciona varios tipos de parámetros adicionales que puede usar en sus plantillas para hacer referencia a los recursos de AWS existentes y a los parámetros de Systems Manager.

Estos tipos de parámetro se dividen en dos categorías:

  • tipos de parámetros específicos de AWS: CloudFormation proporciona un conjunto de tipos de parámetros que ayudan a atrapar valores no válidos al crear o actualizar una pila. Al utilizar estos tipos de parámetros, cualquier persona que utilice la plantilla debe especificar valores válidos de la Cuenta de AWS y la región en la que van a crear la pila.

    Si utilizan la AWS Management Console, CloudFormation proporciona una lista rellenada previamente de los valores existentes de su cuenta y región. De esta forma el usuario no tiene que recordar y escribir correctamente un nombre específico o ID. En su lugar, simplemente seleccionan valores de una lista desplegable. En algunos casos, pueden incluso buscar valores por ID, nombre o el valor Name de la etiqueta.

  • Tipos de parámetros de Systems ManagerCloudFormation también proporciona tipos de parámetros que corresponden a parámetros existentes en el Almacén de parámetros de Systems Manager. Cuando se usan estos tipos de parámetros, cualquier persona que use la plantilla debe especificar una clave de Almacén de parámetros como el valor del tipo de parámetro de Systems Manager y, a continuación, CloudFormation recupera el valor más reciente del Almacén de parámetros que se usará para su pila. Esto puede resultar útil cuando necesite actualizar con frecuencia las aplicaciones con nuevos valores de propiedad, como los ID de Imagen de máquina de Amazon (AMI). Para obtener más información acerca del Almacén de parámetros, consulte Almacén de parámetros de Systems Manager.

Una vez definidos los parámetros en la sección Parameters, puede hacer referencia a los valores de los parámetros en toda la plantilla de CloudFormation mediante la función Ref.

Ejemplo

El siguiente ejemplo muestra una plantilla que usa los siguientes tipos de parámetros.

  • AWS::EC2::VPC::Id

  • AWS::EC2::Subnet::Id

  • AWS::EC2::KeyPair::KeyName

  • AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>

Para crear una pila a partir de esta plantilla, debe especificar un ID de VPC, un ID de subred y un nombre de par de claves existentes en su cuenta. También puede especificar una clave del Almacén de parámetros existente que haga referencia al ID de AMI deseado o mantener el valor predeterminado de /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2. Este parámetro público es un alias del ID de AMI regional de la AMI más reciente de Amazon Linux 2. Para obtener más información acerca de parámetros públicos, consulte Descubrir parámetros públicos en el Almacén de parámetros en la Guía del usuario de AWS Systems Manager.

JSON

{ "Parameters": { "VpcId": { "Description": "ID of an existing Virtual Private Cloud (VPC).", "Type": "AWS::EC2::VPC::Id" }, "PublicSubnetId": { "Description": "ID of an existing public subnet within the specified VPC.", "Type": "AWS::EC2::Subnet::Id" }, "KeyName": { "Description": "Name of an existing EC2 key pair to enable SSH access to the instance.", "Type": "AWS::EC2::KeyPair::KeyName" }, "AMIId": { "Description": "Name of a Parameter Store parameter that stores the ID of the Amazon Machine Image (AMI).", "Type": "AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>", "Default": "/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2" } }, "Resources": { "InstanceSecurityGroup": { "Type": "AWS::EC2::SecurityGroup", "Properties": { "GroupDescription": "Enable SSH access via port 22", "VpcId": { "Ref": "VpcId" }, "SecurityGroupIngress": [ { "IpProtocol": "tcp", "FromPort": 22, "ToPort": 22, "CidrIp": "0.0.0.0/0" } ] } }, "Ec2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "KeyName": { "Ref": "KeyName" }, "ImageId": { "Ref": "AMIId" }, "NetworkInterfaces": [ { "AssociatePublicIpAddress": "true", "DeviceIndex": "0", "SubnetId": { "Ref": "PublicSubnetId" }, "GroupSet": [{ "Ref": "InstanceSecurityGroup" }] } ] } } }, "Outputs": { "InstanceId": { "Value": { "Ref": "Ec2Instance" } } } }

YAML

Parameters: VpcId: Description: ID of an existing Virtual Private Cloud (VPC). Type: 'AWS::EC2::VPC::Id' PublicSubnetId: Description: ID of an existing public subnet within the specified VPC. Type: 'AWS::EC2::Subnet::Id' KeyName: Description: Name of an existing EC2 KeyPair to enable SSH access to the instance. Type: 'AWS::EC2::KeyPair::KeyName' AMIId: Description: Name of a Parameter Store parameter that stores the ID of the Amazon Machine Image (AMI). Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' Resources: InstanceSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable SSH access via port 22 VpcId: !Ref VpcId SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0 Ec2Instance: Type: 'AWS::EC2::Instance' Properties: KeyName: !Ref KeyName ImageId: !Ref AMIId NetworkInterfaces: - AssociatePublicIpAddress: "true" DeviceIndex: "0" SubnetId: !Ref PublicSubnetId GroupSet: - !Ref InstanceSecurityGroup Outputs: InstanceId: Value: !Ref Ec2Instance

Comando AWS CLI para crear una pila

El siguiente comando create-stack crea una pila basada en la plantilla de ejemplo.

aws cloudformation create-stack --stack-name MyStack \ --template-body file://sampletemplate.json \ --parameters \ ParameterKey="VpcId",ParameterValue="vpc-a123baa3" \ ParameterKey="PublicSubnetId",ParameterValue="subnet-123a351e" \ ParameterKey="KeyName",ParameterValue="MyKeyName" \ ParameterKey="AMIId",ParameterValue="MyParameterKey"

Para utilizar un tipo de parámetro que acepte una lista de cadenas, por ejemplo List<AWS::EC2::Subnet::Id>, debe evitar las comas del interior del ParameterValue con una doble barra invertida, como se muestra en el siguiente ejemplo.

--parameters ParameterKey="SubnetIDs",ParameterValue="subnet-5ea0c127\\,subnet-6194ea3b\\,subnet-c87f2be0"

Consideraciones

Recomendamos que use referencias dinámicas para restringir el acceso a las definiciones de configuración confidenciales, como las credenciales de terceros. Para obtener más información, consulte Obtención de valores almacenados en otros servicios con referencias dinámicas.

Si quiere permitir a los usuarios de la plantilla especificar valores de distintas Cuentas de AWS, no utilice tipos de parámetros específicos de AWS. En su lugar, defina los parámetros de tipo String o CommaDelimitedList.

Hay algunas cosas que se deben tener en cuenta con los tipos de parámetros de Systems Manager:

  • Puede ver los valores resueltos de los parámetros describe-stacks en la pestaña Parámetros de la pila de la consola o mediante la ejecución de o describe-change-set. Tenga en cuenta que estos valores se establecen al crearse o actualizarse la pila, por lo que pueden diferir de los valores más recientes del Almacén de parámetros.

  • En el caso de las actualizaciones de pilas, si se utiliza la opción Usar un valor existente (o se establece UsePreviousValue como verdadero), significa que se quiere seguir utilizando la misma clave del Almacén de parámetros, no su valor. CloudFormation siempre recupera el valor más reciente.

  • Si especifica cualquier valor permitido u otras restricciones, CloudFormation los valida con las claves de parámetros que especifique, pero no con sus valores. Debe validar los valores en el propio Almacén de parámetros.

  • Al crear o actualizar pilas y crear conjuntos de cambios, CloudFormation usa los valores que existan en al Almacén de parámetros en ese momento. Si un parámetro especificado no existe en el Almacén de parámetros con la Cuenta de AWS del intermediario, CloudFormation devuelve un error de validación.

  • Al ejecutar un conjunto de cambios, CloudFormation usa los valores que es especifican en el conjunto de cambios. Debe revisar estos valores antes de ejecutar el conjunto de cambios porque pueden cambiar en el almacén de parámetros entre el momento de la creación del conjunto de cambios y su ejecución.

  • Para los parámetros almacenados en el mismo Cuenta de AWS, debe proporcionar el nombre del parámetro. Para los parámetros del almacén de parámetros compartidos por otra Cuenta de AWS, debe proporcionar el ARN completo del parámetro.

Tipos de parámetros específicos de AWS compatibles

CloudFormation es compatible con los siguientes tipos específicos de AWS:

AWS::EC2::AvailabilityZone::Name

Una zona de disponibilidad, como por ejemplo us-west-2a.

AWS::EC2::Image::Id

Un ID de imagen de Amazon EC2, como por ejemplo ami-0ff8a91507f77f867. Tenga en cuenta que la consola de CloudFormation no muestra una lista desplegable de valores para este tipo de parámetro.

AWS::EC2::Instance::Id

Un ID de instancia Amazon EC2, como por ejemplo i-1e731a32.

AWS::EC2::KeyPair::KeyName

Un nombre del par de claves de Amazon EC2.

AWS::EC2::SecurityGroup::GroupName

Un nombre del grupo de seguridad de VPC predeterminado; por ejemplo, my-sg-abc.

AWS::EC2::SecurityGroup::Id

Un ID de grupo de seguridad, como por ejemplo sg-a123fd85.

AWS::EC2::Subnet::Id

Un ID de subred, como por ejemplo subnet-123a351e.

AWS::EC2::Volume::Id

Un ID de volumen de Amazon EBS, como por ejemplo vol-3cdd3f56.

AWS::EC2::VPC::Id

Un ID de VPC, como por ejemplo vpc-a123baa3.

AWS::Route53::HostedZone::Id

Un ID de zona alojada de Amazon Route 53, como por ejemplo Z23YXV4OVPL04A.

List<AWS::EC2::AvailabilityZone::Name>

Una matriz de las zonas de disponibilidad de una región, como por ejemplo us-west-2a, us-west-2b.

List<AWS::EC2::Image::Id>

Una matriz de ID de imagen de Amazon EC2, como por ejemplo ami-0ff8a91507f77f867, ami-0a584ac55a7631c0c. Tenga en cuenta que la consola de CloudFormation no muestra una lista desplegable de valores para este tipo de parámetro.

List<AWS::EC2::Instance::Id>

Una matriz de ID de instancia Amazon EC2, como por ejemplo i-1e731a32, i-1e731a34.

List<AWS::EC2::SecurityGroup::GroupName>

Una matriz de los nombres de los grupos de seguridad de VPC predeterminados; por ejemplo, my-sg-abc, my-sg-def.

List<AWS::EC2::SecurityGroup::Id>

Una matriz de los ID de grupos de seguridad, como por ejemplo sg-a123fd85, sg-b456fd85.

List<AWS::EC2::Subnet::Id>

Una matriz de los IDs de subred, como por ejemplo subnet-123a351e, subnet-456b351e.

List<AWS::EC2::Volume::Id>

Una matriz de ID de volumen de Amazon EBS, como por ejemplo vol-3cdd3f56, vol-4cdd3f56.

List<AWS::EC2::VPC::Id>

Una matriz de los ID de VPC, como por ejemplo vpc-a123baa3, vpc-b456baa3.

List<AWS::Route53::HostedZone::Id>

Una matriz de ID de zonas alojadas de Amazon Route 53, como por ejemplo Z23YXV4OVPL04A, Z23YXV4OVPL04B.

Tipos de parámetros de Systems Manager admitidos

CloudFormation admite los siguientes tipos de parámetros de Systems Manager:

AWS::SSM::Parameter::Name

El nombre de una clave de parámetro de Systems Manager. Utilice este tipo de parámetro únicamente para comprobar que existe un parámetro obligatorio. CloudFormation no recuperará el valor real asociado con el parámetro.

AWS::SSM::Parameter::Value<String>

Un parámetro de Systems Manager cuyo valor es una cadena. Esto corresponde al tipo de parámetro String en Parameter Store.

AWS::SSM::Parameter::Value<List<String>> o AWS::SSM::Parameter::Value<CommaDelimitedList>

Un parámetro de Administrador de sistemas cuyo valor es una lista de cadenas. Esto corresponde al tipo de parámetro StringList en Parameter Store.

AWS::SSM::Parameter::Value<AWS-specific parameter type>

Un parámetro de Systems Manager cuyo valor es un tipo de parámetro específico de AWS.

Por ejemplo, lo siguiente especifica el tipo AWS::EC2::KeyPair::KeyName:

  • AWS::SSM::Parameter::Value<AWS::EC2::KeyPair::KeyName>

AWS::SSM::Parameter::Value<List<AWS-specific parameter type>>

Un parámetro de Systems Manager cuyo valor es una lista de tipos de parámetros específicos de AWS.

Por ejemplo, lo siguiente especifica una lista de tipos AWS::EC2::KeyPair::KeyName:

  • AWS::SSM::Parameter::Value<List<AWS::EC2::KeyPair::KeyName>>

Tipos de parámetros de Systems Manager no admitidos

CloudFormation no admite los siguientes tipos de parámetros de Systems Manager:

  • Listas de tipos de parámetros de Systems Manager; por ejemplo: List<AWS::SSM::Parameter::Value<String>>

Además, CloudFormation no es compatible con la definición de parámetros de plantillas como tipos de parámetros de Systems Manager SecureString. Sin embargo, también puede especificar cadenas seguras como valores de parámetros para algunos recursos. Para obtener más información, consulte Obtención de valores almacenados en otros servicios con referencias dinámicas.