#amazon-cloudformation #amazon-vpc #subnet
#aws-cloudformation #amazon-vpc #подсеть
Вопрос:
Я пытаюсь выполнить пиринг vpc между двумя разными регионами. Здесь я уже создал ресурсы, теперь я просто хочу передать их идентификаторы в качестве параметров. В одном регионе я могу пиринговать между двумя VPC. Но я получаю ошибку в двух разных регионах, поскольку route_id не существует.
Мой шаблон ниже:
AWSTemplateFormatVersion: '2010-09-09'
Description: ''
Parameters:
PeerVPCAccountId:
Type: String
Description: "Peer VPC Account ID"
Default: (Acc_id)
PeerVPCRegion:
Type: String
Description: "Peer Region"
Default: (region)
VPC1:
Description: VPC Id of DataPipeline
Type: AWS::EC2::VPC::Id
Default: (vpc_id)
VPC1CIDRRange:
Description: The IP address range of DataPipeline VPC.
Type: String
MinLength: '9'
MaxLength: '18'
Default: (vpc_range)
AllowedPattern: "(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})"
ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.
VPC1PrivateSubnet1CIDRRange:
Description: The IP address range for Private Subnet 1 in DataPipeline.
Type: String
MinLength: '9'
MaxLength: '18'
Default: (vpc_subnet_range)
AllowedPattern: "(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})"
ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.
VPC1Private1Route:
Description: RouteTableId of Private Subnet 1 for DataPipeline
Type: String
Default: (vpc_subnet_route_id)
VPC2:
Description: VPC Id of PII-Isolation Pipeline
Type: String
Default: (vpc_id)
VPC2CIDRRange:
Description: The IP address range of PII Pipeline VPC.
Type: String
MinLength: '9'
MaxLength: '18'
AllowedPattern: "(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})"
ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.
Default: (vpc_range)
VPC2PrivateSubnet1CIDRRange:
Description: The IP address range for Private Subnet 1 in PII Pipeline.
Type: String
MinLength: '9'
MaxLength: '18'
AllowedPattern: "(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})/(\d{1,2})"
ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x.
Default: (vpc_subnet_range)
VPC2Private1Route:
Description: RouteTableId of Private Subnet 1 for PII Pipeline
Type: String
Default: (vpc_subnet_route_id)
Resources:
peerRole:
Type: 'AWS::IAM::Role'
Properties:
AssumeRolePolicyDocument:
Statement:
- Principal:
AWS: !Ref PeerVPCAccountId
Action:
- 'sts:AssumeRole'
Effect: Allow
Path: /
Policies:
- PolicyName: root
PolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action: 'ec2:AcceptVpcPeeringConnection'
Resource: '*'
VPC1Private1PeeringRoute1:
Type: AWS::EC2::Route
Properties:
DestinationCidrBlock:
Ref: VPC2PrivateSubnet1CIDRRange
RouteTableId:
Ref: VPC1Private1Route
VpcPeeringConnectionId:
Ref: myVPCPeeringConnection
VPC2Private1PeeringRoute1:
Type: AWS::EC2::Route
Properties:
DestinationCidrBlock:
Ref: VPC1PrivateSubnet1CIDRRange
RouteTableId:
Ref: VPC2Private1Route
VpcPeeringConnectionId:
Ref: myVPCPeeringConnection
myVPCPeeringConnection:
Type: AWS::EC2::VPCPeeringConnection
Properties:
VpcId:
Ref: VPC1
PeerVpcId:
Ref: VPC2
PeerOwnerId:
Ref: PeerVPCAccountId
PeerRegion:
Ref: PeerVPCRegion
PeerRoleArn: !GetAtt
- peerRole
- Arn
Я предоставил все, что требуется шаблону, все еще показывая мне эту ошибку.
Может ли кто-нибудь помочь изменить это или указать на ошибку?
Комментарии:
1. Вы пытаетесь создать два VPC, каждый из которых находится в другом регионе? Это не сработает, поскольку стек CloudFormation развернут только в одном регионе. Вы могли бы рассмотреть возможность использования наборов стеков AWS CloudFormation .
2. Нет @JohnRotenstein. У меня уже создано два VPC. 1 в Северной Вирджинии и 1 в штате Орегон. У каждого VPC есть 2 частные подсети, и я хочу пиринговать между ними. В соответствии с этим я указал идентификатор VPC в качестве параметра в шаблоне CFT.
3.Но ваш шаблон пытается создать
VPC1Private1PeeringRoute1
(с 1 поVPC2Private1PeeringRoute1
2),,И,,(с VPC2 по VPC1). Вы не можете сделать это в одном шаблоне, потому что эти виртуальные машины находятся в разных регионах. Вы должны разделить шаблон на два — по одному для каждого региона.4. Сначала я хочу уточнить, вы спросили: «Вы пытаетесь создать два VPC, причем каждый VPC в другом регионе?» Это означает, что вы спрашиваете меня, создаете ли вы два новых VPC в разных регионах в этом шаблоне?». Итак, ответ заключается в том, что я уже создал два VPC. 1 в Северной Вирджинии и 1 в штате Орегон. У каждого VPC есть 2 частные подсети, и я хочу пиринговать между ними. В соответствии с этим я указал идентификатор VPC в качестве параметра в шаблоне CFT. Вы говорите, что я пытаюсь создать
VPC1Private1PeeringRoute
. Это просто создание маршрута между разными подсетями в двух разных регионах.5.
VPC1Private1PeeringRoute1
и `VPC2private1peeringroute1 создают маршрут между двумя VPC из другого региона для пиринга. Я думаю, что по этой ссылке мы можем это сделать.
Ответ №1:
В заключение, я думаю, что определенно возникла некоторая путаница в понимании того, что шаблон Cloudformation может применяться только к одному региону. Однако наборы стеков Cloudformation могут применяться к нескольким регионам, и я даже нашел пример, который применим к вашей проблеме Пиринга VPC в разных регионах
Ответ №2:
CloudFormation развертывает ресурсы только в определенном регионе. Для развертывания одних и тех же ресурсов в разных регионах вы можете использовать CloudFormation StackSet. Что касается вашего сценария, я предлагаю использовать CloudFormation для создания необходимых ресурсов в одном регионе, а также развернуть lambda, который будет развертывать ресурсы во втором регионе и выполнять пиринг — запрос, принимать и изменять таблицу маршрутизации. В дополнение к лямбде вам потребуется развернуть пользовательский ресурс для выполнения лямбды и Роль Политика для Лямбды (разрешения на действия, которые она будет выполнять)