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, SDKs dan Amazon ECS API melalui keduanya dan. IPv4 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 Menginstal 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
ecsTaskExecutionRole
dan kebijakanAmazonECSTaskExecutionRolePolicy
terkelola dilampirkan ke peran. Peran ini memungkinkan Fargate untuk 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 dan namespace Amazon ECS AWS Cloud Map
-
Buat klaster Amazon ECS bernama
tutorial
untuk digunakan. Parameter--service-connect-defaults
menetapkan namespace default cluster. Dalam contoh keluaran, AWS Cloud Map namespace namaservice-connect
tidak 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-name
tutorial
--service-connect-defaults namespace=service-connect
Output:
{ "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 tutorial
Output:
{ "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 AWS Management Console atau AWS CLI konfigurasi normal saat ini dibuat AWS Cloud Map.
Misalnya, gunakan AWS CLI:
aws servicediscovery get-namespace --id
ns-EXAMPLE
Output:
{ "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 ditujukan 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 penemuan layanan 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.
Untuk membuat layanan web dengan Service Connect
-
Daftarkan definisi tugas yang kompatibel dengan Fargate dan gunakan mode
awsvpc
jaringan. Ikuti langkah-langkah ini:-
Buat file yang diberi nama
service-connect-nginx.json
dengan isi definisi tugas berikut.Definisi tugas ini mengonfigurasi Service Connect dengan menambahkan
name
danappProtocol
parameter 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
logConfiguration
untuk mengirim output nginx daristdout
danstderr
ke Amazon Logs. CloudWatch Peran eksekusi tugas ini tidak memiliki izin tambahan yang diperlukan untuk membuat grup CloudWatch log Log. Buat grup log di CloudWatch Log menggunakan AWS Management Console or AWS CLI. Jika Anda tidak ingin mengirim log nginx ke Log, Anda CloudWatch dapat menghapus file.logConfiguration
Ganti 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.json
file:aws ecs register-task-definition --cli-input-json file://service-connect-nginx.json
-
-
Buat layanan:
-
Buat file yang diberi nama
service-connect-nginx-service.json
dengan konten layanan Amazon ECS yang Anda buat. Contoh ini menggunakan definisi tugas yang dibuat pada langkah sebelumnya.awsvpcConfiguration
diperlukan karena ketentuan tugas contoh menggunakan mode jaringanawsvpc
.Saat Anda membuat layanan ECS, tentukan jenis peluncuran Fargate, dan versi platform
LATEST
yang mendukung Service Connect. ItusecurityGroups
dansubnets
harus milik VPC yang memiliki persyaratan untuk menggunakan Amazon ECS. Anda dapat memperoleh grup keamanan dan subnet IDs dari Konsol VPC Amazon.Layanan ini mengkonfigurasi Service Connect dengan menambahkan
serviceConnectConfiguration
parameter. Namespace tidak diperlukan karena cluster memiliki namespace default yang dikonfigurasi. Aplikasi klien yang berjalan di ECS di namespace terhubung ke layanan ini dengan menggunakanportName
dan port di.clientAliases
Misalnya, 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. Untuktls
konfigurasi Anda, tambahkan sertifikatarn
untuk peran IAM AndaawsPcaAuthorityArn
kmsKey
, Anda, danroleArn
Anda.Layanan ini menggunakan a
logConfiguration
untuk mengirim layanan menghubungkan output proxy daristdout
danstderr
ke 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 AWS Management Console or 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.json
file:aws ecs create-service --cluster tutorial --cli-input-json file://service-connect-nginx-service.json
Output:
{ "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 } }
serviceConnectConfiguration
Yang Anda berikan muncul di dalam penyebaran pertama output. Saat Anda membuat perubahan pada layanan ECS dengan cara yang perlu melakukan perubahan pada tugas, penerapan baru dibuat oleh Amazon ECS.
-
Langkah 3: Verifikasi bahwa Anda dapat terhubung
Untuk memverifikasi bahwa Service Connect dikonfigurasi dan berfungsi, ikuti langkah-langkah berikut untuk menyambung ke layanan web dari aplikasi eksternal. Kemudian, lihat metrik tambahan dalam CloudWatch proxy Service Connect yang dibuat.
Untuk terhubung ke layanan web dari aplikasi eksternal
-
Connect ke alamat IP tugas dan port kontainer menggunakan alamat IP tugas
Gunakan AWS CLI untuk mendapatkan ID tugas, menggunakan file
aws ecs list-tasks --cluster tutorial
.Jika subnet dan grup keamanan Anda mengizinkan lalu lintas dari internet publik di port dari definisi tugas, Anda dapat terhubung ke IP publik dari komputer Anda. IP publik tidak tersedia dari `describe-tasks`, jadi langkah-langkahnya melibatkan pergi ke Amazon EC2 AWS Management Console atau AWS CLI untuk mendapatkan detail dari elastic network interface.
Dalam contoh ini, EC2 instance Amazon di VPC yang sama menggunakan IP pribadi tugas tersebut. Aplikasi ini nginx, tetapi
server: envoy
header menunjukkan bahwa proxy Service Connect digunakan. Proxy Service Connect mendengarkan pada 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
Proxy 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 Melihat Metrik yang Tersedia di Panduan Pengguna CloudWatch Log Amazon.