LoginSignup
1
1

More than 3 years have passed since last update.

Amazon ECR のVPC エンドポイントを AWS Transit Gateway で共有する方法

Posted at

AWS Transit Gateway の検証をしていて、アウトバウンド用 VPC に設置した Amazon ECR の VPC エンドポイントを他の VPC から参照する必要がありました。

Amazon ECR の VPC エンドポイントはインターフェイス型であるため、 Integrating AWS Transit Gateway with AWS PrivateLink and Amazon Route 53 Resolver | Networking & Content Delivery を参考にすれば簡単にできると考えていましたが、一筋縄ではいきませんでした…。

Amazon ECR の VPC エンドポイントには ecr.api と ecr.dkr の2種類がありますが、前者は参考にした手順で設定することができましたが、 ecr.dkr は追加の手順が必要でした。そのため、ここに手順を残しておきます。

手順

1. ecr.dkr の VPC エンドポイントの作成

ecr.dkr の VPC エンドポイントを作成します。作成するときはプライベート DNS 名を無効にする必要があります。既存のエンドポイントもプライベート DNS を無効化することができます。

2. プライベートホストゾーンの作成

ドメイン名を dkr.ecr.ap-northeast-1.amazonaws.com でプライベートホストゾーンを作成します。

AWS CLI で作成する場合は、下記のような感じになります。

$ aws route53 create-hosted-zone \
  --name dkr.ecr.ap-northeast-1.amazonaws.com \
  --vpc VPCRegion=ap-northeast-1,VPCId=vpc-xxxx \
  --caller-reference 20200417102500 \
  --hosted-zone-config Comment='ECR DKR VPC Endpoint',PrivateZone=true \

3. レコードセットの作成

作成したプライベートホストゾーンに下記のレコードセットを作成します。

  1. 名前が dkr.ecr.ap-northeast-1.amazonaws.comのレコードセット
    • エイリアスレコードとして VPC エンドポイントを設定
  2. 名前が *.dkr.ecr.ap-northeast-1.amazonaws.comのレコードセット
    • CNAME として dkr.ecr.ap-northeast-1.amazonaws.com を設定

1 のレコードセットのみを作成した場合に、 Amazon ECR から Docker イメージがプルができなくなります。Amazon ECR の URI は 1234567892012.dkr.ecr.ap-northeast-1.amazonaws.com のようになるため、この URI でも名前解決できるようにする必要があるため、 2 のレコードセットを作成する必要があります。

AWS CLI で作成する場合は、下記のような感じになります。

aws route53 change-resource-record-sets \
  --hosted-zone-id /hostedzone/xxxx \
  --change-batch '{
  "Changes": [
    {
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "dkr.ecr.ap-northeast-1.amazonaws.com",
        "Type": "A",
        "AliasTarget":{
          "HostedZoneId": "Z2E726K9Y6RL4W",
          "DNSName": "vpce-xxxx.dkr.ecr.ap-northeast-1.vpce.amazonaws.com",
          "EvaluateTargetHealth": false
        }
      }
    },
    {
      "Action": "CREATE",
      "ResourceRecordSet": {
        "Name": "*.dkr.ecr.ap-northeast-1.amazonaws.com.",
        "Type": "CNAME",
        "TTL": 300,
        "ResourceRecords": [
          {
            "Value": "dkr.ecr.ap-northeast-1.amazonaws.com"
          }
        ]
      }
    }
  ]
}' \
1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1