Tutorial: Membuat layanan menggunakan Service Discovery - Amazon ECS

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Tutorial: Membuat layanan menggunakan Service Discovery

Penemuan layanan sekarang diintegrasikan ke dalam wizard Create Service di konsol Amazon ECS. Untuk informasi selengkapnya, lihat Membuat layanan Amazon ECS di konsol klasik.

Tutorial berikut menunjukkan cara membuat layanan ECS yang berisi tugas Fargate yang menggunakan penemuan layanan denganAWS CLI.

Untuk daftarWilayah AWSyang mendukung penemuan layanan, lihatPenemuan Layanan .

Untuk informasi tentang Wilayah yang mendukung Fargate, lihatWilayah yang Didukung untuk Amazon ECS aktifAWSFargate.

Prasyarat

Sebelum Anda memulai tutorial ini, pastikan bahwa prasyarat berikut terpenuhi:

Langkah 1: Buat sumber daya Penemuan Layanan diAWS Cloud Map

Ikuti langkah-langkah berikut untuk membuat namespace penemuan layanan dan layanan penemuan layanan Anda:

  1. Buat namespace penemuan layanan Cloud Map pribadi. Contoh ini membuat namespace yang disebuttutorial. Gantivpc-abcd1234dengan ID salah satu VPC Anda yang ada.

    aws servicediscovery create-private-dns-namespace \ --name tutorial \ --vpc vpc-abcd1234

    Output dari perintah ini adalah sebagai berikut.

    {
        "OperationId": "h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e"
    }
  2. MenggunakanOperationIddari output langkah sebelumnya, verifikasi bahwa namespace pribadi berhasil dibuat. Catat ID namespace karena Anda menggunakannya dalam perintah berikutnya.

    aws servicediscovery get-operation \ --operation-id h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e

    Outputnya adalah sebagai berikut.

    {
        "Operation": {
            "Id": "h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e",
            "Type": "CREATE_NAMESPACE",
            "Status": "SUCCESS",
            "CreateDate": 1519777852.502,
            "UpdateDate": 1519777856.086,
            "Targets": {
               "NAMESPACE": "ns-uejictsjen2i4eeg"
            }
        }
    }
  3. MenggunakanNAMESPACEID dari output langkah sebelumnya, buat layanan penemuan layanan. Contoh ini membuat layanan bernamamyapplication. Catat ID layanan dan ARN karena Anda menggunakannya dalam perintah berikutnya.

    aws servicediscovery create-service \ --name myapplication \ --dns-config "NamespaceId="ns-uejictsjen2i4eeg",DnsRecords=[{Type="A",TTL="300"}]" \ --health-check-custom-config FailureThreshold=1

    Outputnya adalah sebagai berikut.

    {
        "Service": {
           "Id": "srv-utcrh6wavdkggqtk",
            "Arn": "arn:aws:servicediscovery:region:aws_account_id:service/srv-utcrh6wavdkggqtk",
            "Name": "myapplication",
            "DnsConfig": {
                "NamespaceId": "ns-uejictsjen2i4eeg",
                "DnsRecords": [
                    {
                        "Type": "A",
                        "TTL": 300
                    }
                ]
            },
            "HealthCheckCustomConfig": {
                "FailureThreshold": 1
            },
            "CreatorRequestId": "e49a8797-b735-481b-a657-b74d1d6734eb"
        }
    }

Langkah 2: Buat sumber daya Amazon ECS

Ikuti langkah-langkah berikut untuk membuat klaster, definisi tugas, dan layanan Amazon ECS Anda:

  1. Buat cluster Amazon ECS. Contoh ini menciptakan sebuah cluster yang diberi namatutorial.

    aws ecs create-cluster \ --cluster-name tutorial
  2. Daftarkan definisi tugas yang kompatibel dengan Fargate dan gunakanawsvpcmodus jaringan. Ikuti langkah-langkah ini:

    1. Buat file yang diberi namafargate-task.jsondengan isi definisi tugas berikut.

      { "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" }
    2. Daftarkan definisi tugas menggunakanfargate-task.json.

      aws ecs register-task-definition \ --cli-input-json file://fargate-task.json
  3. Buat layanan ECS dengan mengikuti langkah-langkah berikut:

    1. Buat file yang diberi namaecs-service-discovery.jsondengan isi layanan ECS yang Anda buat. Contoh ini menggunakan definisi tugas yang dibuat pada langkah sebelumnya. awsvpcConfiguration diperlukan karena ketentuan tugas contoh menggunakan mode jaringan awsvpc.

      Saat Anda membuat layanan ECS, tentukan jenis peluncuran Fargate, danLATESTversi platform yang mendukung penemuan layanan. Ketika layanan penemuan layanan dibuat diAWS Cloud Map,registryArnadalah ARN yang dikembalikan. ThesecurityGroupsdansubnetsharus milik VPC yang digunakan untuk membuat namespace Cloud Map. Anda dapat memperoleh grup keamanan dan ID subnet dari Amazon VPC Console.

      { "cluster": "tutorial", "serviceName": "ecs-service-discovery", "taskDefinition": "tutorial-task-def", "serviceRegistries": [ { "registryArn": "arn:aws:servicediscovery:region:aws_account_id:service/srv-utcrh6wavdkggqtk" } ], "launchType": "FARGATE", "platformVersion": "LATEST", "networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-abcd1234" ], "subnets": [ "subnet-abcd1234" ] } }, "desiredCount": 1 }
    2. Buat layanan ECS Anda menggunakanecs-service-discovery.json.

      aws ecs create-service \ --cli-input-json file://ecs-service-discovery.json

Langkah 3: Verifikasi Penemuan Layanan diAWS Cloud Map

Anda dapat memverifikasi bahwa semuanya dibuat dengan benar dengan menanyakan informasi penemuan layanan Anda. Setelah penemuan layanan dikonfigurasi, Anda dapat menggunakanAWS Cloud MapOperasi API, atau panggilandigdari sebuah instance dalam VPC Anda. Ikuti langkah-langkah ini:

  1. Dengan menggunakan ID layanan penemuan layanan, cantumkan instance penemuan layanan. Catat ID instance (ditandai dengan huruf tebal) untuk pembersihan sumber daya.

    aws servicediscovery list-instances \ --service-id srv-utcrh6wavdkggqtk

    Outputnya adalah sebagai berikut.

    {
        "Instances": [
            {
                "Id": "16becc26-8558-4af1-9fbd-f81be062a266",
                "Attributes": {
                    "AWS_INSTANCE_IPV4": "172.31.87.2"
                    "AWS_INSTANCE_PORT": "80", 
                    "AVAILABILITY_ZONE": "us-east-1a", 
                    "REGION": "us-east-1", 
                    "ECS_SERVICE_NAME": "ecs-service-discovery", 
                    "ECS_CLUSTER_NAME": "tutorial", 
                    "ECS_TASK_DEFINITION_FAMILY": "tutorial-task-def"
                }
            }
        ]
    }
  2. Gunakan namespace penemuan layanan, layanan, dan parameter tambahan seperti nama cluster ECS untuk menanyakan detail tentang instance penemuan layanan.

    aws servicediscovery discover-instances \ --namespace-name tutorial \ --service-name myapplication \ --query-parameters ECS_CLUSTER_NAME=tutorial
  3. Catatan DNS yang dibuat di zona yang dihosting Route 53 untuk layanan penemuan layanan dapat ditanyakan dengan yang berikutAWS CLIperintah:

    1. Menggunakan ID namespace, dapatkan informasi tentang namespace, yang mencakup ID zona yang dihosting Route 53.

      aws servicediscovery \ get-namespace --id ns-uejictsjen2i4eeg

      Outputnya adalah sebagai berikut.

      {
          "Namespace": {
              "Id": "ns-uejictsjen2i4eeg",
              "Arn": "arn:aws:servicediscovery:region:aws_account_id:namespace/ns-uejictsjen2i4eeg",
              "Name": "tutorial",
              "Type": "DNS_PRIVATE",
              "Properties": {
                   "DnsProperties": {
                      "HostedZoneId": "Z35JQ4ZFDRYPLV"
                  }
              },
              "CreateDate": 1519777852.502,
              "CreatorRequestId": "9049a1d5-25e4-4115-8625-96dbda9a6093"
          }
      }
    2. Menggunakan ID zona yang dihosting Route 53 dari langkah sebelumnya (lihat teks dalam huruf tebal), dapatkan catatan sumber daya yang ditetapkan untuk zona yang dihosting.

      aws route53 list-resource-record-sets \ --hosted-zone-id Z35JQ4ZFDRYPLV
  4. Anda juga dapat menanyakan DNS dari sebuah instans dalam VPC Anda menggunakandig.

    dig +short myapplication.tutorial

Langkah 4: Bersihkan

Setelah selesai dengan tutorial ini, bersihkan sumber daya terkait untuk menghindari biaya untuk sumber daya yang tidak digunakan. Ikuti langkah-langkah ini:

  1. Batalkan pendaftaran instance layanan penemuan layanan menggunakan ID layanan dan ID instans yang Anda catat sebelumnya.

    aws servicediscovery deregister-instance \ --service-id srv-utcrh6wavdkggqtk \ --instance-id 16becc26-8558-4af1-9fbd-f81be062a266

    Outputnya adalah sebagai berikut.

    {
        "OperationId": "xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv"
    }
  2. MenggunakanOperationIddari output langkah sebelumnya, verifikasi bahwa instance layanan penemuan layanan berhasil dideregistrasi.

    aws servicediscovery get-operation \ --operation-id xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv
    {
      "Operation": {
            "Id": "xhu73bsertlyffhm3faqi7kumsmx274n-jh0zimzv",
            "Type": "DEREGISTER_INSTANCE",
            "Status": "SUCCESS",
            "CreateDate": 1525984073.707,
            "UpdateDate": 1525984076.426,
            "Targets": {
                "INSTANCE": "16becc26-8558-4af1-9fbd-f81be062a266",
                "ROUTE_53_CHANGE_ID": "C5NSRG1J4I1FH",
                "SERVICE": "srv-utcrh6wavdkggqtk"
            }
        }
    }    
  3. Hapus layanan penemuan layanan menggunakan ID layanan.

    aws servicediscovery delete-service \ --id srv-utcrh6wavdkggqtk
  4. Hapus namespace penemuan layanan menggunakan ID namespace.

    aws servicediscovery delete-namespace \ --id ns-uejictsjen2i4eeg

    Outputnya adalah sebagai berikut.

    {
        "OperationId": "c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj"
    }
  5. MenggunakanOperationIddari output langkah sebelumnya, verifikasi bahwa namespace penemuan layanan berhasil dihapus.

    aws servicediscovery get-operation \ --operation-id c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj

    Outputnya adalah sebagai berikut.

    {
        "Operation": {
            "Id": "c3ncqglftesw4ibgj5baz6ktaoh6cg4t-jh0ztysj",
            "Type": "DELETE_NAMESPACE",
            "Status": "SUCCESS",
            "CreateDate": 1525984602.211,
            "UpdateDate": 1525984602.558,
            "Targets": {
                "NAMESPACE": "ns-rymlehshst7hhukh",
                "ROUTE_53_CHANGE_ID": "CJP2A2M86XW3O"
            }
        }
    }
  6. Perbarui jumlah yang diinginkan untuk layanan Amazon ECS ke0. Anda harus melakukan ini untuk menghapus layanan di langkah berikutnya.

    aws ecs update-service \ --cluster tutorial \ --service ecs-service-discovery \ --desired-count 0
  7. Hapus layanan Amazon ECS.

    aws ecs delete-service \ --cluster tutorial \ --service ecs-service-discovery
  8. Hapus cluster Amazon ECS.

    aws ecs delete-cluster \ --cluster tutorial