使用 Copilot 和服务发现找不到 Redis

Redis not found using Copilot and Service Discovery

我部署了负载平衡 Web 服务:

About

  Application      my-app
  Name              api
  Type              Load Balanced Web Service

Configurations

  Environment       Tasks               CPU (vCPU)          Memory (MiB)        Port
  -----------       -----               ----------          ------------        ----
  production        1                   0.25                512                 80

Routes

  Environment       URL
  -----------       ---
  production        http://xxxxx.us-east-1.elb.amazonaws.com

Service Discovery

  Environment       Namespace
  -----------       ---------
  production       api.my-app.local:80

Variables

  Name                                Container           Environment         Value
  ----                                ---------           -----------         -----
  COPILOT_APPLICATION_NAME              "                   "                 my-app
  COPILOT_ENVIRONMENT_NAME              "                   "                 production
  COPILOT_LB_DNS                        "                   "                 xxxx.us-east-1.elb.amazonaws.com
  COPILOT_SERVICE_DISCOVERY_ENDPOINT    "                   "                 my-app.local
  COPILOT_SERVICE_NAME                  "                   "                api
  REDIS_URL                             "                   "                 redis://redis.my-app.local:6379

和redis作为同一个copilot应用程序中的后端服务:

About

  Application       my-app
  Name              redis
  Type              Backend Service

Configurations

  Environment       Tasks               CPU (vCPU)          Memory (MiB)        Port
  -----------       -----               ----------          ------------        ----
  production        1                   0.25                512                 6379

Service Discovery

  Environment       Namespace
  -----------       ---------
  production        redis.my-app.local:6379

Variables

  Name                                Container           Environment         Value
  ----                                ---------           -----------         -----
  COPILOT_APPLICATION_NAME            redis               production          my-app
  COPILOT_ENVIRONMENT_NAME              "                   "                 production
  COPILOT_SERVICE_DISCOVERY_ENDPOINT    "                   "                 my-app.local
  COPILOT_SERVICE_NAME                  "                   "                 redis

当我查看 Route53 上的记录时,redis.my-app.local 存在。但是我的 api 中的日志总是说:

uncaughtException: Redis connection to redis.my-app.local:6379 failed - getaddrinfo ENOTFOUND redis.my-app.local

然后在某个时候 redis 关闭,因为没有传入连接...这是什么问题?

看来您找到了解决方案:必须启用 DNS 主机名。

对于可能遇到相同问题的其他人:

默认情况下,Copilot 会:

EnableDnsHostnames: true
EnableDnsSupport: true

我们将为导入的 VPC 添加警告,但与此同时,请确保您已为现有 VPC 启用 DNS 主机名。

参考:https://github.com/aws/copilot-cli/issues/2211