サービスディスカバリを使用して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クエリできました。
最後までお読みいただきましてありがとうございました!
【PR】 「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
【PR】 「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第2版」という本を書きました。
【PR】 「ポケットスタディ AWS認定 デベロッパーアソシエイト」という本を書きました。
【PR】 「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
【PR】 「AWSではじめるLinux入門ガイド」という本を書きました。

開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト – プロフェッショナル」を執筆しました
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテク …
-
-
Kinesis Data AnalyticsをKinesis Data Streamsに接続してSQL検索する
Amazon Kinesis Data StreamsにTwitter検索データ …
-
-
webフォームからの問い合わせをRedmineに自動登録して対応状況を管理する(API Gateway + Lambda)
先日、検証目的で作成したRedmineの冗長化の一機能として、webフォームから …
-
-
Active Directory認証でAWSマネジメントコンソールにSSO
こちらの2つのサイトを参考にすすめました。 Active Directory資産 …
-
-
AWS OrganizationsでAWSアカウントを25作りたいのでPythonで作った
AWSアカウントを25作る必要があったので、Lambda Python 3.7で …
-
-
slackのbotにWikipediaを調べてもらう(Python on AWS Lambda + API Gateway)
slackのbotに少しでも役に立ってもらおうと、Wikipediaを調べてもら …
-
-
EC2 Linux ユーザーデータ実行ユーザーとカレントディレクトリの確認
きっと、rootなんだろうなあと認識してたのですが、自分の目で確認したことはなか …
-
-
RDSインスタンスのストレージをgp2からgp3に変更しました
2022/11/9にRDSでgp3ボリュームが使用できるようになりました。 Am …
-
-
AWS Toolkit for EclipseからLambda関数を直接作成できずにMavenでパッケージ化して作成
AWS Toolkit for EclipseからLambda関数を直接作成 チ …
-
-
「JAWS-UG朝会 #18」で主にAWSなブログについて発表をしました
ラジオ体操 いつものラジオ体操から。 今日はラーニングセンターから配信の日でした …