如何获取私有 Elastic-Beanstalk 环境 DNS 端点?

如何获取私有 Elastic-Beanstalk 环境 DNS 端点?

我的设置如下: 我有一个由 3 个子网组成的 VPC:公共子网、带 NAT 的私有子网和隔离子网。我有一个在带 Nat 的私有子网中运行的 elastic beanstalk(单实例)环境,它可以正常工作。

我想要实现的目标: 有一个私人托管区域,其中有指向我的私人 EB 环境的记录。

我正在努力解决的问题: 我的 EB 环境的环境 DNS 指向其民众IP(由于位于私有子网中,因此无法访问,这很好)。但要创建指向我的私有 EB 环境的 DNS 记录,我需要私人的我的环境的端点,对吗?如何获取与我的环境的公共 URL(例如 myapp.eu-central-1.elasticbeanstalk.com)类似的 URL,但解析为我的私有 IP,而不是公共 IP?

答案1

我们遇到了同样的问题,最终选择了你在评论中提到的方法——在route53 记录。

然而,我们能够使该过程自动化,主要是:

将 EB ENV 添加到目标 Route 53 记录

找出托管区域 ID您将要更新的域。将列在托管区域53 号公路的一部分,看起来像Z1GP4MFDYUK339

选择一个记录名称您需要在该区域内更新。将类似于subdomain.example.com

在您的 Elastic Beanstalk 中环境属性添加以下内容:

  • HOSTED_ZONE--> 托管区域 ID
  • APP_DOMAIN--> 记录名称

创造.ebextensions 命令部署时更新记录

在您的应用程序的项目(根)目录中创建以下文件

.ebextensions/99_dns.config

内容99_dns.config

commands:
  01_update_r53:
    command: |
        IP=$(curl --silent http://169.254.169.254/latest/meta-data/local-ipv4)
        APP_DOMAIN=$(/opt/elasticbeanstalk/bin/get-config environment -k APP_DOMAIN)
        HOSTED_ZONE=$(/opt/elasticbeanstalk/bin/get-config environment -k HOSTED_ZONE)
        echo "{\"Comment\":\"Update IP\",\"Changes\":[{\"Action\": \"UPSERT\",\"ResourceRecordSet\":{\"Name\":\""$APP_DOMAIN".\",\"Type\":\"A\",\"TTL\":60,\"ResourceRecords\":[{\"Value\":\""$IP"\"}]}}]}" > awsr53.json
        aws route53 change-resource-record-sets \
            --hosted-zone-id "$HOSTED_ZONE" \
            --change-batch file://awsr53.json

当你的应用程序部署后它将:

  • 查询其本地(私有)IP 地址
  • 从 ENV 中获取你设置的APP_DOMAIN和值HOSTED_ZONE
  • 使用awscli 创建/更新记录,使其HOSTED_ZONE@RECORD成为A具有私有地址值的记录

答案2

Matt 的答案对我很有用,很有效。但我不得不做一些改变:

commands:
  01_update_r53:
    command: |
      IMDSTOKEN=$(curl --silent -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600")
      IP=$(curl --silent -H "X-aws-ec2-metadata-token: $IMDSTOKEN" http://169.254.169.254/latest/meta-data/local-ipv4)
      AWS_R53_APP_DOMAIN=$(/opt/elasticbeanstalk/bin/get-config environment -k AWS_R53_APP_DOMAIN)
      AWS_R53_HOSTED_ZONE=$(/opt/elasticbeanstalk/bin/get-config environment -k AWS_R53_HOSTED_ZONE)
      echo "{\"Comment\":\"Update IP\",\"Changes\":[{\"Action\": \"UPSERT\",\"ResourceRecordSet\":{\"Name\":\""$AWS_R53_APP_DOMAIN".\",\"Type\":\"A\",\"TTL\":60,\"ResourceRecords\":[{\"Value\":\""$IP"\"}]}}]}" > awsr53.json
      aws route53 change-resource-record-sets --hosted-zone-id "$AWS_R53_HOSTED_ZONE" --change-batch file://awsr53.json

这需要分配给实例使用的服务角色权限,以便在 Route53 上执行 upsert。我建议先通过 SSH 执行前面提到的脚本进行调试

相关内容