【问题标题】:Derive the Route53 hosted Zone from current ec2从当前 ec2 派生 Route53 托管区域
【发布时间】:2017-11-24 11:49:36
【问题描述】:

我正在尝试编写一个可扩展且可重用的脚本来使用 ansible 配置 ec2s。作为其中的一部分,我希望能够确定我的机器属于哪个 Route53 托管区域,因此我可以将其添加为私有区域的记录集。我不想进入该区域......我希望能够使用 ec2 弄清楚它。

对于给定的 ec2,我可以获得实例。从实例中,我得到了 VPC-ID。我知道 VPC-ID 与 Route53 托管区域相关联,但我似乎无法找到 AWS CLI 命令来从 VP​​C-ID 中找出托管区域。

我找到了命令'route53 list-vpc-association-authorizations --hosted-zone-id=' 命令,该命令必须在每个单独的区域上运行,但结果是一个空数组我知道一个事实与 VPC 相关联。

鉴于我知道 VPC ID 和 ec2 实例 ID,谁能帮我派生正确的私有托管区域?

谢谢

【问题讨论】:

    标签: bash amazon-web-services amazon-ec2 amazon-route53 vpc


    【解决方案1】:

    也许对人们来说太简单了,但这很有效:

    aws route53 list-hosted-zones --output text | grep 'MYDOMAIN' | awk '{print $3}' | cut -c13-

    ...只需以列格式列出 AWS 中的域,搜索您的域,然后使用 awk 剪切区域 id 并剪切。

    【讨论】:

    • 这是我以前的雇主遇到的一个老问题。但我认为关键是我想在不知道它是什么的情况下推导出域。我上面写的函数知道区域和VPC id。
    【解决方案2】:

    花了我一段时间,但我想通了:

    getHostedZone(){
      ZONE_IDS=$(aws route53 --region $2 list-hosted-zones | jq ".HostedZones | map(.Id)")
      while IFS= read -r; do
        ZONE=$(aws route53 --region $2 get-hosted-zone --id $REPLY)
        hasVPCs=$(echo $ZONE | jq 'has("VPCs")')
        VPCs=$(echo $ZONE | jq ".VPCs")
        if [ "$hasVPCs" == true ]
        then
          VPC=$(echo $VPCs | jq ".[] | select(.VPCId == \"$1\")")
          if [ -n "$VPC" ]
          then
            HOSTED_ZONE=$(echo $REPLY | sed 's/^\/hostedzone\///g')
          fi
        fi
      done < <(echo $ZONE_IDS | jq -r '.[]')
    
      echo $HOSTED_ZONE
    }
    

    调用:

    ZONE_ID=$(getHostedZone $VPC_ID $EC2_REGION)
    

    【讨论】:

      猜你喜欢
      • 2018-03-08
      • 2015-12-06
      • 2018-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-23
      • 2020-06-16
      • 2019-10-13
      相关资源
      最近更新 更多