¿Cómo puedo transferir parámetros CommaDelimitedList a pilas anidadas en AWS CloudFormation?

3 minutos de lectura
0

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

Trabajo con pilas anidadas

AWS::CloudFormation::Stack

OFICIAL DE AWS
OFICIAL DE AWSActualizada hace 2 años