我在us-east-1区域有现有基础设施,需要克隆到我们东2区域。使用AWS CloudFormer从现有的us-east-1区域生成JSON模板,用us-east-2替换所有us-east-1并开始创建堆栈,但收到错误,说“资源创建已取消”,特别是对于所有EC2实例
模板的快照(仅限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"
}
}
答案 0 :(得分:1)
在使用cloudformation模板之前,您需要确保遵循以下规则:
您必须这样做的原因是AWS上的每个资源都有唯一的ID无法复制,如果您想要复制它们,您将需要不同的ID,因为您需要创建单独的资源并在模板中使用它们。
如果您只针对单个实例执行此操作,则可以通过将AMI导出到us-east-2区域来手动执行此操作。
答案 1 :(得分:1)
为了收集不同地区的AMI ID,我建议使用图片名称代替AMI ID作为密钥。
要构建放置在不同区域的资源,最好使用CloudFormation。在这种情况下,您可以使用lambda cli2cloudformation(https://github.com/lucioveloso/cli2cloudformation)。
使用它,您可以获取所有地区的AMI ID以及使用CLI可以获得的任何其他信息。
要收集AMI ID,请使用cli2cloudformation创建一个lambda,并在模板中创建一个自定义资源,如下所示:
"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"]