web-dev-qa-db-ja.com

AWS ECSサービスをサービスの発見を介してコミュニケーションをとることができません

私は2つのサービスがAWS ECSサービスでサービス発見エンドポイントを介してコミュニケーションをとることを試みています。

例:

SERVICE1:タスク定義を実行してNGINXとPHPFPMを実行します。

service2:タスク定義を実行してRedisを実行します。

さて、Service1コンテナがService2コンテナに通信する必要があります。

マニュアルおよびインターネット上で見つかったリソースに従って。これが私がしたことで、必要性を達成することができません。

  1. 私たちはサービスの発見をオンにする必要があります(終了
  2. サービス検出エンドポイントとして機能する適切なサービス名とネームスペースを設定します(行われた)。
  3. 上記のプロパティセットを使用してタスク定義を作成し、サービスを作成する(完了
  4. AWSはroute53上のSRVレコードを生成します([〜#〜] OK [〜#〜]

現在、サービス検出エンドポイントを使用する場合 service_discovery_service_name.service_discovery_namespace.

エラーログが表示され、名前を解決できません。

enter image description here

12

答えのほとんどは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)。
  • セキュリティグループがVPC内でトラフィックを許可することを確認してください。
  • FARGATEを使用したり、ログが制限されているため、VPCにEC2インスタンスを作成し、URL\DNSレコードを作成しようとしているECS Fargateタスクを作成します。

私のサービス発見:

enter image description here

マニュアル:

Nginx Resolver

ネームサーバー(NS)レコード

1
Amit Baranes