4
votes

Comment puis-je demander à un modèle AWS CloudFormation de créer des ressources dans une région spécifique?

Je suis nouveau dans les modèles CloudFormation. J'ai un modèle de base en yaml qui crée une instance EC2. Chaque fois que je crée une pile et que j'utilise ce modèle, l'instance EC2 est TOUJOURS créée dans la région US East N. Virginia. J'essaie de changer cela afin que l'instance EC2 réside dans la région US-WEST-2. Après quelques recherches, il semble que ce soit quelque chose qui n'est pas spécifié dans le modèle. Au lieu de cela, je dois changer la région en us-west-2 dans la console AWS, puis créer une nouvelle pile. Ma compréhension est-elle correcte?


1 commentaires

Oui, les ressources sont créées dans la région que vous avez sélectionnée dans la console Web. C'est toujours comme ça. Lorsque vous utilisez l'interface de ligne de commande, vous pouvez passer un paramètre --region pour définir la région souhaitée.


3 Réponses :


5
votes

Malheureusement, vous ne pouvez pas spécifier la région dans un modèle cloudformation.

Vous devez soit passer region comme argument de ligne de commande

[default]
region=eu-west-1

, soit spécifier la valeur par défaut région dans le fichier de configuration aws cli ~/.aws/config

aws --region eu-west-1 cloudformation create-stack --stack-name ...


0 commentaires

1
votes

Que me manque-t-il ici? Je suis sûr que nous pouvons spécifier la région où la pile est créée dans le modèle CFN à l'aide de paramètres et nous avons des modèles actifs qui créent notre pile dans la région respective en fonction de la valeur du paramètre. Le pseudo paramètre AWS :: Region est une valeur qu'AWS CloudFormation résout en tant que région dans laquelle la pile est créée. https://docs.aws.amazon.com/AWSCloudFormation/ latest / UserGuide / gettingstarted.templatebasics.html

Voici une sous-section d'exemple de modèle

{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Parameters": {
    "InstanceType": {
      "Description": "Instance Type",
      "Type": "String",
      "Default": "t2.xlarge"
    },
    "SubnetUSEAST1": {
      "Description": "Subnet on which Ec2 instance needs to be created",
      "Type": "String",
      "Default": "subnet-xxxxxxxx"
    },
    "SubnetUSWEST2": {
      "Description": "Subnet on which Ec2 instance needs to be created",
      "Type": "String",
      "Default": "subnet-yyyyyyyy"
    }
  },
  "Conditions": {
    "useast1": {
      "Fn::Equals": [
        {
          "Ref": "AWS::Region"
        },
        "us-east-1"
      ]
    },
    "uswest2": {
      "Fn::Equals": [
        {
          "Ref": "AWS::Region"
        },
        "us-west-2"
      ]
    }
  },
  "Resources": {
    "EC2Instance": {
      "Type": "AWS::EC2::Instance",
      "Properties": {
        "InstanceType": {
          "Ref": "InstanceType"
        },
        "NetworkInterfaces": [
          {
            "SubnetId": {
              "Fn::If": [
                "useast1",
                {
                  "Ref": "SubnetUSEAST1"
                },
                {
                  "Ref": "SubnetUSWEST2"
                }
              ]
            },
            "AssociatePublicIpAddress": "false",
            "DeviceIndex": "0"
          }
        ]
      }
    }
  }
}


0 commentaires

0
votes

Si vous parvenez à diviser votre modèle en plusieurs parties, vous pouvez le déployer dans différentes régions à la fois via une orchestration et StackSets .


0 commentaires