2016-11-10 45 views
0

我在美国东部地区的现有基础设施需要完全克隆到我们东部地区。使用AWS CloudFormer从现有的us-east-1区域生成JSON模板,用us-east-2替换所有us-east-1,并开始创建堆栈,但出现错误提示“资源创建已取消”,特别针对所有EC2实例将基础设施从一个地区克隆到另一个地区:AWS CloudFormation

模板(仅适用于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" 
     } 
    } 

回答

1

之前cloudformation模板去,你需要确保你有以下东西的地方:

  1. 移动你实例AMI到us-east-2区域,然后替换快照ID且模板中
  2. AMI ID创建安全组更换安全组ID在你的模板
  3. 更换子网ID与一个你的CF模板美东 - 2区

你将不得不做,这是在AWS上的每一个资源的原因有,如果你想复制相同的,你需要不同的ID的,你需要不能被复制,唯一的ID创建单独的资源并在您的模板中使用它们。

如果您只为单个实例执行此操作,那么您可以通过将AMI导出到us-east-2区域来手动执行此操作。

1

为了收集不同地区的AMI ID,我建议使用图像名称代替AMI ID作为密钥。

要构建放置在不同地区的资源,最好使用CloudFormation。在这种情况下,您可以使用lambda cli2cloudformationhttps://github.com/lucioveloso/cli2cloudformation)。

使用它,您可以获取所有区域的AMI ID以及您可以使用CLI获得的任何其他信息。

为了收集AMI ID,创建一个拉姆达与cli2cloudformation和你的模板中,作为波纹管创建自定义资源:

"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]'" 
    } 
} 

在这种情况下,我得到的AMI ID的图片命名为“ AMZN-AMI-HVM-2017.03.0.20170417-x86_64的-GP2' 。您可以更改为您的图片名称。

之后,您可以在CloudFormation堆栈的任意位置检索它。

"Fn::GetAtt" : ["imageIdNameBased", "ImageId"] 
相关问题