Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Mengonfigurasi Amazon ECS Service Connect dengan AWS CLI
Anda dapat membuat layanan Amazon ECS untuk tugas Fargate yang menggunakan Service Connect dengan. AWS CLI
catatan
Anda dapat menggunakan titik akhir layanan dual-stack untuk berinteraksi dengan Amazon ECS dari AWS CLI, SDK, dan Amazon ECS API melalui IPv4 dan IPv6. Untuk informasi selengkapnya, lihat Menggunakan titik akhir tumpukan ganda Amazon ECS.
Prasyarat
Berikut ini adalah prasyarat Service Connect:
-
Verifikasi bahwa versi terbaru diinstal dan dikonfigurasi. AWS CLI Untuk informasi selengkapnya, lihat Meng instal atau memperbarui ke versi terbaru AWS CLI.
-
Pengguna IAM Anda memiliki izin yang diperlukan yang ditentukan dalam contoh kebijakan AmazonECS_ FullAccess IAM.
-
Anda memiliki VPC, subnet, tabel rute, dan grup keamanan yang dibuat untuk digunakan. Untuk informasi selengkapnya, lihat Buat virtual private cloud.
-
Anda memiliki peran eksekusi tugas dengan nama
ecsTaskExecutionRoledan kebijakan terkelAmazonECSTaskExecutionRolePolicyola dilampirkan ke peran tersebut. Peran ini memungkinkan Fargate menulis log aplikasi NGINX dan log proxy Service Connect ke Amazon Logs. CloudWatch Untuk informasi selengkapnya, lihat Membuat peran eksekusi tugas.
Langkah 1: Buat cluster
Gunakan langkah-langkah berikut untuk membuat cluster dan namespace Amazon ECS Anda.
Untuk membuat cluster Amazon ECS dan AWS Cloud Map namespace
-
Buat cluster Amazon ECS bernama
tutorialuntuk digunakan. Parameter--service-connect-defaultsmenetapkan namespace default cluster. Dalam contoh output, AWS Cloud Map namespace namaservice-connecttidak ada di akun ini dan Wilayah AWS, jadi namespace dibuat oleh Amazon ECS. Namespace dibuat AWS Cloud Map di akun, dan terlihat dengan semua ruang nama lainnya, jadi gunakan nama yang menunjukkan tujuannya.aws ecs create-cluster --cluster-nametutorial--service-connect-defaults namespace=service-connectOutput:
{ "cluster": { "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/tutorial", "clusterName": "tutorial", "serviceConnectDefaults": { "namespace": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-EXAMPLE" }, "status": "PROVISIONING", "registeredContainerInstancesCount": 0, "runningTasksCount": 0, "pendingTasksCount": 0, "activeServicesCount": 0, "statistics": [], "tags": [], "settings": [ { "name": "containerInsights", "value": "disabled" } ], "capacityProviders": [], "defaultCapacityProviderStrategy": [], "attachments": [ { "id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "type": "sc", "status": "ATTACHING", "details": [] } ], "attachmentsStatus": "UPDATE_IN_PROGRESS" } } }
-
Verifikasi bahwa cluster dibuat:
aws ecs describe-clusters --clusters tutorialOutput:
{ "clusters": [ { "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/tutorial", "clusterName": "tutorial", "serviceConnectDefaults": { "namespace": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-EXAMPLE" }, "status": "ACTIVE", "registeredContainerInstancesCount": 0, "runningTasksCount": 0, "pendingTasksCount": 0, "activeServicesCount": 0, "statistics": [], "tags": [], "settings": [], "capacityProviders": [], "defaultCapacityProviderStrategy": [] } ], "failures": [] }
-
(Opsional) Verifikasi bahwa namespace dibuat di AWS Cloud Map. Anda dapat menggunakan Konsol Manajemen AWS atau AWS CLI konfigurasi normal seperti ini dibuat di AWS Cloud Map.
Misalnya, gunakan AWS CLI:
aws servicediscovery get-namespace --idns-EXAMPLEOutput:
{ "Namespace": { "Id": "ns-EXAMPLE", "Arn": "arn:aws:servicediscovery:us-west-2:123456789012:namespace/ns-EXAMPLE", "Name": "service-connect", "Type": "HTTP", "Properties": { "DnsProperties": { "SOA": {} }, "HttpProperties": { "HttpName": "service-connect" } }, "CreateDate": 1661749852.422, "CreatorRequestId": "service-connect" } }
Langkah 2: Buat layanan untuk server
Fitur Service Connect dimaksudkan untuk menghubungkan beberapa aplikasi di Amazon ECS. Setidaknya salah satu dari aplikasi tersebut perlu menyediakan layanan web untuk terhubung. Pada langkah ini, Anda membuat:
-
Definisi tugas yang menggunakan image kontainer NGINX resmi yang tidak dimodifikasi dan menyertakan konfigurasi Service Connect.
-
Definisi layanan Amazon ECS yang mengonfigurasi Service Connect untuk menyediakan layanan penemuan dan proxy mesh layanan untuk lalu lintas ke layanan ini. Konfigurasi menggunakan kembali namespace default dari konfigurasi cluster untuk mengurangi jumlah konfigurasi layanan yang Anda buat untuk setiap layanan.
-
Layanan Amazon ECS. Ini menjalankan satu tugas menggunakan definisi tugas, dan menyisipkan wadah tambahan untuk proxy Service Connect. Proxy mendengarkan port dari pemetaan port kontainer dari definisi tugas. Dalam aplikasi klien yang berjalan di Amazon ECS, proxy dalam tugas klien mendengarkan koneksi keluar ke nama port definisi tugas, nama penemuan layanan atau nama alias klien layanan, dan nomor port dari alias klien klien.
Untuk membuat layanan web dengan Service Connect
-
Daftarkan definisi tugas yang kompatibel dengan Fargate dan menggunakan mode
awsvpcjaringan. Ikuti langkah-langkah ini:-
Buat file yang diberi nama
service-connect-nginx.jsondengan isi definisi tugas berikut.Definisi tugas ini mengonfigurasi Service Connect dengan menambahkan
namedanappProtocolparameter ke pemetaan port. Nama port membuat port ini lebih dapat diidentifikasi dalam konfigurasi layanan ketika beberapa port digunakan. Nama port juga digunakan secara default sebagai nama yang dapat ditemukan untuk digunakan oleh aplikasi lain di namespace.Definisi tugas berisi peran IAM tugas karena layanan mengaktifkan ECS Exec.
penting
Definisi tugas ini menggunakan a
logConfigurationuntuk mengirim output nginx daristdoutdanstderrke Amazon CloudWatch Logs. Peran eksekusi tugas ini tidak memiliki izin tambahan yang diperlukan untuk membuat grup CloudWatch log Log. Buat grup log di CloudWatch Log menggunakan Konsol Manajemen AWS atau AWS CLI. Jika Anda tidak ingin mengirim log nginx ke CloudWatch Log, Anda dapat menghapus.logConfigurationGanti Akun AWS id dalam peran eksekusi tugas dengan Akun AWS id Anda.
{ "family": "service-connect-nginx", "executionRoleArn": "arn:aws:iam::123456789012:role/ecsTaskExecutionRole", "taskRoleArn": "arn:aws:iam::123456789012:role/ecsTaskRole", "networkMode": "awsvpc", "containerDefinitions": [ { "name": "webserver", "image": "public.ecr.aws/docker/library/nginx:latest", "cpu": 100, "portMappings": [ { "name": "nginx", "containerPort": 80, "protocol": "tcp", "appProtocol": "http" } ], "essential": true, "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/service-connect-nginx", "awslogs-region": "region", "awslogs-stream-prefix": "nginx" } } } ], "cpu": "256", "memory": "512" } -
Daftarkan definisi tugas menggunakan
service-connect-nginx.jsonfile:aws ecs register-task-definition --cli-input-json file://service-connect-nginx.json
-
-
Buat layanan:
-
Buat file yang diberi nama
service-connect-nginx-service.jsondengan konten layanan Amazon ECS yang Anda buat. Contoh ini menggunakan definisi tugas yang dibuat pada langkah sebelumnya.awsvpcConfigurationdiperlukan karena ketentuan tugas contoh menggunakan mode jaringanawsvpc.Saat Anda membuat layanan ECS, tentukan Fargate, dan versi
LATESTplatform yang mendukung Service Connect.securityGroupsDansubnetsharus milik VPC yang memiliki persyaratan untuk menggunakan Amazon ECS. Anda dapat memperoleh grup keamanan dan ID subnet dari Amazon VPC Console.Layanan ini mengonfigurasi Service Connect dengan menambahkan
serviceConnectConfigurationparameter. Namespace tidak diperlukan karena cluster memiliki namespace default yang dikonfigurasi. Aplikasi klien yang berjalan di ECS di namespace terhubung ke layanan ini dengan menggunakanportNamedan port di.clientAliasesMisalnya, layanan ini dapat dijangkau menggunakanhttp://nginx:80/, karena nginx menyediakan halaman selamat datang di lokasi root./Aplikasi eksternal yang tidak berjalan di Amazon ECS atau tidak berada di namespace yang sama dapat menjangkau aplikasi ini melalui proxy Service Connect dengan menggunakan alamat IP tugas dan nomor port dari definisi tugas. Untuktlskonfigurasi Anda, tambahkan sertifikatarnuntuk peran AndaawsPcaAuthorityArn, AndakmsKey, danroleArnperan IAM Anda.Layanan ini menggunakan a
logConfigurationuntuk mengirim output proxy koneksi layanan daristdoutdanstderrke Amazon CloudWatch Logs. Peran eksekusi tugas ini tidak memiliki izin tambahan yang diperlukan untuk membuat grup CloudWatch log Log. Buat grup log di CloudWatch Log menggunakan Konsol Manajemen AWS atau AWS CLI. Kami menyarankan Anda membuat grup log ini dan menyimpan log proxy di CloudWatch Log. Jika Anda tidak ingin mengirim log proxy ke CloudWatch Log, Anda dapat menghapuslogConfiguration.{ "cluster": "tutorial", "deploymentConfiguration": { "maximumPercent": 200, "minimumHealthyPercent": 0 }, "deploymentController": { "type": "ECS" }, "desiredCount": 1, "enableECSManagedTags": true, "enableExecuteCommand": true, "launchType": "FARGATE", "networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-EXAMPLE" ], "subnets": [ "subnet-EXAMPLE", "subnet-EXAMPLE", "subnet-EXAMPLE" ] } }, "platformVersion": "LATEST", "propagateTags": "SERVICE", "serviceName": "service-connect-nginx-service", "serviceConnectConfiguration": { "enabled": true, "services": [ { "portName": "nginx", "clientAliases": [ { "port": 80 } ], "tls": { "issuerCertificateAuthority": { "awsPcaAuthorityArn": "certificateArn" }, "kmsKey": "kmsKey", "roleArn": "iamRoleArn" } } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/service-connect-proxy", "awslogs-region": "region", "awslogs-stream-prefix": "service-connect-proxy" } } }, "taskDefinition": "service-connect-nginx" } -
Buat layanan menggunakan
service-connect-nginx-service.jsonfile:aws ecs create-service --cluster tutorial --cli-input-json file://service-connect-nginx-service.jsonOutput:
{ "service": { "serviceArn": "arn:aws:ecs:us-west-2:123456789012:service/tutorial/service-connect-nginx-service", "serviceName": "service-connect-nginx-service", "clusterArn": "arn:aws:ecs:us-west-2:123456789012:cluster/tutorial", "loadBalancers": [], "serviceRegistries": [], "status": "ACTIVE", "desiredCount": 1, "runningCount": 0, "pendingCount": 0, "launchType": "FARGATE", "platformVersion": "LATEST", "platformFamily": "Linux", "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/service-connect-nginx:1", "deploymentConfiguration": { "deploymentCircuitBreaker": { "enable": false, "rollback": false }, "maximumPercent": 200, "minimumHealthyPercent": 0 }, "deployments": [ { "id": "ecs-svc/3763308422771520962", "status": "PRIMARY", "taskDefinition": "arn:aws:ecs:us-west-2:123456789012:task-definition/service-connect-nginx:1", "desiredCount": 1, "pendingCount": 0, "runningCount": 0, "failedTasks": 0, "createdAt": 1661210032.602, "updatedAt": 1661210032.602, "launchType": "FARGATE", "platformVersion": "1.4.0", "platformFamily": "Linux", "networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-EXAMPLE" ], "subnets": [ "subnet-EXAMPLEf", "subnet-EXAMPLE", "subnet-EXAMPLE" ] } }, "rolloutState": "IN_PROGRESS", "rolloutStateReason": "ECS deployment ecs-svc/3763308422771520962 in progress.", "failedLaunchTaskCount": 0, "replacedTaskCount": 0, "serviceConnectConfiguration": { "enabled": true, "namespace": "service-connect", "services": [ { "portName": "nginx", "clientAliases": [ { "port": 80 } ] } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/service-connect-proxy", "awslogs-region": "us-west-2", "awslogs-stream-prefix": "service-connect-proxy" }, "secretOptions": [] } }, "serviceConnectResources": [ { "discoveryName": "nginx", "discoveryArn": "arn:aws:servicediscovery:us-west-2:123456789012:service/srv-EXAMPLE" } ] } ], "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS", "version": 0, "events": [], "createdAt": 1661210032.602, "placementConstraints": [], "placementStrategy": [], "networkConfiguration": { "awsvpcConfiguration": { "assignPublicIp": "ENABLED", "securityGroups": [ "sg-EXAMPLE" ], "subnets": [ "subnet-EXAMPLE", "subnet-EXAMPLE", "subnet-EXAMPLE" ] } }, "schedulingStrategy": "REPLICA", "enableECSManagedTags": true, "propagateTags": "SERVICE", "enableExecuteCommand": true } }
serviceConnectConfigurationYang Anda berikan muncul di dalam pener apan pertama output. Saat Anda membuat perubahan pada layanan ECS dengan cara yang perlu membuat perubahan pada tugas, penerapan baru dibuat oleh Amazon ECS.
-
Langkah 3: Pastikan Anda dapat terhubung
Untuk memverifikasi bahwa Service Connect dikonfigurasi dan berfungsi, ikuti langkah-langkah ini untuk menyambung ke layanan web dari aplikasi eksternal. Kemudian, lihat metrik tambahan CloudWatch dalam pembuatan proxy Service Connect.
Untuk menyambung ke layanan web dari aplikasi eksternal
-
Hubungkan ke alamat IP tugas dan port kontainer menggunakan alamat IP tugas
Gunakan AWS CLI untuk mendapatkan ID tugas, menggunakan
aws ecs list-tasks --cluster tutorial.Jika subnet dan grup keamanan Anda mengizinkan lalu lintas dari internet publik pada port dari definisi tugas, Anda dapat terhubung ke IP publik dari komputer Anda. Namun, IP publik tidak tersedia dari `describe-tasks`, jadi langkah-langkahnya melibatkan pergi ke Amazon EC2 Konsol Manajemen AWS atau AWS CLI untuk mendapatkan detail antarmuka jaringan elastis.
Dalam contoh ini, instans Amazon EC2 di VPC yang sama menggunakan IP pribadi tugas. Aplikasi ini nginx, tetapi
server: envoyheader menunjukkan bahwa proxy Service Connect digunakan. Proksi Service Connect mendengarkan port kontainer dari definisi tugas.$ curl -v 10.0.19.50:80/ * Trying 10.0.19.50:80... * Connected to 10.0.19.50 (10.0.19.50) port 80 (#0) > GET / HTTP/1.1 > Host: 10.0.19.50 > User-Agent: curl/7.79.1 > Accept: */* > * Mark bundle as not supporting multiuse < HTTP/1.1 200 OK < server: envoy < date: Tue, 23 Aug 2022 03:53:06 GMT < content-type: text/html < content-length: 612 < last-modified: Tue, 16 Apr 2019 13:08:19 GMT < etag: "5cb5d3c3-264" < accept-ranges: bytes < x-envoy-upstream-service-time: 0 < <!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> <style> body { width: 35em; margin: 0 auto; font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body> <h1>Welcome to nginx!</h1> <p>If you see this page, the nginx web server is successfully installed and working. Further configuration is required.</p> <p>For online documentation and support please refer to <a href="http://nginx.org/">nginx.org</a>.<br/> Commercial support is available at <a href="http://nginx.com/">nginx.com</a>.</p> <p><em>Thank you for using nginx.</em></p> </body> </html>
Untuk melihat metrik Service Connect
Proksi Service Connect membuat metrik aplikasi (HTTP, HTTP2, gRPC, atau koneksi TCP) dalam metrik. CloudWatch Saat Anda menggunakan CloudWatch konsol, lihat dimensi metrik tambahan DiscoveryName, (, DiscoveryName, ClusterName) ServiceName, dan (TargetDiscoveryName, TargetDiscoveryName ServiceName, ClusterName) di bawah namespace Amazon ECS. Untuk informasi selengkapnya tentang metrik dan dimensi ini, lihat Meli hat Metrik yang Tersedia di Panduan Pengguna Amazon CloudWatch Log.