Creación de recursos de Amazon ECS con la consola de AWS CloudFormation - Amazon Elastic Container Service

Creación de recursos de Amazon ECS con la consola de AWS CloudFormation

Una forma de utilizar Amazon ECS con AWS CloudFormation es a través de la AWS Management Console. Aquí puede crear sus pilas de AWS CloudFormation para los componentes de Amazon ECS, como definiciones de tareas, clústeres y servicios, e implementarlos directamente desde la consola. El siguiente tutorial muestra cómo usar la consola de AWS CloudFormation para crear un servicio, una definición de tareas y un clúster de Amazon ECS.

Requisitos previos

En este tutorial se supone que los siguientes requisitos previos se han completado.

Paso 1: creación de una plantilla de pila

Siga estos pasos para crear una plantilla de pila de AWS CloudFormation para un servicio de Amazon ECS y otros recursos relacionados.

  1. Con el editor de texto que desee, cree un archivo llamado ecs-tutorial-template.yaml.

  2. En el archivo ecs-tutorial-template.yaml, pegue la siguiente plantilla y guarde los cambios.

    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

Paso 2: creación de una pila para recursos de Amazon ECS

Después de crear un archivo para la plantilla, puede seguir estos pasos para crear una pila con la plantilla mediante la consola de AWS CloudFormation.

  1. Inicie sesión en la AWS Management Console y abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  2. En la página Pilas, en la parte superior derecha, elija Crear pila y, a continuación, elija con recursos nuevos (estándar).

  3. Elija Elegir una plantilla existente.

  4. Elija Cargar un archivo de plantilla y luego elija Elegir archivo para seleccionar el archivo ecs-tutorial-template.

    Después de cargar el archivo en un bucket de Amazon S3, puede elegir Ver en Infrastructure Composer para visualizar la plantilla en Infrastructure Composer. Para obtener más información sobre las plantillas de AWS CloudFormation y sobre Infrastructure Composer, consulte Creación visual de plantillas con Infrastructure Composer en la Guía del usuario de AWS CloudFormation.

  5. Elija Siguiente.

  6. En la página Especificar los detalles de la pila, en Nombre de la pila, proporcione el siguiente nombre para la pila: ecs-tutorial-stack. Deje todos los valores de los parámetros en Parámetros como valores predeterminados y, a continuación, seleccione Siguiente.

  7. En la página Configurar opciones de pila, en Capacidades, seleccione la casilla de verificación para confirmar la creación de recursos de IAM por parte AWS CloudFormation. Esta confirmación es necesaria para la creación del rol de ejecución de tareas de Amazon ECS tal como se define en la plantilla. Mantenga todas las demás configuraciones en sus valores predeterminados y seleccione Siguiente.

  8. Revise los detalles de la pila en la página Revisar y crear y, a continuación, seleccione Enviar para iniciar la creación de la pila.

Paso 3: verificación

Siga los pasos que se indican a continuación para verificar la creación de los recursos de Amazon ECS mediante la plantilla proporcionada.

  1. Inicie sesión en la AWS Management Console y abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  2. En la página Pilas, elija ecs-tutorial-stack.

  3. Seleccione la pestaña Eventos. Si los estados del evento dicen CREATE_IN_PROGRESS, espera hasta que se complete la creación y los estados cambien a CREATE_COMPLETE.

  4. Cuando los estados del evento cambien a CREATE_COMPLETE, selecciona la pestaña Recursos. Verá los recursos con el ID lógico ECSCluster, ECSTaskDefinition y ECSService respectivamente.

  5. Para verificar la creación de un clúster de Amazon ECS, elija el ID físico asociado a ECSCluster. Se le redirigirá a la consola de Amazon ECS, donde podrá ver el clúster creado denominado CFNCluster.

  6. Para verificar la creación de un servicio de Amazon ECS, elija el ID físico asociado a ECSService. Se le redirigirá a la consola de Amazon ECS, donde podrá ver el servicio creado denominado cfn-service que se ha creado en el clúster cfnCluster.

  7. Para verificar la creación de una definición de tarea de Amazon ECS, elija el ID físico asociado a ECSTaskDefinition. Se le redirigirá a la consola de Amazon ECS, donde podrá ver la revisión de la definición de tareas con el nombre task-definition-cfn.

Paso 4: limpie los recursos

Para limpiar los recursos y evitar incurrir en costos adicionales, siga estos pasos.

  1. Inicie sesión en la AWS Management Console y abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  2. En la página Pilas, elija ecs-tutorial-stack.

  3. Elija Eliminar.

  4. Cuando se le pida confirmación, elija Eliminar de nuevo.

  5. Seleccione la pestaña Eventos. El Estado de los cambios de ecs-tutorial-stack cambia a DELETE_IN_PROGRESS y, después, a DELETE_COMPLETE una vez que los recursos se eliminen o cancelen el registro. La eliminación tarda un par de minutos.

  6. Elija la pestaña Recursos. Ahora verá una lista de ID lógicos con el Estado actualizado a DELETE_COMPLETE.