Wie verwende ich Parameter im AWS Systems Manager Parameter Store, um Werte zwischen CloudFormation Stacks auszutauschen?

Lesedauer: 3 Minute
0

Ich erhalte eine Fehlermeldung, wenn ich versuche, eine Exportvariable zu aktualisieren, die in einem anderen AWS CloudFormation Stack verwendet wird. Der Fehler ist: „Cannot update an export variable as it is in use by another stack.“

Kurzbeschreibung

Um diesen Fehler zu beheben, verwenden Sie SSM-Parameter im AWS Systems Manager Parameter Store, um Werte zwischen CloudFormation Stacks auszutauschen. Ein SSM-Parameter speichert einen Wert in einem Stapel (StackA), der von einem anderen Stapel (StackB) verwendet werden kann.

Wenn Sie einen SSM-Parameter verwenden, besteht keine Abhängigkeit zwischen den beiden CloudFormation Stacks. Dies liegt daran, dass die Variable im AWS Systems Manager Parameter Store gespeichert ist.

Hinweis: CloudFormation unterstützt mehrere SSM-Parametertypen.

Behebung

  1. Erstellen Sie einen CloudFormation Stack (StackA), der auf der folgenden Vorlage basiert:
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "AvailabilityZone": {
      "Description": "Amazon EC2 instance Availability Zone",
      "Type": "String"
    },
    "AMIId": {
      "Description": "The Amazon Machine Image id",
      "Type": "String"
    },
    "InstanceType": {
      "Description": "The Type of instance",
      "Type": "String"
    }
  },
  "Resources": {
    "myinstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "AvailabilityZone": {
          "Fn::GetAtt": ["BasicParameter", "Value"]
        },
        "ImageId": {
          "Ref": "AMIId"
        },
        "InstanceType": {
          "Ref": "InstanceType"
        }
      }
    },
    "BasicParameter": {
      "Type": "AWS::SSM::Parameter",
      "Properties": {
        "Name": "AvailabilityZone",
        "Type": "String",
        "Value": {
          "Ref": "AvailabilityZone"
        }
      }
    }
  }
}

Die vorherige Vorlage erstellt eine Instance und einen SSM-Parameter. Der Wert des SSM-Parameters ist auf die Availability Zone der erstellten Instanz festgelegt. StackA erstellt einen SSM-Parameterspeicher, bei dem der Name auf AvailabilityZone und der Wert auf us-east-2a festgelegt ist.

Hinweis: Sie müssen einen eindeutigen Namen für Ihren SSM-Parameter verwenden.

  1. Erstellen Sie einen weiteren CloudFormation-Stack (StackB), der auf der folgenden Vorlage basiert.
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "AMIId": {
      "Description": "The Amazon Machine Image id",
      "Type": "String"
    },
    "InstanceType": {
      "Description": "The Type of instance",
      "Type": "String"
    },
    "AvailabilityZone": {
      "Description": "Amazon EC2 instance Availablity Zone",
      "Type": "AWS::SSM::Parameter::Value<String>",
      "Default": "AvailabilityZone"
    }
  },
  "Mappings": {},
  "Conditions": {},
  "Resources": {
    "myinstance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "AvailabilityZone": {
          "Ref": "AvailabilityZone"
        },
        "ImageId": {
          "Ref": "AMIId"
        },
        "InstanceType": {
          "Ref": "InstanceType"
        }
      }
    }
  }
}

Diese Vorlage verwendet den SSM-Parameter, den StackA in Schritt 1 erstellt hat.

Hinweis: Um diesen Parameter zu verwenden, müssen Sie einen Parameter in StackB deklarieren. Legen Sie den Typ auf AWS::SSM::Parameter::Value fest<String>. Die aus StackB erstellte Instance wird dann in der Availability Zone us-east-2a gestartet.

3.    Um StackA zu aktualisieren, ändern Sie den AvailabilityZone-Parameter von us-east-2a in us-east-2b.

4.    Starten Sie die Instance von StackA aus in derselben aktualisierten Availability Zone wie StackB. Jetzt wird die Instance ersetzt und in der Availability Zone us-east-2b gestartet.

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 7 Monaten