Spezifizieren Sie vorhandene Ressourcen zur Laufzeit mit von CloudFormation bereitgestellten Parametertypen - AWS CloudFormation

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Spezifizieren Sie vorhandene Ressourcen zur Laufzeit mit von CloudFormation bereitgestellten Parametertypen

Bei der Erstellung Ihrer Vorlage können Sie Parameter erstellen, die die Eingabe von Identifikatoren bestehender AWS-Ressourcen oder Systems Manager-Parameter erfordern, indem Sie spezielle, von CloudFormation bereitgestellte Parametertypen verwenden.

Übersicht

In CloudFormation können Sie Ihre Stacks mit Hilfe von Parametern anpassen, indem Sie bei der Stack-Erstellung oder Aktualisierung Eingabewerte angeben. Dieses Feature macht Ihre Vorlagen wiederverwendbar und flexibel für verschiedene Szenarien.

Die Parameter werden im Abschnitt Parameters einer CloudFormation-Vorlage definiert. Jeder Parameter hat einen Namen und einen Typ und kann zusätzliche Einstellungen wie einen Standardwert und zulässige Werte haben. Weitere Informationen finden Sie unter CloudFormation Vorlage Parameters-Syntax.

Der Parametertyp bestimmt die Art des Eingabewerts, den der Parameter akzeptieren kann. Zum Beispiel akzeptiert Number nur numerische Werte, während String auch Texteingaben akzeptiert.

CloudFormation bietet mehrere zusätzliche Parametertypen, die Sie in Ihren Vorlagen verwenden können, um auf bestehende AWS-Ressourcen und Systems Manager-Parameter zu verweisen.

Diese Parametertypen fallen in zwei Kategorien:

  • AWS-spezifische Parametertypen- CloudFormation bietet eine Reihe von Parametertypen, die beim Erstellen oder Aktualisieren eines Stacks helfen, ungültige Werte abzufangen. Wenn Sie diese Parametertypen verwenden, muss jeder, der Ihre Vorlage verwendet, gültige Werte aus den Bereichen AWS-Konto und Region angeben, in denen er den Stapel erstellt.

    Wenn Sie AWS-Managementkonsoleverwenden, bietet CloudFormation eine vorausgefüllte Liste mit vorhandenen Werten aus ihrem Konto und ihrer Region. Auf diese Weise muss sich der Benutzer nicht an einen bestimmten Namen oder eine ID erinnern und diese korrekt eingeben. Stattdessen wählen sie einfach Werte aus einer Dropdown-Liste aus. In einigen Fällen können Sie sogar nach Werten über ID, Name oder Name-Tag-Wert suchen.

  • Systems Manager-Parametertypen- CloudFormation bietet auch Parametertypen, die den vorhandenen Parametern im Systems Manager Parameter Store entsprechen. Wenn Sie diese Parametertypen verwenden, muss jeder, der Ihre Vorlage verwendet, einen Parameter Store-Schlüssel als Wert des Systems Manager-Parametertyps angeben. CloudFormation ruft dann den neuesten Wert aus dem Parameter Store ab, um ihn in seinem Stack zu verwenden. Dies kann nützlich sein, wenn Sie Anwendungen häufig mit neuen Eigenschaftswerten aktualisieren müssen, z. B. mit neuen Amazon Machine Image (AMI) IDs. Informationen über den Parameterspeicher finden Sie unter Systems Manager Parameterspeicher.

Sobald Ihre Parameter im Abschnitt Parameters definiert sind, können Sie mit der Funktion Ref in Ihrer gesamten CloudFormation-Vorlage auf Parameterwerte verweisen.

Beispiel

Das folgende Beispiel zeigt eine Vorlage, die die folgenden Parametertypen verwendet.

  • AWS::EC2::VPC::Id

  • AWS::EC2::Subnet::Id

  • AWS::EC2::KeyPair::KeyName

  • AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>

Um einen Stack aus dieser Vorlage zu erstellen, müssen Sie eine vorhandene VPC-ID, Subnetz-ID und einen Schlüsselpaar-Namen aus Ihrem Konto angeben. Sie können auch einen vorhandenen Parameterspeicherschlüssel angeben, der auf die gewünschte AMI-ID verweist, oder den Standardwert /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2beibehalten. Dieser öffentliche Parameter ist ein Alias für die regionale AMI-ID für das neueste Amazon Linux 2 AMI. Weitere Informationen über öffentliche Parameter finden Sie unter Entdecken öffentlicher Parameter im Parameterspeicher im AWS Systems Manager Benutzerhandbuch.

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

AWS CLI-Befehl, um den Stapel zu erstellen

Der folgende Befehl create-stack erstellt einen Stapel auf der Grundlage der Beispielvorlage.

aws cloudformation create-stack --stack-name MyStack \ --template-body file://sampletemplate.json \ --parameters \ ParameterKey="VpcId",ParameterValue="vpc-a123baa3" \ ParameterKey="PublicSubnetId",ParameterValue="subnet-123a351e" \ ParameterKey="KeyName",ParameterValue="MyKeyName" \ ParameterKey="AMIId",ParameterValue="MyParameterKey"

Um einen Parametertyp zu verwenden, der eine Liste von Zeichenketten akzeptiert, wie beispielsweise List<AWS::EC2::Subnet::Id>, müssen Sie die Kommas innerhalb von ParameterValue mit einem doppelten Backslash entwerten, wie im folgenden Beispiel gezeigt.

--parameters ParameterKey="SubnetIDs",ParameterValue="subnet-5ea0c127\\,subnet-6194ea3b\\,subnet-c87f2be0"

Überlegungen

Es wird dringend empfohlen, dynamische Verweise zu verwenden, um den Zugriff auf sensible Konfigurationsdefinitionen, wie beispielsweise Zugangsdaten von Drittanbietern, zu beschränken. Weitere Informationen finden Sie unter Abrufen von in anderen Diensten gespeicherten Werten mit Hilfe von dynamischen Referenzen.

Wenn Sie den Benutzern von Vorlagen erlauben möchten, Werte aus verschiedenen AWS-Kontenanzugeben, verwenden Sie keine-AWSspezifischen Parametertypen. Definieren Sie stattdessen Parameter vom Typ String oder CommaDelimitedList.

Bei den Parametertypen von Systems Manager gibt es einige Dinge zu beachten:

  • Sie können die aufgelösten Parameterwerte auf der Registerkarte Parameter des Stacks in der Konsole sehen, oder indem Sie describe-stacks oder describe-change-setausführen. Denken Sie daran, dass diese Werte festgelegt werden, wenn der Stapel erstellt oder aktualisiert wird. Sie können sich also von den aktuellen Werten im Parameter Store unterscheiden.

  • Wenn Sie bei Stapelaktualisierungen die Option Vorhandenen Wert verwenden verwenden (oder UsePreviousValue auf true setzen), bedeutet dies, dass Sie weiterhin denselben Parameterspeicherschlüssel verwenden möchten, nicht seinen Wert. CloudFormation ruft immer den neuesten Wert ab.

  • Wenn Sie zulässige Werte oder andere Einschränkungen angeben, validiert CloudFormation diese anhand der von Ihnen angegebenen Parameterschlüssel, aber nicht deren Werte. Sie sollten die Werte im Parameterspeicher selbst validieren.

  • Wenn Sie Stacks erstellen oder aktualisieren und Änderungssätze erstellen, verwendet CloudFormation den Wert, der zu diesem Zeitpunkt im Parameterspeicher vorhanden ist. Wenn ein angegebener Parameter im Parameter Store unter dem Namen AWS-Kontodes Aufrufers nicht existiert, gibt CloudFormation einen Validierungsfehler zurück.

  • Wenn Sie einen Änderungssatz ausführen, verwendet CloudFormation die Werte, die im Änderungssatz angegeben sind. Sie sollten diese Werte vor der Ausführung des Änderungssatzes prüfen, da sie sich im Parameter Store zwischen dem Zeitpunkt, an dem der Änderungssatz erstellt wurde, und dem Zeitpunkt, an dem er ausgeführt wird, ändern können.

  • Für Parameter Store-Parameter, die im gleichen AWS-Kontogespeichert sind, müssen Sie den Parameternamen angeben. Für Parameterspeicher-Parameter, die von einem anderen AWS-Kontogemeinsam genutzt werden, müssen Sie den vollständigen ARN des Parameters angeben.

Unterstützte AWS-spezifische Parametertypen

CloudFormation unterstützt die folgenden-AWSspezifischen Typen:

AWS::EC2::AvailabilityZone::Name

Gibt eine Availability Zone an (zum Beispiel ) us-west-2a.

AWS::EC2::Image::Id

Gibt die ID eines Amazon-EC2-Images an (zum Beispiel ami-0ff8a91507f77f867). Beachten Sie, dass die CloudFormation-Konsole keine Dropdown-Liste mit Werten für diesen Parametertyp anzeigt.

AWS::EC2::Instance::Id

Gibt die ID einer Amazon EC2-Instance an (zum Beispiel ) i-1e731a32.

AWS::EC2::KeyPair::KeyName

Gibt den Namen eines Amazon EC2-Schlüsselpaars an.

AWS::EC2::SecurityGroup::GroupName

Ein Standardname der VPC-Sicherheitsgruppe, beispielsweise my-sg-abc.

AWS::EC2::SecurityGroup::Id

Gibt die ID einer Sicherheitsgruppe an (zum Beispiel ) sg-a123fd85.

AWS::EC2::Subnet::Id

Gibt eine Subnetz-ID an (zum Beispiel ) subnet-123a351e.

AWS::EC2::Volume::Id

Gibt die ID eines Amazon-EBS-Volumes an (zum Beispiel vol-3cdd3f56).

AWS::EC2::VPC::Id

Gibt eine VPC-ID an (zum Beispiel ) vpc-a123baa3.

AWS::Route53::HostedZone::Id

Gibt die ID einer gehosteten Amazon Route 53-Zone an (zum Beispiel ) Z23YXV4OVPL04A.

List<AWS::EC2::AvailabilityZone::Name>

Gibt ein Array von Availability Zones in einer Region an (zum Beispiel ) us-west-2a, us-west-2b.

List<AWS::EC2::Image::Id>

Gibt ein Array von Amazon-EC2-Image-IDs an (zum Beispiel ) ami-0ff8a91507f77f867, ami-0a584ac55a7631c0c. Beachten Sie, dass die CloudFormation-Konsole keine Dropdown-Liste mit Werten für diesen Parametertyp anzeigt.

List<AWS::EC2::Instance::Id>

Gibt ein Array von Amazon EC2-Instance-IDs an (zum Beispiel ) i-1e731a32, i-1e731a34.

List<AWS::EC2::SecurityGroup::GroupName>

Ein Array von Standard-VPC-Sicherheitsgruppennamen, z. B. my-sg-abc, my-sg-def.

List<AWS::EC2::SecurityGroup::Id>

Gibt ein Array von Sicherheitsgruppen-IDs an (zum Beispiel ) sg-a123fd85, sg-b456fd85.

List<AWS::EC2::Subnet::Id>

Gibt ein Array von Subnetz-IDs an (zum Beispiel ) subnet-123a351e, subnet-456b351e.

List<AWS::EC2::Volume::Id>

Gibt ein Array von Amazon EBS-Volume-IDs an (zum Beispiel ) vol-3cdd3f56, vol-4cdd3f56.

List<AWS::EC2::VPC::Id>

Gibt ein Array von VPC-IDs an (zum Beispiel ) vpc-a123baa3, vpc-b456baa3.

List<AWS::Route53::HostedZone::Id>

Gibt ein Array von IDs gehosteter Amazon Route 53-Zonen an (zum Beispiel ) Z23YXV4OVPL04A, Z23YXV4OVPL04B.

Unterstützte Systems Manager Parametertypen

CloudFormation unterstützt die folgenden Systems Manager-Parametertypen:

AWS::SSM::Parameter::Name

Der Name eines Systems Manager-Parameterschlüssels. Verwenden Sie diesen Parametertyp nur, um zu prüfen, ob ein erforderlicher Parameter existiert. CloudFormation ruft nicht den tatsächlichen Wert ab, der mit dem Parameter verbunden ist.

AWS::SSM::Parameter::Value<String>

Ein Systems Manager-Parameter, dessen Wert eine Zeichenfolge ist. Dies entspricht dem Parametertyp String im Parameter Store.

AWS::SSM::Parameter::Value<List<String>> oder AWS::SSM::Parameter::Value<CommaDelimitedList>

Ein Systems Manager-Parameter, dessen Wert eine Liste von Zeichenfolgen ist. Dies entspricht dem Parametertyp StringList im Parameter Store.

AWS::SSM::Parameter::Value<AWS-specific parameter type>

Ein Systems-Manager-Parameter, dessen Wert ein AWS-spezifischer Parametertyp ist.

Das folgende Beispiel gibt z. B. den Typ AWS::EC2::KeyPair::KeyName an:

  • AWS::SSM::Parameter::Value<AWS::EC2::KeyPair::KeyName>

AWS::SSM::Parameter::Value<List<AWS-specific parameter type>>

Ein Systems-Manager-Parameter, dessen Wert eine Liste AWS-spezifischer Parametertypen ist.

Das folgende Beispiel gibt z. B. eine Liste der AWS::EC2::KeyPair::KeyName-Typen an:

  • AWS::SSM::Parameter::Value<List<AWS::EC2::KeyPair::KeyName>>

Nicht unterstützte Systems Manager Parametertypen

CloudFormation unterstützt den folgenden Systems Manager-Parametertyp nicht:

  • Listen von Systems Manager-Parametertypen- zum Beispiel: List<AWS::SSM::Parameter::Value<String>>.

Darüber hinaus unterstützt CloudFormation nicht die Definition von Vorlagenparametern als SecureString Systems Manager-Parametertypen. Sie können jedoch sichere Zeichenketten als Parameter Werte für bestimmte Ressourcen angeben. Weitere Informationen finden Sie unter Abrufen von in anderen Diensten gespeicherten Werten mit Hilfe von dynamischen Referenzen.