Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Creazione di risorse Amazon ECS utilizzando AWS CLI comandi per AWS CloudFormation
Il seguente tutorial mostra come utilizzare il AWS CLI per creare risorse Amazon ECS con un AWS CloudFormation modello.
Prerequisiti
-
Hai completato le fasi descritte in Configurazione per l'uso di Amazon ECS.
-
Il tuo utente IAM dispone delle autorizzazioni richieste specificate nell'esempio di policy Amazon ECS_ FullAccess IAM.
Fase 1: Creare uno stack
Per creare uno stack utilizzando il AWS CLI, segui questi passaggi.
-
Usando un editor di testo a tua scelta, crea un file chiamato
ecs-tutorial-template.yaml
. -
Nel
ecs-tutorial-template.yaml
file, incolla il seguente modello e salva le modifiche.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
-
Dopo aver creato un file modello, utilizzate il seguente comando per creare uno stack. Il
--capabilities
flag è necessario per creare un ruolo di esecuzione delle attività di Amazon ECS come specificato nel modello. Puoi anche specificare il--parameters
flag per personalizzare i parametri del modello.aws cloudformation create-stack \ --stack-name
ecs-stack
\ --template-body file://ecs-tutorial-template.yaml
\ --capabilities CAPABILITY_IAM
Fase 2: Verifica della creazione delle risorse
Per assicurarti che le risorse vengano create correttamente, segui questi passaggi. Puoi anche controllare la console Amazon ECS.
-
Esegui il comando seguente per elencare tutte le definizioni delle attività in un Regione AWS file.
aws ecs list-task-definitions
Il comando restituisce un elenco di definizioni di attività Amazon Resource Name (ARN). L'ARN della definizione dell'attività creata utilizzando il modello verrà visualizzato nel formato seguente.
{ "taskDefinitionArns": [ ..... "arn:aws:ecs:
aws-region
:111122223333
:task-definition/task-definition-cfn:1", ..... ] } -
Esegui il comando seguente per elencare tutti i cluster in un file. Regione AWS
aws ecs list-clusters
Il comando restituisce un elenco di cluster ARNs. L'ARN del cluster creato utilizzando il modello verrà visualizzato nel seguente formato.
{ "clusterArns": [ ..... "arn:aws:ecs:
aws-region
:111122223333
:cluster/CFNCluster", ..... ] } -
Esegui il comando seguente per elencare tutti i servizi del cluster
CFNCluster
.aws ecs list-services \ --cluster
CFNCluster
Il comando restituisce un elenco di servizi ARNs. L'ARN del servizio creato utilizzando il modello verrà visualizzato nel seguente formato.
{ "serviceArns": [ "arn:aws:ecs:
aws-region
:111122223333
:service/CFNCluster/cfn-service" ] }
Fase 3: pulizia
Per ripulire le risorse create, esegui il comando seguente.
aws cloudformation delete-stack \ --stack-name
ecs-stack
Il delete-stack
comando avvia l'eliminazione dello AWS CloudFormation stack creato in questo tutorial, eliminando tutte le risorse nello stack. Per verificare l'eliminazione, è possibile ripetere la procedura in. Fase 2: Verifica della creazione delle risorse L'elenco degli ARNs output non includerà più una definizione di attività chiamata task-definition-cfn
o un cluster chiamatoCFNCLuster
. La list-services
chiamata fallirà.