使用 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 主机名。
我部署了负载平衡 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 主机名。