Criar recursos do Amazon ECS usando o console do AWS CloudFormation
Uma forma de usar o Amazon ECS com o AWS CloudFormation é por meio do AWS Management Console. Aqui você pode criar suas pilhas do AWS CloudFormation para componentes do Amazon ECS, como definições de tarefas, clusters e serviços, e implantá-los diretamente via console. O tutorial a seguir mostra como usar o console do AWS CloudFormation para criar um serviço, uma definição de tarefa e um cluster do Amazon ECS.
Pré-requisitos
Esse tutorial pressupõe que os pré-requisitos a seguir foram concluídos.
-
As etapas em Configuração para usar o Amazon ECS foram concluídas.
-
O usuário do IAM tem as permissões necessárias especificadas no exemplo de política do IAM de AmazonECS_FullAccess.
Etapa 1: criar um modelo de pilha
Use as etapas a seguir para criar um modelo de pilha do AWS CloudFormation para um serviço e outros recursos relacionados do Amazon ECS.
-
Usando um editor de texto qualquer, crie um arquivo chamado
ecs-tutorial-template.yaml
. -
No arquivo
ecs-tutorial-template.yaml
, cole o modelo a seguir e salve as alterações.AWSTemplateFormatVersion: 2010-09-09 Description: A template that deploys an application that is built on an Apache web server Docker image by creating an Amazon ECS cluster, task definition, and service. The template also creates networking and logging resources, and an Amazon ECS task execution role. Parameters: ClusterName: Type: String Default: CFNCluster Description: Name of the ECS Cluster TaskFamily: Type: String Default: task-definition-cfn Description: Family name for the Task Definition ServiceName: Type: String Default: cfn-service Description: Name of the ECS Service ContainerImage: Type: String Default: public.ecr.aws/docker/library/httpd:2.4 Description: Container image to use for the task TaskCpu: Type: Number Default: 256 AllowedValues: [256, 512, 1024, 2048, 4096] Description: CPU units for the task TaskMemory: Type: Number Default: 512 AllowedValues: [512, 1024, 2048, 4096, 8192, 16384] Description: Memory (in MiB) for the task DesiredCount: Type: Number Default: 1 Description: Desired number of tasks to run LogGroupName: Type: String Default: /ecs/fargate-task-definition Description: CloudWatch Log Group name VpcCidr: Type: String Default: 10.0.0.0/16 Description: CIDR block for the VPC PublicSubnet1Cidr: Type: String Default: 10.0.0.0/24 Description: CIDR block for public subnet 1 PublicSubnet2Cidr: Type: String Default: 10.0.1.0/24 Description: CIDR block for public subnet 2 Resources: # VPC and Networking Resources VPC: Type: AWS::EC2::VPC Properties: CidrBlock: !Ref VpcCidr EnableDnsSupport: true EnableDnsHostnames: true Tags: - Key: Name Value: !Sub ${AWS::StackName}-VPC InternetGateway: Type: AWS::EC2::InternetGateway Properties: Tags: - Key: Name Value: !Sub ${AWS::StackName}-IGW InternetGatewayAttachment: Type: AWS::EC2::VPCGatewayAttachment Properties: InternetGatewayId: !Ref InternetGateway VpcId: !Ref VPC PublicSubnet1: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC AvailabilityZone: !Select [0, !GetAZs ''] CidrBlock: !Ref PublicSubnet1Cidr MapPublicIpOnLaunch: true Tags: - Key: Name Value: !Sub ${AWS::StackName}-PublicSubnet1 PublicSubnet2: Type: AWS::EC2::Subnet Properties: VpcId: !Ref VPC AvailabilityZone: !Select [1, !GetAZs ''] CidrBlock: !Ref PublicSubnet2Cidr MapPublicIpOnLaunch: true Tags: - Key: Name Value: !Sub ${AWS::StackName}-PublicSubnet2 PublicRouteTable: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref VPC Tags: - Key: Name Value: !Sub ${AWS::StackName}-PublicRouteTable DefaultPublicRoute: Type: AWS::EC2::Route DependsOn: InternetGatewayAttachment Properties: RouteTableId: !Ref PublicRouteTable DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref InternetGateway PublicSubnet1RouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref PublicRouteTable SubnetId: !Ref PublicSubnet1 PublicSubnet2RouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref PublicRouteTable SubnetId: !Ref PublicSubnet2 # Security Group ECSSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Security group for ECS tasks VpcId: !Ref VPC SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: 443 ToPort: 443 CidrIp: 0.0.0.0/0 # IAM Roles ECSTaskExecutionRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: Service: ecs-tasks.amazonaws.com Action: sts:AssumeRole ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy # CloudWatch Logs TaskLogGroup: Type: AWS::Logs::LogGroup DeletionPolicy: Retain UpdateReplacePolicy: Retain Properties: LogGroupName: !Ref LogGroupName RetentionInDays: 30 # ECS Resources ECSCluster: Type: AWS::ECS::Cluster Properties: ClusterName: !Ref ClusterName 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"s EntryPoint: - sh - '-c' Essential: true Image: !Ref ContainerImage LogConfiguration: LogDriver: awslogs Options: mode: non-blocking max-buffer-size: 25m awslogs-create-group: 'true' awslogs-group: !Ref LogGroupName awslogs-region: !Ref 'AWS::Region' awslogs-stream-prefix: ecs Name: sample-fargate-app PortMappings: - ContainerPort: 80 HostPort: 80 Protocol: tcp Cpu: !Ref TaskCpu ExecutionRoleArn: !GetAtt ECSTaskExecutionRole.Arn Family: !Ref TaskFamily Memory: !Ref TaskMemory NetworkMode: awsvpc RequiresCompatibilities: - FARGATE RuntimePlatform: OperatingSystemFamily: LINUX ECSService: Type: AWS::ECS::Service DependsOn: - PublicSubnet1RouteTableAssociation - PublicSubnet2RouteTableAssociation Properties: ServiceName: !Ref ServiceName Cluster: !Ref ECSCluster DesiredCount: !Ref DesiredCount LaunchType: FARGATE NetworkConfiguration: AwsvpcConfiguration: AssignPublicIp: ENABLED SecurityGroups: - !Ref ECSSecurityGroup Subnets: - !Ref PublicSubnet1 - !Ref PublicSubnet2 TaskDefinition: !Ref ECSTaskDefinition Outputs: ClusterName: Description: The name of the ECS cluster Value: !Ref ECSCluster TaskDefinitionArn: Description: The ARN of the task definition Value: !Ref ECSTaskDefinition ServiceName: Description: The name of the ECS service Value: !Ref ECSService VpcId: Description: The ID of the VPC Value: !Ref VPC PublicSubnet1: Description: The ID of public subnet 1 Value: !Ref PublicSubnet1 PublicSubnet2: Description: The ID of public subnet 2 Value: !Ref PublicSubnet2 SecurityGroup: Description: The ID of the security group Value: !Ref ECSSecurityGroup ExecutionRoleArn: Description: The ARN of the task execution role Value: !GetAtt ECSTaskExecutionRole.Arn
Etapa 2: criar uma pilha para recursos do Amazon ECS
Depois de criar um arquivo para o modelo, siga estas etapas para criar uma pilha com o modelo usando o console do AWS CloudFormation.
Faça login no AWS Management Console e abra o console AWS CloudFormation em https://console.aws.amazon.com/cloudformation
. -
Na página Pilhas, no canto superior direito, escolha Criar pilha e, em seguida, selecione Com novos recursos (padrão).
-
Escolha Escolher um modelo existente.
-
Escolha Carregar um arquivo de modelo e, em seguida, Escolher arquivo para selecionar o arquivo
ecs-tutorial-template
.Depois que o arquivo for carregado em um bucket do Amazon S3, você poderá escolher Visualizar no Infrastructure Composer para ver o modelo no Infrastructure Composer. Para obter mais informações sobre modelos do AWS CloudFormation e o Infrastructure Composer, consulte Criar modelos visualmente com o Infrastructure Composer no Guia do usuário do AWS CloudFormation.
-
Escolha Próximo.
-
Na página Especificar detalhes da pilha, em Nome da pilha, forneça o seguinte nome para a pilha:
ecs-tutorial-stack
. Mantenha todos os valores dos parâmetros em Parâmetros como padrão e escolha Avançar. -
Na página Configurar opções da pilha, em Capacidades, marque a caixa de seleção para confirmar a criação de recursos do IAM com o AWS CloudFormation. Essa confirmação é necessária para criar a função de execução de tarefas do Amazon ECS, conforme definido no modelo. Mantenha todas as outras configurações em seus valores padrão e escolha Próximo.
-
Revise os detalhes da pilha na página Revisar e criar e escolha Enviar para iniciar a criação da pilha.
Etapa 3: verificar
Use as etapas a seguir para verificar a criação de recursos do Amazon ECS usando o modelo fornecido.
Faça login no AWS Management Console e abra o console AWS CloudFormation em https://console.aws.amazon.com/cloudformation
. -
Na página Pilhas, escolha ecs-tutorial-stack.
-
Escolha a guia Eventos. Se o status do evento indicar
CREATE_IN_PROGRESS
, espere até que a criação seja concluída e os status mudem paraCREATE_COMPLETE
. -
Depois que os status dos eventos mudarem para
CREATE_COMPLETE
, escolha a guia Recursos. Você verá recursos com o ID lógicoECSCluster
,ECSTaskDefinition
eECSService
respectivamente. -
Para verificar a criação de um cluster do Amazon ECS, escolha o ID físico associado ao
ECSCluster
. Você será redirecionado para o console do Amazon ECS, onde poderá ver o cluster criado chamadoCFNCluster
. -
Para verificar a criação de um serviço do Amazon ECS, escolha o ID físico associado ao
ECSService
. Você será redirecionado para o console do Amazon ECS, onde poderá ver o serviço chamadocfn-service
que foi criado no clustercfnCluster
. -
Para verificar a criação de uma definição de tarefa do Amazon ECS, escolha o ID físico associado ao
ECSTaskDefinition
. Você será redirecionado para o console do Amazon ECS, onde poderá ver a revisão da definição da tarefa com o nometask-definition-cfn
.
Etapa 4: Limpar os recursos
Para limpar recursos e evitar custos adicionais, siga estas etapas.
Faça login no AWS Management Console e abra o console AWS CloudFormation em https://console.aws.amazon.com/cloudformation
. -
Na página Pilhas, escolha ecs-tutorial-stack.
-
Escolha Excluir.
-
Quando a confirmação for solicitada, escolha Excluir novamente.
-
Escolha a guia Eventos. O Status de
ecs-tutorial-stack
muda para DELETE_IN_PROGRESS e, em seguida, para DELETE_COMPLETE após a exclusão ou cancelamento do registro dos recursos. A exclusão leva alguns minutos. -
Escolha a guia Recursos. Agora você verá uma lista de ID lógico com o Status atualizado para DELETE_COMPLETE.