0

J'ai une infrastructure existante dans la région us-east-1 qui doit être clonée exactement dans la région est-2. AWS CloudFormer a généré le modèle JSON à partir de la région us-east-1 existante, a remplacé us-east-1 par us-east-2 et a commencé à créer la pile mais a reçu des erreurs disant "Création de ressource annulée". instances EC2Infrastructure de clonage d'une région à une autre: AWS CloudFormation

Un aperçu du modèle (seule instance EC2):

"instancei071dd59b": { 
     "Type": "AWS::EC2::Instance", 
     "Properties": { 
     "DisableApiTermination": "false", 
     "InstanceInitiatedShutdownBehavior": "stop", 
     "ImageId": "ami-1a41b377", 
     "InstanceType": "t2.medium", 
     "KeyName": "MyServer", 
     "Monitoring": "false", 
     "Tags": [ 
      { 
      "Key": "MyServer OS", 
      "Value": "Windows Server" 
      }, 
      { 
      "Key": "Name", 
      "Value": "MyServer_WEB_TEST_2" 
      } 
     ], 
     "Volumes": [ 
      { 
      "Device": "xvdb", 
      "VolumeId": { 
       "Ref": "volumevol9124b841" 
      } 
      } 
     ], 
     "NetworkInterfaces": [ 
      { 
      "DeleteOnTermination": "true", 
      "DeviceIndex": 0, 
      "SubnetId": { 
       "Ref": "subnet24031c0f" 
      }, 
      "PrivateIpAddresses": [ 
       { 
       "PrivateIpAddress": "172.31.53.184", 
       "Primary": "true" 
       } 
      ], 
      "GroupSet": [ 
       { 
       "Ref": "sgMyServerWEB" 
       } 
      ], 
      "AssociatePublicIpAddress": "true" 
      } 
     ] 
     } 
    }, 
"volumevol9124b841": { 
     "Type": "AWS::EC2::Volume", 
     "Properties": { 
     "AvailabilityZone": "us-east-2b", 
     "Size": "30", 
     "SnapshotId": "snap-95288b92", 
     "VolumeType": "gp2" 
     } 
    } 

Répondre

1

Avant d'aller avec le modèle de CloudFormation vous devez vous assurer que vous avez les choses suivantes en place:

  1. Déplacez votre exemple AMI à us-east-2 région puis remplacer le instantané id et AMI id dans votre modèle
  2. Créer un groupe de sécurité remplacent l'ID du groupe de sécurité dans votre modèle
  3. Remplacer ID de sous-réseau dans votre modèle CF avec celui de nous-Est- 2 région

La raison pour laquelle vous devrez faire est sur toutes les ressources AWS a des identifiants uniques qui ne peuvent pas être répliquées, si vous souhaitez répliquer même vous aurez besoin de différents Ids pour que vous avez besoin pour créer des ressources séparées et les utiliser dans votre modèle.

Si vous ne faites cela que pour une seule instance, vous pouvez le faire manuellement en exportant l'AMI dans la région us-east-2.

1

Pour la collecte d'ID AMI dans une région différente, je vous recommande d'utiliser le nom de l'image à la place de l'ID AMI comme clé.

Pour créer des ressources à placer dans différentes régions, il vaut mieux utiliser CloudFormation. Dans ce cas, vous pouvez utiliser le lambda cli2cloudformation (https://github.com/lucioveloso/cli2cloudformation). En l'utilisant, vous pouvez obtenir l'ID de l'AMI dans toutes les régions et toutes les autres informations que vous pouvez obtenir en utilisant l'interface de ligne de commande.

Pour récupérer l'ID AMI, créer un lambda avec cli2cloudformation et à l'intérieur de votre modèle, créez une ressource personnalisée comme ci-dessous:

"imageIdNameBased": { 
    "Type": "Custom::cli2cfnLambda", 
    "Properties": { 
     "ServiceToken": "arn:aws:lambda:eu-west-1:123456789012:function:cli2cfnLambda", 
     "CliCommandCreate": "ec2 describe-images --filters 'Name=name,Values=amzn-ami-hvm-2017.03.0.20170417-x86_64-gp2' --query 'Images[0]'" 
    } 
} 

Dans ce cas, je reçois l'ID AMI à l'image nommée ' amzn-ami-hvm-2017.03.0.20170417-x86_64-gp2 '. Vous pouvez changer le nom de votre image. Après cela, vous pouvez le récupérer à n'importe quel point de votre pile CloudFormation.

"Fn::GetAtt" : ["imageIdNameBased", "ImageId"]