¿Cómo puedo transferir parámetros CommaDelimitedList a pilas anidadas en AWS CloudFormation?
Quiero transferir parámetros CommaDelimitedList a pilas anidadas en AWS CloudFormation.
Descripción corta
No se pueden transferir valores del tipoCommaDelimitedList a una pila anidada. En lugar de ello, utilice la función intrínseca Fn::Join de su pila principal para convertir el tipo CommaDelimitedList en el tipo String.
Resolución
El siguiente ejemplo muestra cómo transferir una lista de SecurityGroupIds de una pila principal a una pila anidada.
1. Abra el archivo JSON o YAML de su pila principal y, a continuación, configure el Tipo de SecurityGroupIds como CommaDelimitedList.
En la sección Recursos del archivo JSON, la función Fn::Join devuelve la cadena combinada. En la sección Recursos del archivo YAML, la función !Join devuelve la cadena combinada. En los archivos JSON y YAML, la cadena combinada convierte el tipo de parámetro SecurityGroupIds de CommaDelimitedList a String.
Ejemplo de archivo JSON principal:
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "SubnetId": { "Type": "AWS::EC2::Subnet::Id" }, "SecurityGroupIds": { "Type": "List<AWS::EC2::SecurityGroup::Id>" }, "KeyName": { "Type": "AWS::EC2::KeyPair::KeyName" }, "ImageId": { "Type": "String" } }, "Resources": { "Instance": { "Type": "AWS::CloudFormation::Stack", "Properties": { "TemplateURL": "https://s3.amazonaws.com/cloudformation-templates-us-east-2/nested.yml", "Parameters": { "SubnetId": { "Ref": "SubnetId" }, "SecurityGroupIds": { "Fn::Join": [ ",", { "Ref": "SecurityGroupIds" } ] }, "KeyName": { "Ref": "KeyName" }, "ImageId": { "Ref": "ImageId" } } } } } }
Ejemplo de archivo YAML principal:
AWSTemplateFormatVersion: 2010-09-09 Parameters: SubnetId: Type: 'AWS::EC2::Subnet::Id' SecurityGroupIds: Type: 'List<AWS::EC2::SecurityGroup::Id>' KeyName: Type: 'AWS::EC2::KeyPair::KeyName' ImageId: Type: String Resources: Instance: Type: 'AWS::CloudFormation::Stack' Properties: TemplateURL: 'https://s3.amazonaws.com/cloudformation-templates-us-east-2/nested.yml' Parameters: SubnetId: !Ref SubnetId SecurityGroupIds: !Join - ',' - !Ref SecurityGroupIds KeyName: !Ref KeyName ImageId: !Ref ImageId
Nota: Si transfiere dos subredes, como ["subnet-aaaa, subnet-bbbb"], el resultado de Fn::Join es {"subnet-aaaa, subnet-bbbb"}.
2. En el archivo JSON o YAML de la pila anidada, configure el Tipo de SecurityGroupIds como CommaDelimitedList.
Ejemplo de archivo JSON anidado:
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "SubnetId": { "Type": "String" }, "SecurityGroupIds": { "Type": "CommaDelimitedList" }, "KeyName": { "Type": "String" }, "ImageId": { "Type": "String" } }, "Resources": { "Ec2instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": { "Ref": "ImageId" }, "KeyName": { "Ref": "KeyName" }, "SecurityGroupIds": { "Ref": "SecurityGroupIds" }, "SubnetId": { "Ref": "SubnetId" } } } } }
Ejemplo de archivo YAML anidado:
AWSTemplateFormatVersion: 2010-09-09 Parameters: SubnetId: Type: String SecurityGroupIds: Type: CommaDelimitedList KeyName: Type: String ImageId: Type: String Resources: Ec2instance: Type: 'AWS::EC2::Instance' Properties: ImageId: !Ref ImageId KeyName: !Ref KeyName SecurityGroupIds: !Ref SecurityGroupIds SubnetId: !Ref SubnetId
Nota: En la pila anidada, la cadena combinada de la pila principal se transfiere a SecurityGroupIds como CommaDelimitedList. Por ejemplo, el valor {"sg-aaaaa, sg-bbbbb"} se convierte de nuevo en ["sg-aaaaa", "sg-bbbbb"]. Por lo tanto, se debe hacer referencia directa aSecurityGroupIds mediante SecurityGroupIds: !Ref SecurityGroupIds y no como una lista de cadenas.
Información relacionada
Contenido relevante
- OFICIAL DE AWSActualizada hace un año
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace 2 años
- OFICIAL DE AWSActualizada hace un año