Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Membuat tugas Amazon ECS untuk jenis EC2 peluncuran dengan AWS CLI
Langkah-langkah berikut membantu Anda menyiapkan klaster, mendaftarkan definisi tugas, menjalankan tugas, dan melakukan skenario umum lainnya di Amazon ECS dengan. AWS CLI Gunakan versi terbaru dari AWS CLI. Untuk informasi selengkapnya tentang cara meningkatkan ke versi terbaru, lihat Menginstal atau memperbarui ke versi terbaru 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.
Topik
Prasyarat
Tutorial ini mengasumsikan bahwa prasyarat berikut telah diselesaikan:
-
Versi terbaru diinstal dan dikonfigurasi. AWS CLI Untuk informasi selengkapnya tentang menginstal atau memutakhirkan AWS CLI, lihat Menginstal atau memperbarui ke versi terbaru. AWS CLI
-
Langkah-langkah di Siapkan untuk menggunakan Amazon ECS telah diselesaikan.
-
Pengguna IAM Anda memiliki izin yang diperlukan yang ditentukan dalam contoh kebijakan Amazonecs_ FullAccess IAM.
-
Anda memiliki peran IAM instance container yang dibuat untuk digunakan. Untuk informasi lebih lanjut, lihat. Peran IAM instans wadah Amazon ECS
-
Anda memiliki VPC yang dibuat untuk digunakan. Untuk informasi selengkapnya, lihat Buat virtual private cloud.
-
(Opsional) AWS CloudShell adalah alat yang memberi pelanggan baris perintah tanpa perlu membuat EC2 instance mereka sendiri. Untuk informasi lebih lanjut, lihat Apa itu AWS CloudShell? dalam AWS CloudShell User Guide.
Membuat klaster
Secara default, akun Anda menerima klaster default
ketika Anda meluncurkan instans kontainer pertama Anda.
catatan
Manfaat menggunakan klaster default
yang disediakan untuk Anda adalah Anda tidak perlu menentukan opsi --cluster
dalam perintah berikutnya. Jika Anda membuat klaster non-default sendiri, Anda harus menentukan cluster_name
--cluster
untuk setiap perintah yang ingin Anda gunakan dengan klaster itu.cluster_name
Buat klaster Anda sendiri dengan nama yang unik menggunakan perintah berikut:
aws ecs create-cluster --cluster-name
MyCluster
Output:
{
"cluster": {
"clusterName": "MyCluster",
"status": "ACTIVE",
"clusterArn": "arn:aws:ecs:region
:aws_account_id
:cluster/MyCluster"
}
}
Luncurkan instance kontainer dengan Amazon ECS AMI
Instance kontainer adalah EC2 instance yang menjalankan agen penampung Amazon ECS dan telah terdaftar ke dalam klaster. Di bagian ini, Anda akan meluncurkan EC2 instance menggunakan AMI yang dioptimalkan ECS.
Untuk meluncurkan instance kontainer dengan AWS CLI
-
Ambil ID AMI Amazon Linux 2 terbaru yang dioptimalkan ECS untuk Wilayah AWS Anda menggunakan perintah berikut. Perintah ini menggunakan AWS Systems Manager Parameter Store untuk mendapatkan ID AMI terbaru yang dioptimalkan ECS. AMI mencakup agen kontainer Amazon ECS dan runtime Docker yang sudah diinstal sebelumnya.
aws ssm get-parameters --names /aws/service/ecs/optimized-ami/amazon-linux-2/recommended --query 'Parameters[0].Value' --output text | jq -r '.image_id'
Output:
ami-abcd1234
-
Buat grup keamanan yang memungkinkan akses SSH untuk mengelola instance container Anda dan akses HTTP untuk server web.
aws ec2 create-security-group --group-name
ecs-tutorial-sg
--description "ECS tutorial security group"Output:
{ "GroupId": "sg-abcd1234" }
-
Tambahkan aturan masuk ke grup keamanan dengan menjalankan perintah berikut.
aws ec2 authorize-security-group-ingress --group-id
sg-abcd1234
--protocol tcp --port 80 --cidr 0.0.0.0/0Output:
{ "Return": true, "SecurityGroupRules": [ { "SecurityGroupRuleId": "sgr-efgh5678", "GroupId": "sg-abcd1234", "GroupOwnerId": "123456789012", "IsEgress": false, "IpProtocol": "tcp", "FromPort": 80, "ToPort": 80, "CidrIpv4": "0.0.0.0/0" } ] }
Grup keamanan sekarang memungkinkan akses SSH dari rentang IP yang ditentukan dan akses HTTP dari mana saja. Dalam lingkungan produksi, Anda harus membatasi akses SSH ke alamat IP spesifik Anda dan mempertimbangkan untuk membatasi akses HTTP sesuai kebutuhan.
-
Buat EC2 key pair untuk akses SSH ke instance container Anda.
aws ec2 create-key-pair --key-name
ecs-tutorial-key
--query 'KeyMaterial' --output text > ecs-tutorial-key.pem chmod 400 ecs-tutorial-key.pemKunci pribadi disimpan ke mesin lokal Anda dengan izin yang sesuai untuk akses SSH.
-
Luncurkan EC2 instance menggunakan AMI yang dioptimalkan ECS dan konfigurasikan untuk bergabung dengan cluster Anda.
aws ec2 run-instances --image-id
ami-abcd1234
--instance-typet3.micro
--key-nameecs-tutorial-key
--security-group-idssg-abcd1234
--iam-instance-profile Name=ecsInstanceRole --user-data '#!/bin/bash echo ECS_CLUSTER=MyCluster >> /etc/ecs/ecs.config' { "Instances": [ { "InstanceId": "i-abcd1234", "ImageId": "ami-abcd1234", "State": { "Code": 0, "Name": "pending" }, "PrivateDnsName": "", "PublicDnsName": "", "StateReason": { "Code": "pending", "Message": "pending" }, "InstanceType": "t3.micro", "KeyName": "ecs-tutorial-key", "LaunchTime": "2025-01-13T10:30:00.000Z" } ] }Skrip data pengguna mengonfigurasi agen Amazon ECS untuk mendaftarkan instans ke instans Anda.
MyCluster
Instance menggunakan peranecsInstanceRole
IAM, yang memberikan izin yang diperlukan untuk agen.
Daftar contoh kontainer
Dalam beberapa menit setelah meluncurkan instans penampung Anda, agen Amazon ECS mendaftarkan instans dengan klaster Anda MyCluster . Anda dapat membuat daftar instans kontainer dalam klaster dengan menjalankan perintah berikut:
aws ecs list-container-instances --cluster
MyCluster
Output:
{
"containerInstanceArns": [
"arn:aws:ecs:us-east-1:aws_account_id
:container-instance/container_instance_ID
"
]
}
Jelaskan contoh kontainer Anda
Setelah Anda memiliki ARN atau ID instans kontainer, Anda dapat menggunakan perintah describe-container-instances untuk mendapatkan informasi berharga terkait instans, seperti sumber daya CPU dan memori yang tersisa dan terdaftar.
aws ecs describe-container-instances --cluster
MyCluster
--container-instancescontainer_instance_ID
Output:
{
"failures": [],
"containerInstances": [
{
"status": "ACTIVE",
"registeredResources": [
{
"integerValue": 1024,
"longValue": 0,
"type": "INTEGER",
"name": "CPU",
"doubleValue": 0.0
},
{
"integerValue": 995,
"longValue": 0,
"type": "INTEGER",
"name": "MEMORY",
"doubleValue": 0.0
},
{
"name": "PORTS",
"longValue": 0,
"doubleValue": 0.0,
"stringSetValue": [
"22",
"2376",
"2375",
"51678"
],
"type": "STRINGSET",
"integerValue": 0
},
{
"name": "PORTS_UDP",
"longValue": 0,
"doubleValue": 0.0,
"stringSetValue": [],
"type": "STRINGSET",
"integerValue": 0
}
],
"ec2InstanceId": "instance_id
",
"agentConnected": true,
"containerInstanceArn": "arn:aws:ecs:us-west-2:aws_account_id
:container-instance/container_instance_ID
",
"pendingTasksCount": 0,
"remainingResources": [
{
"integerValue": 1024,
"longValue": 0,
"type": "INTEGER",
"name": "CPU",
"doubleValue": 0.0
},
{
"integerValue": 995,
"longValue": 0,
"type": "INTEGER",
"name": "MEMORY",
"doubleValue": 0.0
},
{
"name": "PORTS",
"longValue": 0,
"doubleValue": 0.0,
"stringSetValue": [
"22",
"2376",
"2375",
"51678"
],
"type": "STRINGSET",
"integerValue": 0
},
{
"name": "PORTS_UDP",
"longValue": 0,
"doubleValue": 0.0,
"stringSetValue": [],
"type": "STRINGSET",
"integerValue": 0
}
],
"runningTasksCount": 0,
"attributes": [
{
"name": "com.amazonaws.ecs.capability.privileged-container"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.17"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.18"
},
{
"name": "com.amazonaws.ecs.capability.docker-remote-api.1.19"
},
{
"name": "com.amazonaws.ecs.capability.logging-driver.json-file"
},
{
"name": "com.amazonaws.ecs.capability.logging-driver.syslog"
}
],
"versionInfo": {
"agentVersion": "1.5.0",
"agentHash": "b197edd",
"dockerVersion": "DockerVersion: 1.7.1"
}
}
]
}
Anda juga dapat menemukan ID EC2 instans Amazon yang dapat Anda gunakan untuk memantau instance di EC2 konsol Amazon atau dengan aws ec2 describe-instances --instance-id
instance_id
perintah.
Daftarkan definisi tugas
Sebelum Anda dapat menjalankan tugas di cluster Amazon ECS Anda, Anda harus mendaftarkan definisi tugas. Ketentuan tugas adalah daftar kontainer yang dikelompokkan bersama. Contoh berikut adalah definisi tugas sederhana yang menggunakan nginx
gambar. Untuk informasi selengkapnya tentang parameter ketentuan tugas yang tersedia, lihat Definisi tugas Amazon ECS.
{ "family": "nginx-task", "containerDefinitions": [ { "name": "nginx", "image": "public.ecr.aws/ecs-sample-image/amazon-ecs-sample:latest", "cpu": 256, "memory": 512, "essential": true, "portMappings": [ { "containerPort": 80, "hostPort": 80, "protocol": "tcp" } ] } ], "requiresCompatibilities": ["EC2"], "networkMode": "bridge" }
Contoh di atas JSON dapat diteruskan ke AWS CLI dalam dua cara: Anda dapat menyimpan definisi tugas JSON sebagai file dan meneruskannya dengan opsi.
Atau, Anda dapat menghindari tanda kutip di JSON dan meneruskan definisi wadah JSON pada baris perintah. Jika Anda memilih untuk meneruskan ketentuan kontainer pada baris perintah, maka perintah Anda juga memerlukan parameter --cli-input-json
file://path_to_file.json
--family
yang digunakan untuk menjaga beberapa versi ketentuan tugas Anda yang terkait satu sama lain.
Untuk menggunakan file JSON untuk ketentuan kontainer:
aws ecs register-task-definition --cli-input-json
file://$HOME/tasks/nginx.json
register-task-definition mengembalikan deskripsi ketentuan tugas setelah menyelesaikan pendaftarannya.
{
"taskDefinition": {
"taskDefinitionArn": "arn:aws:ecs:us-east-1:123456789012:task-definition/nginx-task:1",
"family": "nginx-task",
"revision": 1,
"status": "ACTIVE",
"containerDefinitions": [
{
"name": "nginx",
"image": "public.ecr.aws/docker/library/nginx:latest",
"cpu": 256,
"memory": 512,
"essential": true,
"portMappings": [
{
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp"
}
],
"environment": [],
"mountPoints": [],
"volumesFrom": []
}
],
"volumes": [],
"networkMode": "bridge",
"compatibilities": [
"EC2"
],
"requiresCompatibilities": [
"EC2"
]
}
}
Daftar definisi tugas
Anda dapat membuat daftar ketentuan tugas untuk akun Anda kapan pun dengan perintah list-task-definitions. Output dari perintah ini menunjukkan revision
nilai family
dan yang dapat Anda gunakan bersama saat memanggilcreate-service.
aws ecs list-task-definitions
Output:
{
"taskDefinitionArns": [
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/sleep360:1",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/sleep360:2",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/nginx-task:1",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/wordpress:3",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/wordpress:4",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/wordpress:5",
"arn:aws:ec2:us-east-1:aws_account_id
:task-definition/wordpress:6"
]
}
Membuat layanan
Setelah mendaftarkan tugas untuk akun dan meluncurkan instans penampung yang terdaftar ke klaster, Anda dapat membuat layanan Amazon ECS yang menjalankan dan mengelola sejumlah tugas yang diinginkan secara bersamaan menggunakan definisi tugas yang Anda daftarkan. Untuk contoh ini, Anda menempatkan satu instance definisi nginx:1
tugas di MyCluster cluster Anda.
aws ecs create-service --cluster
MyCluster
--service-namenginx-service
--task-definitionnginx-task:1
--desired-count1
Output:
{
"service": {
"serviceArn": "arn:aws:ecs:us-east-1:aws_account_id
:service/MyCluster/nginx-service",
"serviceName": "nginx-service",
"clusterArn": "arn:aws:ecs:us-east-1:aws_account_id
:cluster/MyCluster",
"taskDefinition": "arn:aws:ecs:us-east-1:aws_account_id
:task-definition/nginx-task:1",
"desiredCount": 1,
"runningCount": 0,
"pendingCount": 0,
"launchType": "EC2",
"status": "ACTIVE",
"createdAt": "2025-01-13T10:45:00.000Z"
}
}
Daftar layanan
Cantumkan layanan untuk klaster Anda. Anda seharusnya dapat melihat layanan yang Anda buat di bagian sebelumnya. Anda dapat mencatat ID layanan atau ARN lengkap yang dikembalikan dari perintah ini dan menggunakannya untuk menggambarkan layanan nanti.
aws ecs list-services --cluster
MyCluster
Output:
{
"taskArns": [
"arn:aws:ecs:us-east-1:aws_account_id
:task/task_ID
"
]
}
Jelaskan layanannya
Jelaskan layanan menggunakan perintah berikut untuk mendapatkan informasi lebih lanjut tentang layanan ini.
aws ecs describe-services --cluster
MyCluster
--servicesnginx-service
Output:
{
"services": [
{
"serviceArn": "arn:aws:ecs:us-east-1:aws_account_id
:service/MyCluster/nginx-service",
"serviceName": "nginx-service",
"clusterArn": "arn:aws:ecs:us-east-1:aws_account_id
:cluster/MyCluster",
"taskDefinition": "arn:aws:ecs:us-east-1:aws_account_id
:task-definition/nginx-task:1",
"desiredCount": 1,
"runningCount": 1,
"pendingCount": 0,
"launchType": "EC2",
"status": "ACTIVE",
"createdAt": "2025-01-13T10:45:00.000Z",
"events": [
{
"id": "abcd1234-5678-90ab-cdef-1234567890ab",
"createdAt": "2025-01-13T10:45:30.000Z",
"message": "(service nginx-service) has started 1 tasks: (task abcd1234-5678-90ab-cdef-1234567890ab)."
}
]
}
]
}
Jelaskan tugas yang sedang berjalan
Setelah menjelaskan layanan, jalankan perintah berikut untuk mendapatkan informasi lebih lanjut tentang tugas yang berjalan sebagai bagian dari layanan Anda.
aws ecs list-tasks --cluster
MyCluster
--service-namenginx-service
Output:
{
"tasks": [
{
"taskArn": "arn:aws:ecs:us-east-1:aws_account_id
:task/MyCluster/abcd1234-5678-90ab-cdef-1234567890ab",
"clusterArn": "arn:aws:ecs:us-east-1:aws_account_id
:cluster/MyCluster",
"taskDefinitionArn": "arn:aws:ecs:us-east-1:aws_account_id
:task-definition/nginx-task:1",
"containerInstanceArn": "arn:aws:ecs:us-east-1:aws_account_id
:container-instance/MyCluster/abcd1234-5678-90ab-cdef-1234567890ab",
"lastStatus": "RUNNING",
"desiredStatus": "RUNNING",
"containers": [
{
"containerArn": "arn:aws:ecs:us-east-1:aws_account_id
:container/MyCluster/abcd1234-5678-90ab-cdef-1234567890ab/abcd1234-5678-90ab-cdef-1234567890ab",
"taskArn": "arn:aws:ecs:us-east-1:aws_account_id
:task/MyCluster/abcd1234-5678-90ab-cdef-1234567890ab",
"name": "nginx",
"lastStatus": "RUNNING",
"networkBindings": [
{
"bindIP": "0.0.0.0",
"containerPort": 80,
"hostPort": 80,
"protocol": "tcp"
}
]
}
],
"createdAt": "2025-01-13T10:45:00.000Z",
"startedAt": "2025-01-13T10:45:30.000Z"
}
]
}
Uji server web
Untuk menguji server web
-
Ambil alamat IP publik instance container Anda dengan menjalankan perintah berikut.
aws ec2 describe-instances --instance-ids
i-abcd1234
--query 'Reservations[0].Instances[0].PublicIpAddress' --output textOutput:
203.0.113.25
-
Setelah mengambil alamat IP, jalankan
curl
perintah berikut dengan alamat IP.curl http://203.0.113.25
Output:
<!DOCTYPE html> <html> <head> <title>Welcome to nginx!</title> ... </head> <body> <h1>Welcome to nginx!</h1> <p>If you can see this page, the nginx web server is successfully installed and working.</p> ... </body> </html>
Halaman selamat datang nginx mengonfirmasi bahwa layanan Anda berjalan dengan sukses dan dapat diakses dari internet.
Pembersihan sumber daya
Untuk menghindari biaya yang timbul, bersihkan sumber daya yang Anda buat dalam tutorial ini.
Untuk membersihkan sumber daya
-
Perbarui layanan agar tidak memiliki tugas yang diinginkan, lalu hapus layanan.
aws ecs update-service --cluster
MyCluster
--servicenginx-service
--desired-count 0 { "service": { "serviceArn": "arn:aws:ecs:us-east-1:123456789012:service/MyCluster/nginx-service", "serviceName": "nginx-service", "desiredCount": 0, "runningCount": 1, "pendingCount": 0, "status": "ACTIVE" } } -
Tunggu tugas yang berjalan berhenti, lalu hapus layanan.
aws ecs delete-service --cluster
MyCluster
--servicenginx-service
{ "service": { "serviceArn": "arn:aws:ecs:us-east-1:123456789012:service/MyCluster/nginx-service", "serviceName": "nginx-service", "status": "DRAINING" } } -
Hentikan instance kontainer yang Anda buat.
aws ec2 terminate-instances --instance-ids
i-abcd1234
{ "TerminatingInstances": [ { "InstanceId": "i-abcd1234", "CurrentState": { "Code": 32, "Name": "shutting-down" }, "PreviousState": { "Code": 16, "Name": "running" } } ] } -
Bersihkan grup keamanan dan key pair yang Anda buat.
aws ec2 delete-security-group --group-id
sg-abcd1234
aws ec2 delete-key-pair --key-nameecs-tutorial-key
rmecs-tutorial-key.pem
-
Hapus cluster Amazon ECS.
aws ecs delete-cluster --cluster
MyCluster
{ "cluster": { "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/MyCluster", "clusterName": "MyCluster", "status": "INACTIVE" } }