私は2つのサービスがAWS ECSサービスでサービス発見エンドポイントを介してコミュニケーションをとることを試みています。
例:
SERVICE1:タスク定義を実行してNGINXとPHPFPMを実行します。
service2:タスク定義を実行してRedisを実行します。
さて、Service1コンテナがService2コンテナに通信する必要があります。
マニュアルおよびインターネット上で見つかったリソースに従って。これが私がしたことで、必要性を達成することができません。
現在、サービス検出エンドポイントを使用する場合 service_discovery_service_name.service_discovery_namespace.
エラーログが表示され、名前を解決できません。
答えのほとんどはSRV
DNSレコードの種類について話し、Nginxの例を表示し、Nginx(およびSRV
)についてのみNGINXの例を表示します。
ECS FARGATEとA
DNSレコードを使用して動作している場合最も重要なことは、適切なresolver
を設定することです。
ドキュメントから:
Upstreamサーバの名前をアドレスに解決するために使用されるネームサーバを設定します。
resolver 127.0.0.1 [:: 1]:5353;
アドレスは、オプションのポートを使用して、ドメイン名またはIPアドレスとして指定できます。ポートが指定されていない場合は、ポート53が使用されます。ネームサーバーはラウンドロビンファッションで照会されます。
それはリゾルバーがプライベートDNSを解決しなければならないと言われています。したがって、NS
DNSレコードを使用する必要があります。このDNSはプライベートDNSを解決できないため、リゾルバとして8.8.8.8
を使用することは機能しません。
NSは 'name server'を表し、このレコードはどのDNSサーバーがそのドメインに権限があるか(どのサーバーに実際のDNSレコードが含まれています)を示します。ドメインには複数NSレコードがそのドメインのプライマリとバックアップネームサーバーを示すことができるレコード]にあります。
DNSリゾルバを取得するには、次のコマンドを実行します。
aws route53 list-resource-record-sets --hosted-zone-id %HOSTED_ZONE_ID% --query "ResourceRecordSets[?Type == 'NS']"
リソースレコードの1つを選択して、それをNGINX resolver
(末尾の.
を含む)に配置します。
NGINX基本テンプレート:
events {
worker_connections 768;
}
http {
# DNS Resolver
resolver ns-###.awsdns-####.com. valid=10s;
gzip on;
gzip_proxied any;
gzip_types text/plain application/json;
gzip_min_length 1000;
fastcgi_buffers 16 16k;
fastcgi_buffer_size 32k;
server {
listen 80;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $Host;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# This is the important part
proxy_pass http://ecs-fargate-svc.local:8080;
}
location = /health-check {
return 200 'all good';
}
}
}
考慮する必要がある点はほとんどありません。
8080
)。私のサービス発見:
マニュアル: