Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
OrganizationEventAdvent CalendarQiitadon (β)
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

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

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",
          "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"
}' \
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Help us understand the problem. What are the problem?