AWS CloudFormation で「VpcPeeringConnection を安定化できませんでした」というエラーを解決する方法を教えてください。

最終更新日: 2020 年 10 月 15 日

アクセプタ VPC とリクエスタ VPC の間に Amazon Virtual Private Cloud (Amazon VPC) のピアリング接続を作成しようとすると、AWS CloudFormation で「VpcPeeringConnection を安定化できませんでした」というエラーが表示されます。

簡単な説明

次のような理由で、このエラーを受け取ることがあります。

  • AWS::EC2::VPCPeeringConnection リソースがアクセプタアカウントに作成された。
  • IPv4 CIDR 範囲が重複している。
  • 異なるアカウントの VPC 間に VPC ピア接続を作成しているときに、PeerRoleArn プロパティが正しく渡されていない
  • アクセプタアカウントの AWS Identity and Access Management (IAM) ロールに正しいアクセス許可がない。
  • 異なる AWS リージョンの VPC 間に VPC ピアリング接続を作成しているときに、PeerRegion プロパティが正しく渡されない

解決方法

AWS::EC2::VPCPeeringConnection リソースがアクセプタアカウントに作成されている場合

AWS CloudFormation スタックを作成し、アクセプタアカウントではなくリクエスタアカウントで AWS::EC2::VPCPeeringConnection リソースを使用します。

IPv4 CIDR 範囲が重複している場合

アクセプタアカウントとリクエスタアカウントの VPC には、異なる IPv4 CIDR ブロックを使用してください。

異なるアカウントの VPC 間に VPC ピア接続を作成する際に、PeerRoleArn プロパティが正しく渡されていない場合

異なるアカウントの VPC 間に VPC ピア接続を作成している場合、PeerRoleArn プロパティを使用して、AWS CloudFormation テンプレートのアクセプタアカウントからクロスアカウント IAM ロールを渡します。詳細については、「AWS::EC2::VPCPeeringConnection」をご参照ください。以下の JSON と YAML の例をご参照ください。

JSON:

{
    "myVPCPeeringConnection": {
        "Type": "AWS::EC2::VPCPeeringConnection",
        "Properties": {
            ......
            "PeerRoleArn": "arn:aws:iam::Accepter-Account-ID:role/PeerRole"
        }
    }
}

YAML:

myVPCPeeringConnection:
  Type: 'AWS::EC2::VPCPeeringConnection'
  Properties:
    .......
    PeerRoleArn: 'arn:aws:iam::Accepter-Account-ID:role/PeerRole'

アクセプタアカウントの IAM ロールに適切なアクセス許可がない場合

IAM ロールがアクセプタアカウントの VPC ピア接続を受け入れることを許可するには、次のアクセス許可を含めます。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": "ec2:AcceptVpcPeeringConnection",
            "Resource": "arn:${Partition}:ec2:${Region}:${Account}:vpc-peering-connection/${VpcPeeringConnectionId}",
            "Effect": "Allow"
        }
    ]
}

リクエスタアカウントが IAM ロールを引き受けることを許可するには、IAM ロールの信頼関係を設定します。例:

{
  "Version": "2008-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:iam::Requester-Account-ID:root"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

異なる AWS リージョンの VPC 間に VPC ピアリング接続を作成しているときに、PeerRegion プロパティが正しく渡されない場合

VPC が異なる AWS リージョンにある場合、PeerRegion を AWS CloudFormation テンプレートに含める必要があります。次に、アクセプタアカウント VPC が存在する AWS リージョンを指定します。以下の JSON と YAML の例をご参照ください。

JSON:

{
    "myVPCPeeringConnection": {
        "Type": "AWS::EC2::VPCPeeringConnection",
        "Properties": {
            ......
            "PeerRegion": Accepter-VPC-Region-Code
        }
    }
}

YAML:

myVPCPeeringConnection:
  Type: 'AWS::EC2::VPCPeeringConnection'
  Properties:
    ......
    PeerRegion: Accepter-VPC-Region-Code