Wie übertrage ich CommaDelimitedList-Parameter an verschachtelte Stacks in AWS CloudFormation?

Lesedauer: 3 Minute
0

Ich möchte CommaDelimitedList-Parameter an verschachtelte Stacks in AWS CloudFormation übertragen.

Kurzbeschreibung

Sie können keine Werte des Typs CommaDelimitedList an einen verschachtelten Stacks übertragen. Verwenden Sie stattdessen die intrinsische Funktion Fn::Join in Ihrem übergeordneten Stack, um den Typ CommaDelimitedList in den Typ String zu konvertieren.

Lösung

Das folgende Beispiel zeigt, wie Sie eine Liste von SecurityGroupIds von einem übergeordneten Stack an einen verschachtelten Stack übertragen.

1.Öffnen Sie die JSON- oder YAML-Datei Ihres übergeordneten Stacks und setzen Sie dann den Typ von SecurityGroupIds auf CommaDelimitedList.

Im Abschnitt Ressourcen der JSON-Datei gibt die Funktion Fn::Join die kombinierte Zeichenfolge zurück. Im Abschnitt Ressourcen der YAML-Datei gibt die Funktion !Join die kombinierte Zeichenfolge zurück. Sowohl in JSON- als auch in YAML-Dateien konvertiert die kombinierte Zeichenfolge den Parametertyp SecurityGroupIds von CommaDelimitedList zu String.

Beispiel für eine übergeordnete JSON-Datei:

{
  "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"
          }
        }
      }
    }
  }
}

Beispiel für eine übergeordnete YAML-Datei:

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

Hinweis: Wenn Sie zwei Subnetze übertragen, z. B. [„subnet-aaaa, subnet-bbbb“], ist die Ausgabe von Fn::Join {"subnet-aaaa, subnet-bbbb"}.

2.Legen Sie in der JSON- oder YAML-Datei Ihres verschachtelten Stacks den Typ der SecurityGroupIds auf CommaDelimitedList fest.

Beispiel für eine verschachtelte JSON-Datei:

{
  "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"
        }
      }
    }
  }
}

Beispiel für eine verschachtelte YAML-Datei:

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

Hinweis: Im verschachtelten Stack wird die kombinierte Zeichenfolge aus dem übergeordneten Stack an SecurityGroupIds als CommaDelimitedList übertragen. Zum Beispiel wird der Wert {"sg-aaaaa, sg-bbbbb"} zu [„sg-aaaaa“, „sg-bbbbb“] zurück konvertiert. Daher muss SecurityGroupIds direkt von SecurityGroupIds: !Ref SecurityGroupIds referenziert werden, statt als Liste von Zeichenketten.


Ähnliche Informationen

Arbeiten mit verschachtelten Stacks

AWS::CloudFormation::Stack

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren