サービスディスカバリを使用して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版」という本を書きました。

「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。

「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。

「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。

「AWSではじめるLinux入門ガイド」という本を書きました。


開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
Amazon Connectの新規作成からプッシュボタン入力と発信元電話番号をLambdaで処理するまで
とりあえずやりたいことはタイトルに書いたとおり、「電話をかけて、プッシュボタンに …
-
-
「Getting started with AWS Glue DataBrew」をやってみました
AWS Glue DataBrewを体験してみたくて、開発者ガイドのチュートリア …
-
-
ALBの重み付けルーティングでカナリアリリースをしてみました
当ブログのAMIの更新と、ALBターゲットグループのヘルスチェックを変更したかっ …
-
-
AWS EC2でAMI(Amazon Machine Image)を作成しておく
前回まででひとまずRedmineを構築するところまで出来たので、念のためスナップ …
-
-
RDSの拡張モニタリングを有効にしました
RDS for MySQLです。 変更メニューで、[拡張モニタリングを有効にする …
-
-
AWS Snowファミリーのジョブ作成画面を確認
使わないのですが、画面を見ておきたかったので確認しました。 Snowファミリージ …
-
-
Amazon Aurora Serverless のログをCloudWatch Logsに出力する
WordPress W3 Total Cache のDatabaseCacheを …
-
-
「re:CAP ~サーバーワークス re:Invent 2018 報告会~」でre:Invent2018について思われたことを聞かせていただいた
サーバーワークスさんのre:Invent re:CAPにおじゃましました。 re …
-
-
Amazon Linux2(EC2)にEC-CUBE 4をインストール
こちらのHOMEお知らせ・コラムAmazon Linux2にEC-CUBE4.0 …
-
-
JAWS-UG関西IoT専門支部 ✕ SORACOM UG 関西「Wio LTE + 絶対圧センサーで遊ぼう!」ワークショップにいってきた
JAWS-UG関西IoT専門支部 ✕ SORACOM UG 関西「Wio LTE …