質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Terraform

Terraformは、インフラ構築のためのツールです。AWS/DigitalOcean/GoogleCloudといった様々なインフラに対応。インフラ構成のコード管理や変更の作業などの手間を自動化し、インフラ構築の効率化を図ることができます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Q&A

解決済

1回答

1402閲覧

AWS サービスディスカバリ コンテナ間(サービス間)通信について

coldplay

総合スコア25

Terraform

Terraformは、インフラ構築のためのツールです。AWS/DigitalOcean/GoogleCloudといった様々なインフラに対応。インフラ構成のコード管理や変更の作業などの手間を自動化し、インフラ構築の効率化を図ることができます。

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

0グッド

0クリップ

投稿2022/02/26 01:40

編集2022/02/26 04:31

質問失礼します。
未経験ですが転職を目指してプログラムを勉強しております。

現在 AWSでインフラを構築し、サービスディスカバリを使用してフロントエンドアプリからバックエンドアプリの別コンテナにリクエストを送りたいのですが、名前解決に失敗してしまいます。

js

1POST http://sd_api.myapp:3000/api/users 2net::ERR_NAME_NOT_RESOLVED

同vpc内にあるec2から以下のコマンドで確認すると名前解決はできていそうでした。

$ dig +short sd_api.myapp 10.0.0.1 10.0.0.2

awsはterraformで構築しており以下のようになっております。

js

1//サービスディスカバリ 2resource "aws_service_discovery_private_dns_namespace" "myapp" { 3 name = "myapp" 4 vpc = aws_vpc.vpc.id 5} 6resource "aws_service_discovery_service" "sd_api" { 7 name = "sd_api" 8 dns_config { 9 namespace_id = aws_service_discovery_private_dns_namespace.myapp.id 10 dns_records { 11 ttl = 10 12 type = "A" 13 } 14 routing_policy = "MULTIVALUE" 15 } 16 health_check_custom_config { 17 failure_threshold = 1 18 } 19} 20 21//apiコンテナ定義 22resource "aws_ecs_service" "api_container" { 23 name = "api_container" 24 cluster = aws_ecs_cluster.cluster.arn 25 task_definition = aws_ecs_task_definition.api_container.arn 26 desired_count = 1 27 launch_type = "FARGATE" 28 platform_version = "1.4.0" 29 network_configuration { 30 assign_public_ip = false 31 security_groups = [ 32 module.api_sg.security_group_id 33 ] 34 subnets = [ 35 aws_subnet.private-1a.id, 36 aws_subnet.private-1c.id 37 ] 38 } 39 service_registries { 40 registry_arn = aws_service_discovery_service.sd_api.arn 41 } 42} 43 44//フロントコンテナ定義 45 46resource "aws_ecs_service" "front_container" { 47 name = "front_container" 48 cluster = aws_ecs_cluster.cluster.arn 49 task_definition = aws_ecs_task_definition.front_container.arn 50 desired_count = 1 51 launch_type = "FARGATE" 52 platform_version = "1.4.0" 53 health_check_grace_period_seconds = 60 54 55 network_configuration { 56 assign_public_ip = false 57 security_groups = [ 58 module.front_sg.security_group_id, 59 ] 60 61 subnets = [ 62 aws_subnet.private-1a.id, 63 aws_subnet.private-1c.id 64 ] 65 } 66 67 load_balancer { 68 target_group_arn = aws_lb_target_group.front_container.arn 69 container_name = "front_container" 70 container_port = 8080 71 } 72}

terraformの設定で間違っている箇所があるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

CHERRY

2022/02/26 04:06

フロントエンドアプリは、どこで動いているのでしょうか? フロントエンドアプリが動いている PC 等からバックエンドアプリにアクセスは可能ですか?
coldplay

2022/02/26 04:31

フロントエンドアプリも別のfargateコンテナで動いています! フロントエンドのコンテナ定義追記しました! ec2からバックエンドアプリにリクエストを送れるかということですか? ecsをprivateサブネットに入れていることや、リクエストの方法↓が間違っているのでしょうか。。。 POST http://sd_api.myapp:3000/api/users
coldplay

2022/03/01 13:36

みなさんコメント有難うございました。
guest

回答1

0

自己解決

https://stackoverflow.com/questions/62108706/cannot-connect-two-ecs-services-via-service-discovery

クライアントからリクエストされるため名前解決できないと納得しました。ALBを使うことにします。

投稿2022/03/01 13:37

coldplay

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問