Como faço para passar os parâmetros CommaDelimitedList para pilhas aninhadas no AWS CloudFormation?
Quero passar os parâmetros CommaDelimitedList para pilhas aninhadas no AWS CloudFormation.
Breve descrição
Você não pode passar valores do tipo CommaDelimitedList para uma pilha aninhada. Em vez disso, use a função intrínseca Fn::Join em sua pilha principal para converter o tipo CommaDelimitedList no tipo String.
Resolução
O exemplo a seguir mostra como passar uma lista de SecurityGroupIds de uma pilha principal para uma pilha aninhada.
1.Abra o arquivo JSON ou YAML da sua pilha principal e defina o Tipo de SecurityGroupIds como CommaDelimitedList.
Na seção Recursos do arquivo JSON, a função Fn::Join retorna a string combinada. Na seção Recursos do arquivo YAML, a função !Join retorna a string combinada. Nos arquivos JSON e YAML, a string combinada converte o tipo de parâmetro SecurityGroupIds de CommaDelimitedList em String.
Exemplo de arquivo 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" } } } } } }
Exemplo de arquivo 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
**Observação:**Se você passar duas sub-redes, como [ “subnet-aaaa, subnet-bbbb”], a saída de Fn::Join será {"subnet-aaaa, subnet-bbbb"}.
2.No arquivo JSON ou YAML da sua pilha aninhada, defina o Tipo de SecurityGroupIds como CommaDelimitedList.
Exemplo de arquivo JSON aninhado:
{ "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" } } } } }
Exemplo de arquivo YAML aninhado:
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
**Observação:**Na pilha aninhada, a string combinada da pilha principal é passada para SecurityGroupIds como CommaDelimitedList. Por exemplo, o valor {"sg-aaaaa, sg-bbbbb"} é convertido novamente em [“sg-aaaaa”, “sg-bbbbb”]. Portanto, **SecurityGroupIds ** deve ser referenciado diretamente por SecurityGroupIds: !Ref SecurityGroupIds e não como uma lista de strings.
Informações relacionadas
Conteúdo relevante
- AWS OFICIALAtualizada há um ano
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 9 meses
- AWS OFICIALAtualizada há 2 anos