Membuat sumber daya Amazon ECS dengan AWS CloudFormation - 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 sumber daya Amazon ECS dengan AWS CloudFormation

Amazon ECS terintegrasi dengan AWS CloudFormation, layanan yang dapat Anda gunakan untuk memodelkan dan menyiapkan AWS sumber daya dengan templat yang Anda tentukan. Dengan cara ini, Anda dapat menghabiskan lebih sedikit waktu untuk membuat dan mengelola sumber daya dan infrastruktur Anda. Dengan menggunakan AWS CloudFormation, Anda dapat membuat template yang menjelaskan semua AWS sumber daya yang Anda inginkan, seperti cluster Amazon ECS tertentu. Kemudian, AWS CloudFormation mengurus penyediaan dan konfigurasi sumber daya tersebut untuk Anda.

Bila Anda menggunakan AWS CloudFormation, Anda dapat menggunakan kembali template Anda untuk mengatur sumber daya Amazon ECS Anda secara konsisten dan berulang. Anda mendeskripsikan sumber daya Anda satu kali, dan kemudian menyediakan sumber daya yang sama lagi di beberapa Akun AWS dan Wilayah AWS.

Amazon ECS dan template AWS CloudFormation

Untuk menyediakan dan mengonfigurasi sumber daya untuk Amazon ECS dan layanan terkait, pastikan Anda terbiasa dengan AWS CloudFormation templat. AWS CloudFormation template adalah file teks dalam format JSON atau YAMB yang menjelaskan sumber daya yang ingin Anda sediakan di tumpukan Anda AWS CloudFormation . Jika Anda tidak terbiasa dengan format JSON atau YAMM, atau keduanya, Anda dapat menggunakan AWS CloudFormation Designer untuk mulai menggunakan template. AWS CloudFormation Untuk informasi lebih lanjut, lihat Apa itu AWS CloudFormation Desainer? dalam AWS CloudFormation User Guide.

Amazon ECS mendukung pembuatan kluster, definisi tugas, layanan, dan set tugas. AWS CloudFormation Contoh berikut menunjukkan cara membuat sumber daya dengan template ini menggunakan AWS CLI. Anda juga dapat membuat sumber daya ini menggunakan AWS CloudFormation konsol. Untuk informasi selengkapnya tentang cara membuat sumber daya menggunakan AWS CloudFormation konsol, lihat Panduan AWS CloudFormation Pengguna.

Contoh template

Membuat sumber daya Amazon ECS menggunakan tumpukan terpisah

Contoh berikut menunjukkan cara membuat resource Amazon ECS dengan menggunakan tumpukan terpisah untuk setiap sumber daya.

Definisi tugas Amazon ECS

Anda dapat menggunakan template berikut untuk membuat tugas Fargate Linux.

JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "ECSTaskDefinition": { "Type": "AWS::ECS::TaskDefinition", "Properties": { "ContainerDefinitions": [ { "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\"" ], "EntryPoint": [ "sh", "-c" ], "Essential": true, "Image": "httpd:2.4", "LogConfiguration": { "LogDriver": "awslogs", "Options": { "awslogs-group": "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "Name": "sample-fargate-app", "PortMappings": [ { "ContainerPort": 80, "HostPort": 80, "Protocol": "tcp" } ] } ], "Cpu": 256, "ExecutionRoleArn": "arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole", "Family": "task-definition-cfn", "Memory": 512, "NetworkMode": "awsvpc", "RequiresCompatibilities": [ "FARGATE" ], "RuntimePlatform": { "OperatingSystemFamily": "LINUX" } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Resources: ECSTaskDefinition: Type: 'AWS::ECS::TaskDefinition' Properties: ContainerDefinitions: - 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" EntryPoint: - sh - '-c' Essential: true Image: 'httpd:2.4' LogConfiguration: LogDriver: awslogs Options: awslogs-group: /ecs/fargate-task-definition awslogs-region: us-east-1 awslogs-stream-prefix: ecs Name: sample-fargate-app PortMappings: - ContainerPort: 80 HostPort: 80 Protocol: tcp Cpu: 256 ExecutionRoleArn: 'arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole' Family: task-definition-cfn Memory: 512 NetworkMode: awsvpc RequiresCompatibilities: - FARGATE RuntimePlatform: OperatingSystemFamily: LINUX

Klaster-klaster Amazon ECS

Anda dapat menggunakan template berikut untuk membuat cluster kosong.

JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "ECSCluster": { "Type": "AWS::ECS::Cluster", "Properties": { "ClusterName": "MyEmptyCluster" } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Resources: ECSCluster: Type: 'AWS::ECS::Cluster' Properties: ClusterName: MyEmptyCluster

Membuat beberapa sumber daya Amazon ECS dalam satu tumpukan

Anda dapat menggunakan contoh template berikut untuk membuat beberapa sumber daya Amazon ECS dalam satu tumpukan. Template membuat cluster Amazon ECS yang diberi CFNCluster nama. Cluster berisi definisi tugas Fargate Linux yang mengatur server web. Template juga membuat layanan yang diberi nama cfn-service yang meluncurkan dan mempertahankan tugas yang ditentukan oleh definisi tugas. Sebelum Anda menggunakan template ini, pastikan bahwa subnet dan ID grup keamanan dalam layanan NetworkConfiguration semuanya milik VPC yang sama dan bahwa grup keamanan memiliki aturan yang diperlukan. Untuk informasi selengkapnya tentang aturan grup keamanan, lihat Aturan grup keamanan di panduan pengguna Amazon VPC.

JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Resources": { "ECSCluster": { "Type": "AWS::ECS::Cluster", "Properties": { "ClusterName": "CFNCluster" } }, "ECSTaskDefinition": { "Type": "AWS::ECS::TaskDefinition", "Properties": { "ContainerDefinitions": [ { "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\"" ], "EntryPoint": [ "sh", "-c" ], "Essential": true, "Image": "httpd:2.4", "LogConfiguration": { "LogDriver": "awslogs", "Options": { "awslogs-group": "/ecs/fargate-task-definition", "awslogs-region": "us-east-1", "awslogs-stream-prefix": "ecs" } }, "Name": "sample-fargate-app", "PortMappings": [ { "ContainerPort": 80, "HostPort": 80, "Protocol": "tcp" } ] } ], "Cpu": 256, "ExecutionRoleArn": "arn:aws:iam::aws_account_id::role/ecsTaskExecutionRole", "Family": "task-definition-cfn", "Memory": 512, "NetworkMode": "awsvpc", "RequiresCompatibilities": [ "FARGATE" ], "RuntimePlatform": { "OperatingSystemFamily": "LINUX" } } }, "ECSService": { "Type": "AWS::ECS::Service", "Properties": { "ServiceName": "cfn-service", "Cluster": { "Ref": "ECSCluster" }, "DesiredCount": 1, "LaunchType": "FARGATE", "NetworkConfiguration": { "AwsvpcConfiguration": { "AssignPublicIp": "ENABLED", "SecurityGroups": [ "sg-abcdef01234567890" ], "Subnets": [ "subnet-abcdef01234567890" ] } }, "TaskDefinition": { "Ref": "ECSTaskDefinition" } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Resources: ECSCluster: Type: 'AWS::ECS::Cluster' Properties: ClusterName: CFNCluster ECSTaskDefinition: Type: 'AWS::ECS::TaskDefinition' Properties: ContainerDefinitions: - 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" EntryPoint: - sh - '-c' Essential: true Image: 'httpd:2.4' LogConfiguration: LogDriver: awslogs Options: awslogs-group: /ecs/fargate-task-definition awslogs-region: us-east-1 awslogs-stream-prefix: ecs Name: sample-fargate-app PortMappings: - ContainerPort: 80 HostPort: 80 Protocol: tcp Cpu: 256 ExecutionRoleArn: 'arn:aws:iam::aws_account_id:role/ecsTaskExecutionRole' Family: task-definition-cfn Memory: 512 NetworkMode: awsvpc RequiresCompatibilities: - FARGATE RuntimePlatform: OperatingSystemFamily: LINUX ECSService: Type: 'AWS::ECS::Service' Properties: ServiceName: cfn-service Cluster: !Ref ECSCluster DesiredCount: 1 LaunchType: FARGATE NetworkConfiguration: AwsvpcConfiguration: AssignPublicIp: ENABLED SecurityGroups: - sg-abcdef01234567890 Subnets: - subnet-abcdef01234567890 TaskDefinition: !Ref ECSTaskDefinition

Menggunakan AWS CLI untuk membuat sumber daya dari template

Perintah berikut membuat tumpukan yang diberi nama ecs-stack menggunakan file body template yang diberi namaecs-template-body.json. Pastikan bahwa file body template dalam format JSON atau YAMG. Lokasi file ditentukan dalam --template-body parameter. Dalam hal ini, file body template terletak di direktori saat ini.

aws cloudformation create-stack \ --stack-name ecs-stack \ --template-body file://ecs-template-body.json

Untuk memastikan bahwa sumber daya dibuat dengan benar, periksa konsol Amazon ECS atau gunakan perintah berikut:

  • Perintah berikut mencantumkan semua definisi tugas.

    aws ecs list-task-definitions
  • Perintah berikut mencantumkan semua cluster.

    aws ecs list-clusters
  • Perintah berikut mencantumkan semua layanan yang didefinisikan dalam clusterCFNCluster. Ganti CFNCluster dengan nama cluster tempat Anda ingin membuat layanan.

    aws ecs list-services \ --cluster CFNCluster

Pelajari lebih lanjut tentang AWS CloudFormation

Untuk mempelajari selengkapnya AWS CloudFormation, lihat sumber daya berikut: