チュートリアル: Amazon ECS CLI を使用したサービス検出を使用する Amazon ECS サービスの作成
このチュートリアルでは、サービスディスカバリ を使用するように設定された Amazon ECS サービスを作成する簡単なウォークスルーを示します。多くのサービスディスカバリ設定値は、ECS パラメータファイルまたはフラグのいずれかを使用して指定できます。両方が存在する場合、使用されているフラグは ECS パラメータファイルより優先されます。Amazon ECS CLI を使用する場合は、構成プロジェクト名が ECS サービスの名前として使用されます。
前提条件
続行する前に、次の前提条件を満たしている必要があります。
-
AWS アカウントをセットアップします。
-
Amazon ECS CLI をインストールします。詳細については、「Amazon ECS CLI をインストールします。」を参照してください。
-
VPC を作成します。詳細については、「仮想プライベートクラウドを作成する」を参照してください。
-
任意: AWS CloudShell は、お客様が独自の EC2 インスタンスを作成する必要なく、コマンドラインを提供するツールです。詳細については、AWS CloudShell ユーザーガイドの AWS CloudShell とはを参照してください。
Amazon ECS CLI を設定する
このチュートリアルを開始する前に、Amazon ECS CLI をインストールして設定する必要があります。詳細については、「Amazon ECS CLI をインストールします。」を参照してください。
Amazon ECS CLI では、ユーザーに代わって API リクエストを作成するために認証情報が必要です。これは、環境変数、AWS プロファイル、または Amazon ECS プロファイルから認証情報をプルできます。詳細については、「Amazon ECS CLI の設定」を参照してください。
Amazon ECS CLI 設定を作成するには
-
クラスター設定を作成します。
ecs-cli configure --cluster
ec2-tutorial
--regionus-east-1
--default-launch-type EC2 --config-nameec2-tutorial
-
アクセスキーとシークレットキーを使用してプロファイルを作成します。
ecs-cli configure profile --access-key
AWS_ACCESS_KEY_ID
--secret-keyAWS_SECRET_ACCESS_KEY
--profile-nameec2-tutorial
注記 Amazon ECS CLI を初めて設定する場合は、これらの設定がデフォルトとしてマークされています。Amazon ECS CLI をすでに設定している場合は、Amazon Elastic Container Service 開発者ガイドの「Amazon ECS コマンドラインリファレンス」を参照して、これをデフォルト設定およびプロファイルとして設定します。
サービスディスカバリを使用するように設定された Amazon ECS サービスの作成
Amazon ECS CLI でサービスディスカバリを使用するように設定された Amazon ECS サービスを作成するには、以下のステップを実行します。
サービスディスカバリを使用するように設定された Amazon ECS サービスを作成するには
-
backend
という名前の Amazon ECS サービスを作成し、VPC 内でtutorial
という名前のプライベート DNS 名前空間を作成します。この例では、タスクがawsvpc
ネットワークモードを使用しているため、container_name
とcontainer_port
の値は必須ではありません。ecs-cli compose --project-name
backend
service up --private-dns-namespacetutorial
--vpcvpc-04deee8176dce7d7d
--enable-service-discovery出力:
INFO[0001] Using ECS task definition TaskDefinition="backend:1" INFO[0002] Waiting for the private DNS namespace to be created... INFO[0002] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS WARN[0033] Defaulting DNS Type to A because network mode was awsvpc INFO[0033] Waiting for the Service Discovery Service to be created... INFO[0034] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0065] Created an ECS service service=backend taskDefinition="backend:1" INFO[0066] Updated ECS service successfully desiredCount=1 serviceName=backend INFO[0081] (service backend) has started 1 tasks: (task 824b5a76-8f9c-4beb-a64b-6904e320630e). timestamp="2018-09-12 00:00:26 +0000 UTC" INFO[0157] Service status desiredCount=1 runningCount=1 serviceName=backend INFO[0157] ECS Service has reached a stable state desiredCount=1 runningCount=1 serviceName=backend
-
同じプライベート DNS 名前空間に
frontend
という名前の別のサービスを作成します。名前空間がすでに存在しているため、 Amazon ECS CLI は新しい名前空間を作成する代わりにそれを使用します。ecs-cli compose --project-name
frontend
service up --private-dns-namespacetutorial
--vpcvpc-04deee8176dce7d7d
--enable-service-discovery出力:
INFO[0001] Using ECS task definition TaskDefinition="frontend:1" INFO[0002] Using existing namespace ns-kvhnzhb5vxplfmls WARN[0033] Defaulting DNS Type to A because network mode was awsvpc INFO[0033] Waiting for the Service Discovery Service to be created... INFO[0034] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0065] Created an ECS service service=frontend taskDefinition="frontend:1" INFO[0066] Updated ECS service successfully desiredCount=1 serviceName=frontend INFO[0081] (service frontend) has started 1 tasks: (task 824b5a76-8f9c-4beb-a64b-6904e320630e). timestamp="2018-09-12 00:00:26 +0000 UTC" INFO[0157] Service status desiredCount=1 runningCount=1 serviceName=frontend INFO[0157] ECS Service has reached a stable state desiredCount=1 runningCount=1 serviceName=frontend
-
2 つのサービスが DNS を使用して VPC 内で互いを検出できることを確認します。DNS ホスト名は、
<service_discovery_service_name>.<service_discovery_namespace>
の形式を使用します。この例では、frontend
サービスはfrontend.tutorial
で検出され、backend
サービスはbackend.tutorial
で検出されます。これらはプライベート DNS 名前空間であるため、これらの DNS 名は指定された VPC 内でのみ解決されます。 -
サービスディスカバリの設定を更新するには、
frontend
サービスの設定を更新します。更新可能な値は、DNS TTL およびヘルスチェックのカスタム設定失敗しきい値の値です。ecs-cli compose --project-name
frontend
service up --update-service-discovery --dns-typeSRV
--dns-ttl120
--healthcheck-custom-config-failure-threshold2
出力:
INFO[0001] Using ECS task definition TaskDefinition="frontend:1" INFO[0001] Updated ECS service successfully desiredCount=1 serviceName=frontend INFO[0001] Service status desiredCount=1 runningCount=1 serviceName=frontend INFO[0001] ECS Service has reached a stable state desiredCount=1 runningCount=1 serviceName=frontend INFO[0002] Waiting for your Service Discovery resources to be updated... INFO[0002] Cloudformation stack status stackStatus=UPDATE_IN_PROGRESS
-
クリーンアップするには、Amazon ECS サービスとサービスディスカバリリソースを削除します。
frontend
サービスが削除されると、Amazon ECS CLI は関連するサービスディスカバリを自動的に削除します。ecs-cli compose --project-name
frontend
service rmINFO[0000] Updated ECS service successfully desiredCount=0 serviceName=frontend INFO[0001] Service status desiredCount=0 runningCount=1 serviceName=frontend INFO[0016] Service status desiredCount=0 runningCount=0 serviceName=frontend INFO[0016] (service frontend) has stopped 1 running tasks: (task 824b5a76-8f9c-4beb-a64b-6904e320630e). timestamp="2018-09-12 00:37:25 +0000 UTC" INFO[0016] ECS Service has reached a stable state desiredCount=0 runningCount=0 serviceName=frontend INFO[0016] Deleted ECS service service=frontend INFO[0016] ECS Service has reached a stable state desiredCount=0 runningCount=0 serviceName=frontend INFO[0027] Waiting for your Service Discovery Service resource to be deleted... INFO[0027] Cloudformation stack status stackStatus=DELETE_IN_PROGRESS
-
クリーンアップを完了するには、サービスを作成したプライベート DNS 名前空間と共に
backend
を削除します。Amazon ECS CLI は、プライベート DNS 名前空間の AWS CloudFormation スタックを、作成された Amazon ECS サービスと関連付けます。サービスが削除されると、名前空間も削除されます。ecs-cli compose --project-name
backend
service rm --delete-namespace