Erstellen von Amazon ECS-Ressourcen mithilfe von AWS CLI Befehlen für AWS CloudFormation - Amazon Elastic Container Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Erstellen von Amazon ECS-Ressourcen mithilfe von AWS CLI Befehlen für AWS CloudFormation

Das folgende Tutorial zeigt, wie Sie Amazon ECS-Ressourcen mit einer AWS CloudFormation Vorlage erstellen können. AWS CLI

Voraussetzungen

Schritt 1: Erstellen Sie einen Stack

Gehen Sie folgendermaßen vor AWS CLI, um mit dem einen Stack zu erstellen.

  1. Erstellen Sie mit einem Texteditor Ihrer Wahl eine Datei mit dem Namenecs-tutorial-template.yaml.

  2. Fügen Sie die folgende Vorlage in die ecs-tutorial-template.yaml Datei ein und speichern Sie die Änderungen.

    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
  3. Verwenden Sie nach dem Erstellen einer Vorlagendatei den folgenden Befehl, um einen Stapel zu erstellen. Das --capabilities Flag ist erforderlich, um eine Amazon ECS-Aufgabenausführungsrolle zu erstellen, wie in der Vorlage angegeben. Sie können das --parameters Flag auch angeben, um die Vorlagenparameter anzupassen.

    aws cloudformation create-stack \ --stack-name ecs-stack \ --template-body file://ecs-tutorial-template.yaml \ --capabilities CAPABILITY_IAM

Schritt 2: Überprüfen Sie die Ressourcenerstellung

Gehen Sie wie folgt vor, um sicherzustellen, dass die Ressourcen korrekt erstellt wurden. Sie können auch die Amazon ECS-Konsole überprüfen.

  1. Führen Sie den folgenden Befehl aus, um alle Aufgabendefinitionen in einem aufzulisten AWS-Region.

    aws ecs list-task-definitions

    Der Befehl gibt eine Liste von Amazon Resource Name (ARN) s mit Aufgabendefinitionen zurück. Der ARN der Aufgabendefinition, die Sie mit der Vorlage erstellt haben, wird im folgenden Format angezeigt.

    { "taskDefinitionArns": [ ..... "arn:aws:ecs:aws-region:111122223333:task-definition/task-definition-cfn:1", ..... ] }
  2. Führen Sie den folgenden Befehl aus, um alle Cluster in einem aufzulisten AWS-Region.

    aws ecs list-clusters

    Der Befehl gibt eine Liste von Clustern zurück ARNs. Der ARN des Clusters, den Sie mit der Vorlage erstellt haben, wird im folgenden Format angezeigt.

    { "clusterArns": [ ..... "arn:aws:ecs:aws-region:111122223333:cluster/CFNCluster", ..... ] }
  3. Führen Sie den folgenden Befehl aus, um alle Dienste im Cluster aufzulistenCFNCluster.

    aws ecs list-services \ --cluster CFNCluster

    Der Befehl gibt eine Liste von Diensten zurück ARNs. Der ARN des Dienstes, den Sie mit der Vorlage erstellt haben, wird im folgenden Format angezeigt.

    { "serviceArns": [ "arn:aws:ecs:aws-region:111122223333:service/CFNCluster/cfn-service" ] }

Schritt 3: Bereinigen

Führen Sie den folgenden Befehl aus, um die von Ihnen erstellten Ressourcen zu bereinigen.

aws cloudformation delete-stack \ --stack-name ecs-stack

Der delete-stack Befehl initiiert das Löschen des AWS CloudFormation Stacks, der in diesem Tutorial erstellt wurde, und löscht alle Ressourcen im Stack. Um das Löschen zu überprüfen, können Sie den Vorgang unter wiederholen. Schritt 2: Überprüfen Sie die Ressourcenerstellung Die Liste ARNs der Ausgaben wird keine aufgerufene Aufgabendefinition task-definition-cfn oder einen aufgerufenen Cluster mehr enthaltenCFNCLuster. Der list-services Aufruf schlägt fehl.