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.
Temas
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
. 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./aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2
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-bodyfile://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>>
oAWS::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.