Membuat ECS layanan Amazon yang menggunakan Service Discovery - Amazon Elastic Container Service

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

Membuat ECS layanan Amazon yang menggunakan Service Discovery

Pelajari cara membuat layanan yang berisi tugas Fargate yang menggunakan penemuan layanan dengan. AWS CLI

Untuk daftar penemuan layanan dukungan Wilayah AWS tersebut, lihatGunakan penemuan layanan untuk menghubungkan ECS layanan Amazon dengan DNS nama.

Untuk informasi tentang Daerah yang mendukung Fargate, lihat. Wilayah yang Didukung untuk Amazon ECS di AWS Fargate

Prasyarat

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

Langkah 1: Buat sumber daya pencari layanan di AWS 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 menciptakan namespace yang disebut. tutorial Ganti vpc-abcd1234 dengan ID salah satu dari Anda yang adaVPCs.

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

    Output perintah ini adalah sebagai berikut.

    {
        "OperationId": "h2qe3s6dxftvvt7riu6lfy2f6c3jlhf4-je6chs2e"
    }
  2. Menggunakan OperationId dari output dari langkah sebelumnya, verifikasi bahwa namespace privat telah 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. Menggunakan NAMESPACE ID dari output dari langkah sebelumnya, buat layanan penemuan layanan. Contoh ini menciptakan 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 ECS sumber daya Amazon

Ikuti langkah-langkah berikut ini untuk membuat ECS klaster Amazon, ketentuan tugas, dan layanan:

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

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

    1. Buat file yang diberi nama fargate-task.json dengan konten ketentuan 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. Mendaftarkan ketentuan tugas menggunakanfargate-task.json.

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

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

      Saat Anda membuat ECS layanan, tentukan jenis peluncuran Fargate, dan versi LATEST platform yang mendukung penemuan layanan. Ketika layanan penemuan layanan dibuat di AWS Cloud Map , registryArn adalah yang ARN dikembalikan. Itu securityGroups dan subnets harus milik VPC yang digunakan untuk membuat namespace Cloud Map. Anda dapat memperoleh grup keamanan dan subnet IDs dari VPC Konsol Amazon.

      { "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 ECS layanan Anda menggunakanecs-service-discovery.json.

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

Langkah 3: Verifikasi Penemuan Layanan di AWS Cloud Map

Anda dapat memverifikasi bahwa semuanya dibuat dengan benar dengan menanyakan informasi penemuan layanan Anda. Setelah penemuan layanan dikonfigurasi, Anda dapat menggunakan AWS Cloud Map API operasi, atau menelepon dig dari instance di dalamVPC. 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 ECS klaster untuk menanyakan detail tentang instance penemuan layanan.

    aws servicediscovery discover-instances \ --namespace-name tutorial \ --service-name myapplication \ --query-parameters ECS_CLUSTER_NAME=tutorial
  3. DNSCatatan yang dibuat di zona yang di-hosting Route 53 untuk layanan penemuan layanan dapat dikuerikan dengan AWS CLI perintah berikut:

    1. Menggunakan ID namespace, dapatkan informasi tentang namespace, yang mencakup ID zona yang di-hosting 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 di-hosting Route 53 dari langkah sebelumnya (lihat teks dengan huruf tebal), dapatkan set catatan sumber daya untuk zona yang di-hosting.

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

    dig +short myapplication.tutorial

Langkah 4: Membersihkan

Setelah Anda menyelesaikan tutorial ini, bersihkan sumber daya terkait untuk menghindari timbulnya 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. Menggunakan output OperationId dari langkah sebelumnya, verifikasi bahwa instans layanan penemuan layanan berhasil dibatalkan pendaftarannya.

    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. Menggunakan output OperationId dari 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 hitungan yang diinginkan untuk ECS layanan Amazon 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 ECS layanan Amazon.

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

    aws ecs delete-cluster \ --cluster tutorial