Criar recursos do Amazon ECS com o AWS CloudFormation - Amazon Elastic Container Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Criar recursos do Amazon ECS com o AWS CloudFormation

O Amazon ECS é integrado ao AWS CloudFormation, um serviço que pode ser usado para modelar e configurar recursos da AWS com modelos definidos por você. Dessa forma, você pode passar menos tempo criando e gerenciando recursos e infraestrutura. Com o AWS CloudFormation, é possível criar um modelo para descrever todos os recursos da AWS que você deseja, como clusters específicos do Amazon ECS. Em seguida, o AWS CloudFormation se encarrega de provisionar e configurar esses recursos para você.

Quando o AWS CloudFormation é usado, é possível reutilizar o modelo para configurar os recursos do Amazon ECS repetidamente e de forma consistente. Você descreve seus recursos uma vez e, em seguida, provisiona os mesmos recursos novamente em várias Contas da AWS e Regiões da AWS.

Modelos do Amazon ECS e do AWS CloudFormation

Para provisionar e configurar recursos para o Amazon ECS e serviços relacionados, certifique-se de estar familiarizado com os modelos do AWS CloudFormation. Os modelos do AWS CloudFormation são arquivos de texto no formato JSON ou YAML que descrevem os recursos que você deseja provisionar nas pilhas do AWS CloudFormation. Se não estiver familiarizado com os formatos JSON, YAML ou ambos, poderá usar o AWS CloudFormation Designer para começar usando modelos do AWS CloudFormation. Para obter mais informações, consulte O que é o AWS CloudFormation Designer? no Manual do usuário da AWS CloudFormation.

O Amazon ECS é compatível com a criação de clusters, definições de tarefa, serviços e conjuntos de tarefas no AWS CloudFormation. Os exemplos a seguir demonstram como criar recursos com esses modelos usando a AWS CLI. Também é possível criar e gerenciar esses recursos usando o console do AWS CloudFormation. Para obter mais informações sobre como criar recursos usando o console do AWS CloudFormation, consulte o Guia do usuário do AWS CloudFormation.

Exemplos de modelos

Criar recursos do Amazon ECS usando pilhas separadas

Os exemplos a seguir mostram como criar recursos do Amazon ECS usando pilhas separadas para cada recurso.

Definições de tarefa do Amazon ECS

O modelo a seguir pode ser usado para criar uma tarefa do 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

Clusters do Amazon ECS

O modelo a seguir pode ser usado para criar um cluster vazio.

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

Criar vários recursos do Amazon ECS em uma pilha

O modelo de exemplo a seguir pode ser usado para criar vários recursos do Amazon ECS em uma pilha. O modelo cria um cluster do Amazon ECS chamado CFNCluster. O cluster contém uma definição de tarefa do Linux Fargate que configura um servidor da Web. O modelo também cria um serviço denominado cfn-service que inicia e mantém a tarefa definida pela definição de tarefa. Antes de usar esse modelo, verifique se os IDs da sub-rede e do grupo de segurança em NetworkConfiguration do serviço pertencem todos à mesma VPC e se o grupo de segurança possui as regras necessárias. Para obter mais informações sobre regras de grupos de segurança, consulte Regras de grupos de segurança no Guia do usuário da 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

Usar o AWS CLI para criar recursos baseados em modelos

O comando a seguir cria uma pilha chamada ecs-stack usando um arquivo de corpo de modelo chamado ecs-template-body.json. Verifique se o arquivo de corpo do modelo está no formato JSON ou YAML. A localização do arquivo é especificada no parâmetro --template-body. Neste caso, o arquivo de corpo do modelo está localizado no diretório atual.

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

Para garantir que os recursos sejam criados corretamente, verifique o console do Amazon ECS ou, como alternativa, use os seguintes comandos:

  • O comando a seguir lista todas as definições de tarefa.

    aws ecs list-task-definitions
  • O comando a seguir lista todos os clusters.

    aws ecs list-clusters
  • O comando a seguir lista todos os serviços definidos no cluster CFNCluster. Substitua CFNCluster pelo nome do cluster em que deseja criar o serviço.

    aws ecs list-services \ --cluster CFNCluster

Saiba mais sobre a AWS CloudFormation

Para saber mais sobre a AWS CloudFormation, consulte os seguintes recursos: