サービスディスカバリを使用してECSサービスの作成
ECSデベロッパーガイドのチュートリアル:サービスディスカバリを使用して、サービスの作成をやりました。
CLIはCloudShellで実行しました。
目次
AWS Cloud Mapでサービスディスカバリリソースを作成
VPC IDは既存のVPCを指定します。
1 2 3 4 5 |
aws servicediscovery create-private-dns-namespace \ --name tutorial \ --vpc vpc-05fb7f02967a7393b |
1 2 3 4 |
{ "OperationId": "pzentgiswi2ry4slbwpb7ie7ykabe33u-k31ly8oj" } |
OperationIdが返されました。
Cloud Mapのコンソールを確認すると名前空間が作成されていました。
指定したVPCに関連づくRoute 53プライベートホストゾーンも作成されました。
1 2 3 4 |
aws servicediscovery get-operation \ --operation-id pzentgiswi2ry4slbwpb7ie7ykabe33u-k31ly8oj |
create-private-dns-namespaceのレスポンスのOperationIdを使用して確認もできます。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
{ "Operation": { "Id": "pzentgiswi2ry4slbwpb7ie7ykabe33u-k31ly8oj", "Type": "CREATE_NAMESPACE", "Status": "SUCCESS", "CreateDate": "2023-02-09T13:03:58.318000+00:00", "UpdateDate": "2023-02-09T13:04:34.807000+00:00", "Targets": { "NAMESPACE": "ns-zsymn5wwxw47lclg" } } } |
作成成功が確認できました。
1 2 3 4 5 6 |
aws servicediscovery create-service \ --name myapplication \ --dns-config "NamespaceId="ns-zsymn5wwxw47lclg",DnsRecords=[{Type="A",TTL="300"}]" \ --health-check-custom-config FailureThreshold=1 |
サービスができました。
ECSリソースの作成
1 2 3 4 |
aws ecs create-cluster \ --cluster-name tutorial |
ECSクラスターができました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
cat << EOF > fargate-task.json { "family": "tutorial-task-def", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "sample-app", "image": "httpd:2.4", "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ], "essential": true, "entryPoint": [ "sh", "-c" ], "command": [ "/bin/sh -c \"echo '<html> <head> <title>Amazon ECS Sample App</title> <style>body {margin-top: 40px; background-color: #333;} </style> </head><body> <div style=color:white;text-align:center> <h1>Amazon ECS Sample App</h1> <h2>Congratulations!</h2> <p>Your application is now running on a container in Amazon ECS.</p> </div></body></html>' > /usr/local/apache2/htdocs/index.html && httpd-foreground\"" ] } ], "requiresCompatibilities": [ "FARGATE" ], "cpu": "256", "memory": "512" } EOF |
fargate-task.jsonを作成しました。
1 2 3 4 |
aws ecs register-task-definition \ --cli-input-json file://fargate-task.json |
タスク定義ができました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
cat << EOF > ecs-service-discovery.json { "cluster": "tutorial", "serviceName": "ecs-service-discovery", "taskDefinition": "tutorial-task-def", "serviceRegistries": [ { "registryArn": "arn:aws:servicediscovery:us-east-1:123456789012:service/srv-qstoxt4wraf3t3te" } ], "launchType": "FARGATE", "platformVersion": "LATEST", "networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-04c2b5486a8145be2" ], "subnets": [ "subnet-08e43bf7abbe76fc9" ] } }, "desiredCount": 1 } EOF |
ecs-service-discovery.jsonを作成しました。
1 2 3 4 |
aws ecs create-service \ --cli-input-json file://ecs-service-discovery.json |
サービスが作成できました。
パブリックサブネットで実行しましたので、ブラウザからアクセスを確認しました。
Cloud Mapで確認すると、サービスインスタンスの情報が見えました。
Route 53プライベートホストゾーンにAレコードが作成されていました。
値はコンテナのプライベートIPアドレスが設定されていました。
Cloud Mapのサービスで設定されているとおり複数値回答なので、コンテナを増やした際にもプライベートホストゾーンでルーティングできます。
1 2 3 |
$ dig +short myapplication.tutorial 10.0.5.127 |
VPC内のEC2からdigでDNSクエリできました。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
![](https://www.sbcr.jp/wp-content/uploads/2023/01/9784815617929-1-407x596.jpg)
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
![](https://www.sbcr.jp/wp-content/uploads/2024/01/9784815625382-3-420x596.jpg)
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
![](https://www.shuwasystem.co.jp//images/book/637791.jpg)
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
![](https://book.mynavi.jp/files/topics/135344_ext_06_0.jpg?v=1673514682)
「AWSではじめるLinux入門ガイド」という本を書きました。
![](https://www.yamamanx.com/wp-content/uploads/2023/12/81Rp5O9We6L._SY522_.jpg)
![@yamamanx](https://www.yamamanx.com/wp-content/plugins/lazy-load/images/1x1.trans.gif)
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
Intel 82599 VF インターフェイスで拡張ネットワーキングが有効なEC2インスタンスで帯域幅を確認してみました
拡張ネットワーキングが有効なEC2インスタンスとそうではないインスタンスの2セッ …
-
-
AWS ControlTowerで既存アカウントをまとめて追加
AWS Organizationsに新たに招待したアカウントをAWS Contr …
-
-
RocketChatからOutgoing Webhookで呼び出されたAPI Gatewayでtokenをリクエスト検証する
本来はWAFでやったほうがよさそうですが、追加料金を発生させたくない場合にAPI …
-
-
slackのbotにWikipediaを調べてもらう(Python on AWS Lambda + API Gateway)
slackのbotに少しでも役に立ってもらおうと、Wikipediaを調べてもら …
-
-
ALBの重み付けルーティングでカナリアリリースをしてみました
当ブログのAMIの更新と、ALBターゲットグループのヘルスチェックを変更したかっ …
-
-
AWS BatchでPandocコンテナイメージを実行する
「ECR(Amazon Elastic Container Registry)に …
-
-
AWSアカウントルートユーザーのMFAでYubicoセキュリティキーを設定した
先日Yubico セキュリティキーを購入して、USBにささなければならないのがな …
-
-
Pepperで撮影した写真をAmazon Rekognitionで分析してその結果をPepperがしゃべる ~(1)AWS編~
Pepperの機能を使えるところは使って、何かしたいなあと思ってまして。 目(カ …
-
-
プライベートサブネットのEC2でセッションマネージャを使うようVPCエンドポイントを構成する
インターネットゲートウェイへのルートがないルートテーブルに関連付けられたプライベ …
-
-
AWS CLIを使用せずにCodeCommitへhttpsで接続する
AWS CLIやアクセスキーID、シークレットアクセスキーなどを開発環境にセット …