📝

チュートリアルレベルで ECS サービス検出を試してみた

に公開

サービス検出を使用して Amazon ECS サービスを DNS 名で接続する - Amazon Elastic Container Service
タスク間でドメインで接続できることを確認してみました。

前提

  • デフォルト VPC を使用
  • 2 つの ECS サービスでは同じ VPC, 同じセキュリティグループを使用

01. ECS クラスター作成

デフォルト設定で作成しました。

02. Cloud Map 名前空間の作成

以下の設定で作成しました。

  • 名前空間名: ecs-tutorial.local
  • インスタンスの検出: API 呼び出しと VPC の DNS クエリ
  • VPC: デフォルト VPC

03. ECS タスク定義の作成

以下の内容で作成しました。

  • 起動タイプ: AWS Fargate
  • タスクロール: AdministratorAccess 権限を付与したタスクロール
  • コンテナ名: webapp
  • イメージ URI: nginx:latest
  • コンテナポート: 80

上記以外はデフォルト設定です。

04. 接続先の ECS サービスの作成

03 のタスク定義を使用して以下の設定でサービスを作成します。

  • クラスター: 01 で作成したクラスター
  • 起動タイプ: FARGATE
  • サービス検出
    • サービス検出を使用
    • 既存の名前空間を選択: 02 で作成した名前空間を選択
    • サービス検出名: webapp

上記以外はデフォルト設定で作成します。
タスクの起動後、タスクのパブリック IP にアクセスして以下の画面が表示されれば OK です。

05. 接続元の ECS サービスの作成

基本的には 04 と同じ内容で作成しますが、以下の設定のみ変更します。

  • サービス名: client-service
  • サービス検出名: client

タスクの起動後、タスクのパブリック IP にアクセスして 04 と同じ画面が表示されれば OK です。

06. サービス検出の状況を確認

2 つの ECS サービスの起動完了後、以下の点をチェックしてください。

  • Cloud Map の名前空間に 2 つのサービスが登録されているか
  • Cloud Map の各サービスにインスタンスが紐づいているか
  • インスタンスのヘルスは正常か
  • Route 53 に ecs-tutorial.local というホストゾーンが作成されているか
  • ホストゾーンに以下のレコードが作成されているか
    • webapp.ecs-tutorial.local
    • client.ecs-tutorial.local



07. 接続元の ECS サービスで ECS Exec を有効化

CloudShell などから以下のコマンドを実行します。

$ aws ecs update-service \
--cluster <01 のクラスター名> \
--service <05 の ECS サービス名> \
--enable-execute-command

上記コマンド実行後、接続元の ECS サービスを新しいデプロイを強制で更新します。

08. サービス検出の動作確認

07 で新規 ECS タスクの起動完了後、以下のコマンドで ECS Exec を実行します。

$ aws ecs execute-command \
--cluster <01 のクラスター名> \
--task <07 の ECS タスク ARN> \
--container webapp \
--interactive \
--command "/bin/sh"

コンテナにログイン後、以下のコマンドで ECS サービス間の通信ができることを確認します。

$ curl http://webapp.ecs-tutorial.local
<!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>

上記のように Nginx のデフォルトページの html が返却されれば成功です。
疎通できない場合はセキュリティグループやインターネット接続の有無を確認してください。

まとめ

今回は チュートリアルレベルで ECS サービス検出を試してみました。
どなたかの参考になれば幸いです。

参考資料

Discussion