2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

クラベスAdvent Calendar 2024

Day 21

ECS service connectについて

Last updated at Posted at 2024-12-20

はじめに

クラベスアドベントカレンダー21日目です!

クラベスでエンジニアをやってます。
コードネームは、ozといいます!

インフラ構築をしている際、採用予定だったApp Meshがサービス終了になったので
代替えサービスの検討をする必要がありました。

公式から案内されていたのが、ECS service connectだったので
仕組みについて確認したことをまとめます。

ECS service connectとは

Amazon ECS Service Connect では、Amazon ECS 設定としてサービス間通信を管理できます。Amazon ECS でサービス検出とサービスメッシュの両方を構築します。これにより、サービスのデプロイごとに管理する各サービス内の完全な設定、VPC DNS 設定に依存しない名前空間内のサービスを参照する統一された方法、すべてのアプリケーションを監視するための標準化されたメトリクスとログが提供されます。Service Connect は、サービスのみを相互接続します。

上記を読む限り、ECS Service Connectは
ECSで動作するコンテナ間の通信を行うための機能のようです。

つまり、ECS Service間の接続をうまくやってくれて
かつ通信ログや名前解決などをいい感じにやってくれるサービスに見えます。

実際に作ってみる

ECSを実際に作成して、疎通がどのようにして行われているか確認します。
作成するECSは、疎通確認ができればいいので一旦nginxを80番ポートでlistenしてみます。

また疎通確認をするにあたって、クライアントとサーバーを建てる必要があるので
複数台立ててみます。

スクリーンショット 2024-12-20 19.49.15.png
スクリーンショット 2024-12-20 19.54.21.png
スクリーンショット 2024-12-20 19.56.00.png

いざ疎通確認

リソースが立ち上がりました。
早速pikachuからraichuに疎通確認してみます。

ではpikachuに入ります。

aws ecs execute-command --cluster Pikachu --task arn:aws:ecs:us-hoge-1:123456789:task/Pikachu/hoge --container pikachu --interactive --command "/bin/sh"

The Session Manager plugin was installed successfully. Use the AWS CLI to start a session.


Starting session with SessionId: ecs-execute-command-hoge
#

ちなみに、raichuは名前空間electricityにて80番をlistenしています。

curl http://erectricty
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>

接続できているようです。

では、次にeeveeに接続してみます。
eeveeは名前空間normalにて80番をlistenしています。

# curl http://normal
curl: (6) Could not resolve host: normal

接続できないようです。
名前解決できていないようです。
どういうことでしょうか。

答えは開発者ガイドにありました。
https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/developerguide/service-connect.html

VPC DNS 設定に依存しない名前空間内のサービスを参照する

接続するにあたって、同じ名前空間にクライアントとサーバーが存在している必要があるようです。
またVPC DNSを利用していないんですね。

すでに気づいている方もおられるかもしれませんが、
pikachuelectricityにいます。
そのため異なる名前空間normalにいるeeveeとは疎通できないということでした。

実際どうやって解決しているか

答えは、hostsで解決しているようです。

# cat /etc/hosts
127.0.0.1 localhost
127.255.0.1 erectricty
2600:f0f0:0:0:0:0:0:1 erectricty

ECS service connectの設定を行うと同じ名前空間にある
サーバーとなるECSの情報を拾ってきて管理しているようでした。

また、サイドカーでコンテナが別につくのですが
ECSのリソースを使ってログの収集やサーキットブレーカーも実現してくれるようです。

まとめ

  • service connectの名前解決は、同じ名前空間にある必要がある
  • 名前解決は、DNSではなくhosts

実際仕組み的な部分については、把握していなくても開発できるかなとは思うのですが
個人的に原理を把握しておくことは、いざとなったときに自分の助けになると思っているので
ぜひ機会があれば試してみてください。

僕が働いているクラベスについて

ちなみにクラベスでは、ちょっと技術検証をしたいなってときも
ある程度自由に使えるAWSアカウントが払い出されていたりします。

もし興味が湧いたら、カジュアル面談などでお話聞かせてもらえたらと思います。
クラベスHPより会社の雰囲気!わかります!
https://www.claves.co.jp/

参考記事

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?