Nightmare infrastructure – episodio 4: nessun limite al peggio.
29 Ottobre 2025 - 1 min. read
Damiano Giorgi
DevOps Engineer
Al giorno d'oggi, molto spesso capita di affidarsi a Docker per generare e gestire le infrastrutture delle applicazioni al fine di eseguire test in un ambiente locale. Molte volte, infatti, gli sviluppatori ricorrono a docker-compose per creare l'infrastruttura contenente la loro applicazione, il loro web server e i loro database in diversi container Docker.In questo articolo, vedremo insieme come rilasciare un'intera applicazione pensata su docker-compose all'interno dell'ambiente AWS utilizzando il servizio AWS ECS Fargate. Prima di iniziare a mettere le mani in pasta, capiamo insieme cos'è AWS ECS Fargate.sudo curl -Lo /usr/local/bin/ecs-cli https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-darwin-amd64-latestper scaricarla all'interno della tua cartella bin.
chmod +x /usr/local/bin/ecs-cliper fornirle i permessi di esecuzione.Fatto questo, eseguiamo
ecs-cli --versionper verificare che tutto sia andato nel modo giusto.
ecs-cli configure --cluster test --default-launch-type FARGATE --config-name test --region eu-west-1Questo comando definisce un nuovo cluster chiamato "test", che di default andrà a lanciare i nostri task in modalità "FARGATE” nella regione dell'Irlanda.Ora, l'unica cosa che rimane da fare è rilasciarlo. In caso sul tuo account sia già presente una VPC che vuoi utilizzare con questo cluster, ti basterà specificare il VPC ID e le subnet di riferimento all'interno del comando di deploy:
ecs-cli up --cluster-config test --vpc YOUR_VPC_ID --subnets YOUR_SUBNET_ID_1, YOUR_SUBNET_ID_2Se invece vuoi che sia la CLI ECS a creare e configurare una nuova VPC al posto tuo, puoi semplicemente eseguire:
ecs-cli up --cluster-config testQuesto comando creerà un Cluster ECS vuoto e, se non hai specificato una tua VPC, uno Stack CloudFormation con all'interno le risorse della VPC.Un'altra cosa da creare è il security group che verrà utilizzato dal nostro servizio ECS. Possiamo crearlo direttamente con la CLI AWS utilizzando questi comandi:
aws ec2 create-security-group --description test --group-name testSecurityGroup --vpc-id YOUR_VPC_ID aws ec2 authorize-security-group-ingress --group-id SECURITY_GROUP_ID_CREATED --protocol tcp --port 80 --cidr 0.0.0.0/0 --region eu-west-1Questi comandi creano un security group associato alla VPC ID che hai passato in input al comando e ne autorizzano l'accesso sulla porta 80 da Internet. In output a questo comando vedrai l'id del security group generato. Prendi nota di questo id e del nome che hai specificato per crearlo, in quanto ci serviranno più avanti.
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Service": "ecs-tasks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
Eseguiamo poi il seguente comando:aws iam --region eu-west-1 create-role --role-name ecsTaskExecutionRole --assume-role-policy-document file://assume-role_policy.jsonUna volta che il ruolo è stato creato, dobbiamo solo agganciare la policy che permetterà ai container di creare dei nuovi Log Group su AWS CloudWatch. Possiamo farlo semplicemente eseguendo questo comando:
aws iam --region eu-west-1 attach-role-policy --role-name ecsTaskExecutionRole --policy-arn arn:aws:iam::aws:policy/service-role/AmazonECSTaskExecutionRolePolicy
version: '3'
services:
web:
image: nginx
ports:
- "80:80"
Come vediamo, definisce semplicemente un servizio web NGINX, ed espone il tutto sulla porta 80. Quello che dobbiamo fare adesso è aggiungere le configurazioni per i logs come da best practices AWS. Queste configurazioni permetteranno ad AWS di gestire i log mediante il servizio AWS CloudWatch.version: '3'
services:
web:
image: nginx
ports:
- "80:80"
logging:
driver: awslogs
options:
awslogs-group: tutorial
awslogs-region: eu-west-1
awslogs-stream-prefix: web
Le configurazioni per il log contengono:version: 1
task_definition:
task_execution_role: YOUR_ECS_TASK_EXECUTION_ROLE_NAME
ecs_network_mode: awsvpc
task_size:
mem_limit: 0.5GB
cpu_limit: 256
run_params:
network_configuration:
awsvpc_configuration:
subnets:
- "YOUR SUBNET ID 1"
- "YOUR SUBNET ID 2"
security_groups:
- "YOUR SECURITY GROUP ID"
assign_public_ip: ENABLED
Nel campo "task_execution_role", andremo a inserire il nome del ruolo definito nel secondo step.Nel campo "subnets" e nel campo "security_groups", invece, inseriremo gli ID delle subnet pubbliche e l'id del security group definiti nel primo step.ecs-cli compose --project-name test service up --create-log-groups --cluster-config testVerifichiamo lo stato del servizio eseguendo il comando qui sotto e il gioco è fatto!
ecs-cli compose --project-name test service ps --cluster-config testE anche per oggi è tutto. In questo articolo abbiamo visto insieme come rilasciare un'applicazione che fa uso di docker-compose all'interno dell'ambiente AWS, con un focus sulla nuova ECS CLI messa a disposizione da AWS.Continuate a seguirci: appuntamento tra 15 giorni con il prossimo articolo :)#Proud2beCloud