Пиринг VPC между двумя регионами AWS VPC через cloudformation

#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, который будет развертывать ресурсы во втором регионе и выполнять пиринг — запрос, принимать и изменять таблицу маршрутизации. В дополнение к лямбде вам потребуется развернуть пользовательский ресурс для выполнения лямбды и Роль Политика для Лямбды (разрешения на действия, которые она будет выполнять)