Я хочу реплицировать инфраструктуру из одного региона (us-east-1) в другой (us-east-2). Итак, я создал шаблон cloudfromation существующей инфраструктуры с помощью инструмента cloudformer.
"asgamazonecsclisetupapijoulebugprodEcsInstanceAsg1EIBNOXSXJ7HD": {
"Type": "AWS::AutoScaling::AutoScalingGroup",
"Properties": {
"AvailabilityZones": [
"us-east-2b",
"us-east-2c"
],
"Cooldown": "300",
"DesiredCapacity": "3",
"HealthCheckGracePeriod": "300",
"HealthCheckType": "ELB",
"MaxSize": "16",
"MinSize": "3",
"VPCZoneIdentifier": [
{
"Ref": "subnet81c8ebab"
},
{
"Ref": "subnet5df40214"
}
],
"LaunchConfigurationName": {
"Ref": "lcamazonecsclisetupapijoulebugprodAMI2017d"
},
"LoadBalancerNames": [
{
"Ref": "elbJBAPILiveCleanbit2016"
}
],
"Tags": [
{
"Key": "Name",
"Value": "Live - Cleanbit2016 - joulebug-api",
"PropagateAtLaunch": true
}
],
"TerminationPolicies": [
"Default"
]
}
},
"lcamazonecsclisetupapijoulebugprodAMI2017d": {
"Type": "AWS::AutoScaling::LaunchConfiguration",
"Properties": {
"AssociatePublicIpAddress": true,
"ImageId": "ami-0e6d83442546978bc",
"InstanceType": "c3.large",
"KeyName": "cleanbit2016_vpc",
"IamInstanceProfile": "amazon-ecs-cli-setup-api-joulebug-prod-EcsInstanceProfile-1M4GOHBP3FP5L",
"InstanceMonitoring": "true",
"SecurityGroups": [
{
"Ref": "sgCleanbit2016WebServerSG"
}
],
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xvda",
"Ebs": {
"SnapshotId": "snap-0b2477be9c863d014",
"VolumeSize": 8
}
},
{
"DeviceName": "/dev/xvdcz",
"Ebs": {
"VolumeSize": 22
}
}
]
}
},
"elbJBAPILiveCleanbit2016": {
"Type": "AWS::ElasticLoadBalancing::LoadBalancer",
"Properties": {
"Policies": [
{
"PolicyName": "AWSConsole-SSLNegotiationPolicy-JB-API-Live-Cleanbit2016-1467998170471",
"PolicyType": "SSLNegotiationPolicyType",
}
],
}
}
"subnet81c8ebab": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"CidrBlock": "10.0.3.0/24",
"AvailabilityZone": "us-east-2b",
"VpcId": {
"Ref": "vpcdcbd08bb"
},
"Tags": [
{
"Key": "Name",
"Value": "Cleanbit2016 - Public 1b"
}
]
}
},
"sgCleanbit2016WebServerSG": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "Web server security group for public subnet in vpc.",
"VpcId": {
"Ref": "vpcdcbd08bb"
},
"Tags": [
{
"Key": "Name",
"Value": "Cleanbit2016_ WebServerSG"
}
]
}
},
При запуске шаблона в другом регионе (us-east-2) возникает следующая ошибка:
Запрошенная конфигурация в настоящее время не поддерживается. Пожалуйста, проверьте документацию на поддерживаемые конфигурации. Не удалось запустить экземпляр EC2.
Да, это определено в моем файле шаблона.
Тогда я попробовал ваше решение, оно выдает ошибку: группа автомасштабирования и подсети не совпадают.
Не могли бы вы обновить свой вопрос, чтобы показать либо полный шаблон, либо, по крайней мере, все элементы, упомянутые выше?
@JohnRotenstein: Я отредактировал свой вопрос. Пожалуйста, дайте мне знать, если вам нужен еще код.
Включите часть, которая определяет группу безопасности sgCleanbit2016WebServerSG
.
@JohnRotenstein: добавлена группа безопасности sgCleanbit2016WebServerSG
У вас нет сведений о регионах, которые вы используете, но если вы пытаетесь сделать это за пределами us-east-1, зоны доступности не будут работать. Также похоже, что у вас жестко запрограммированы некоторые другие части стека, которые могут не работать в другом регионе.
И если вы пытаетесь сделать это в us-east-1, есть вероятность, что одна из AZ недоступна для вас - см. этот вопрос для получения дополнительной информации.
Я пытаюсь запустить шаблон с us-east-1 на us-east-2, прежде чем жестко запрограммировать это изменение, я также проверил доступные регионы. Это вызывает ошибку при создании групп автомасштабирования. Шаблоны успешно генерируют несколько экземпляров ec2 в этом регионе.
Если вы хотите создать шаблон CloudFormation, который может работать в нескольких регионах, вам не следует ссылаться на определенные зоны доступности (например, us-east-2b
).
Вы можете использовать Fn :: GetAZs - AWS CloudFormation для получения списка АЗ в регионе.
Мне нужно запустить этот шаблон только в регионе us-east-2.
Вы не предоставили достаточно информации для диагностики ситуации.
Я взял ваш шаблон, удалил неполные части (например, удалил Load Balancer из-за отсутствия слушателей), упростил несколько вещей, и он отлично работает:
{
"AWSTemplateFormatVersion": "2010-09-09",
"Resources": {
"VPC": {
"Type": "AWS::EC2::VPC",
"Properties": {
"CidrBlock": "10.0.0.0/16",
"Tags": [
{
"Key": "Name",
"Value": "Lab VPC"
}
]
}
},
"ASG": {
"Type": "AWS::AutoScaling::AutoScalingGroup",
"Properties": {
"AvailabilityZones": [
"us-east-2b",
"us-east-2c"
],
"Cooldown": "300",
"DesiredCapacity": "1",
"HealthCheckGracePeriod": "300",
"MaxSize": "16",
"MinSize": "1",
"VPCZoneIdentifier": [
{
"Ref": "Subnet1"
},
{
"Ref": "Subnet2"
}
],
"LaunchConfigurationName": {
"Ref": "LaunchConfig"
}
}
},
"LaunchConfig": {
"Type": "AWS::AutoScaling::LaunchConfiguration",
"Properties": {
"AssociatePublicIpAddress": true,
"ImageId": "ami-0b59bfac6be064b78",
"InstanceType": "t2.micro",
"InstanceMonitoring": "true",
"SecurityGroups": [
{
"Ref": "WebServerSG"
}
]
}
},
"Subnet1": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"CidrBlock": "10.0.0.0/24",
"AvailabilityZone": "us-east-2b",
"VpcId": {
"Ref": "VPC"
},
"Tags": [
{
"Key": "Name",
"Value": "Public 1"
}
]
}
},
"Subnet2": {
"Type": "AWS::EC2::Subnet",
"Properties": {
"CidrBlock": "10.0.1.0/24",
"AvailabilityZone": "us-east-2c",
"VpcId": {
"Ref": "VPC"
},
"Tags": [
{
"Key": "Name",
"Value": "Public 2"
}
]
}
},
"WebServerSG": {
"Type": "AWS::EC2::SecurityGroup",
"Properties": {
"GroupDescription": "Web server security group for public subnet in vpc.",
"VpcId": {
"Ref": "VPC"
},
"Tags": [
{
"Key": "Name",
"Value": "WebServerSG"
}
]
}
}
}
}
Следовательно, ваша проблема заключается в части шаблона, который вы предоставили нет.
Вы можете начать с этой версии, а затем постепенно добавлять обратно части вашего шаблона, пока не обнаружите, что вызывает ошибку.
Большое вам спасибо. Позвольте мне проверить это, я свяжусь с вами.
После долгой отладки, когда я начал запускать вещи вручную, я обнаружил ту же ошибку, и я узнал, что c3.large вызывает ошибку. Когда я запускаю шаблон с помощью c4.large, он успешно запускает шаблон с us-east-1 на us-east-2.
subnet81c8ebab
определен где-нибудь в вашем шаблоне? Это похоже на идентификатор подсети, который будет изменяться каждый раз при создании.