Come faccio a utilizzare i parametri nell'Archivio dei parametri AWS Systems Manager per condividere valori tra gli stack di CloudFormation?

3 minuti di lettura
0

Visualizzo un messaggio di errore quando provo ad aggiornare una variabile di esportazione utilizzata in un altro stack di AWS CloudFormation. L'errore è: "Impossibile aggiornare una variabile di esportazione poiché è utilizzata da un altro stack."

Breve descrizione

Per risolvere questo errore, utilizza i parametri SSM nell'Archivio dei parametri AWS Systems Manager per condividere valori tra gli stack di CloudFormation. Un parametro SSM memorizza un valore in uno stack (stackA) che può essere utilizzato da un altro stack (stackB).

Quando si utilizza un parametro SSM, non esiste alcuna dipendenza tra i due stack di CloudFormation. Questo perché la variabile è archiviata nell'Archivio dei parametri AWS Systems Manager.

Nota: CloudFormation supporta diversi tipi di parametri SSM.

Risoluzione

1.    Crea uno stack CloudFormation (stackA) basato sul seguente modello:

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

Il modello precedente crea un'istanza e un parametro SSM. Il valore del parametro SSM è impostato sulla zona di disponibilità dell'istanza creata. stackA crea un archivio di parametri SSM con il Nome impostato su AvailabilityZone e il Valore impostato su us-east-2a.

Nota: è necessario utilizzare un nome univoco per il parametro SSM.

2.    Crea un altro stack CloudFormation (stackB) basato sul modello seguente.

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

Questo modello utilizza il parametro SSM creato da stackA nel passaggio 1.

Nota: per utilizzare questo parametro, è necessario dichiarare un parametro nello stackB. Imposta il Tipo su AWS::SSM::Parameter::Value<String>. L'istanza creata dallo stackB viene quindi avviata nella zona di disponibilità us-east-2a.

3.    Per aggiornare lo stackA, modifica il parametro AvailabilityZone da us-east-2a a us-east-2b.

4.    Avvia l'istanza dallo stackA nella stessa zona di disponibilità aggiornata dello stackB. Ora l'istanza viene sostituita e avviata nella zona di disponibilità us-east-2b.

AWS UFFICIALE
AWS UFFICIALEAggiornata 9 mesi fa