Quando si tratta di gestire l’infrastruttura nel cloud, AWS fornisce diversi strumenti potenti che aiutano ad automatizzare la creazione e la gestione delle risorse.
Uno dei modi più efficaci per gestire i deployment è tramite AWS CloudFormation. Consente di definire la propria infrastruttura in modo dichiarativo, semplificando l’automazione della fornitura dei servizi AWS, inclusi Elastic Beanstalk, applicazioni serverless, istanze EC2, gruppi di sicurezza, bilanciatori di carico e altro ancora.
In questa guida, esploreremo come utilizzare AWS CloudFormation per distribuire l’infrastruttura in modo programmabile. Copriremo anche come distribuire manualmente le risorse tramite la Console di Gestione AWS e come integrare servizi come Elastic Beanstalk, funzioni serverless, EC2, IAM e altre risorse AWS nel flusso di lavoro automatizzato.
Utilizzo di AWS CloudFormation per l’infrastruttura come codice
AWS CloudFormation consente di definire l’infrastruttura utilizzando il codice. CloudFormation fornisce un framework unificato per automatizzare e versionare l’infrastruttura impostando Elastic Beanstalk, istanze EC2, VPC, ruoli IAM, funzioni Lambda o applicazioni serverless.
I template di CloudFormation sono scritti in formato YAML o JSON e definiscono le risorse da fornire. Con CloudFormation, è possibile automatizzare tutto, dalle applicazioni semplici a ambienti complessi multi-servizio.
Principali caratteristiche di CloudFormation
- Configurazione dichiarativa. Descrivi lo stato desiderato della tua infrastruttura e CloudFormation si assicura che lo stato corrente corrisponda ad esso.
- Gestione delle risorse. Provisiona e gestisce automaticamente le risorse AWS come istanze EC2, database RDS, VPC, funzioni Lambda, ruoli IAM e altro ancora.
- Aggiornamenti dichiarativi dello stack. Se hai bisogno di modificare la tua infrastruttura, aggiorna semplicemente il template di CloudFormation e adatterà le tue risorse al nuovo stato desiderato.
Passaggi per l’utilizzo di CloudFormation per diverse distribuzioni AWS
Distribuzione di Elastic Beanstalk con CloudFormation
1. Scrivi un template di CloudFormation
Crea un template di CloudFormation in formato YAML o JSON per definire la tua applicazione e ambiente Elastic Beanstalk. Questo template può includere risorse come istanze EC2, gruppi di sicurezza, politiche di scalabilità e persino l’applicazione Elastic Beanstalk stessa.
Esempio di template di CloudFormation (Elastic Beanstalk):
yaml
Resources
MyElasticBeanstalkApplication
Type'AWS::ElasticBeanstalk::Application'
Properties
ApplicationName"my-application"
Description"Elastic Beanstalk Application for my React and Spring Boot app"
MyElasticBeanstalkEnvironment
Type'AWS::ElasticBeanstalk::Environment'
Properties
EnvironmentName"my-app-env"
ApplicationName !Ref MyElasticBeanstalkApplication
SolutionStackName"64bit Amazon Linux 2 v3.4.9 running Docker"
OptionSettings
Namespace"aws:autoscaling:asg"
OptionName"MaxSize"
Value"3"
Namespace"aws:autoscaling:asg"
OptionName"MinSize"
Value"2"
Namespace"aws:ec2:vpc"
OptionName"VPCId"
Value"vpc-xxxxxxx"
Namespace"aws:ec2:vpc"
OptionName"Subnets"
Value"subnet-xxxxxxx,subnet-yyyyyyy"
2. Distribuisci lo stack di CloudFormation
Utilizza l’AWS CLI o la Console di gestione AWS per distribuire lo stack di CloudFormation. Una volta distribuito, CloudFormation creerà automaticamente tutte le risorse definite nel template.
Distribuzione tramite AWS CLI:
bash
aws cloudformation create-stack --stack-name MyElasticBeanstalkStack --template-body file://my-template.yml
Distribuzione senza server con AWS Lambda, API Gateway e DynamoDB
CloudFormation è ottimo anche per distribuire applicazioni serverless. Con servizi come AWS Lambda, API Gateway, DynamoDB e S3, è possibile gestire facilmente carichi di lavoro serverless.
1. Creare un Modello CloudFormation Serverless
Questo modello includerà una funzione Lambda, un API Gateway per accedere alla funzione e una tabella DynamoDB.
Esempio di Modello CloudFormation (Serverless):
yaml
Resources
MyLambdaFunction
Type'AWS::Lambda::Function'
Properties
FunctionName"MyServerlessFunction"
Handler"index.handler"
Role arn aws iam 123456789012 role/lambda-execution-role
Code
S3Bucket"my-serverless-code-bucket"
S3Key"function-code.zip"
Runtime nodejs14.x
MyAPIGateway
Type'AWS::ApiGateway::RestApi'
Properties
Name"MyAPI"
Description"API Gateway for My Serverless Application"
MyDynamoDBTable
Type'AWS::DynamoDB::Table'
Properties
TableName"MyTable"
AttributeDefinitions
AttributeName"id"
AttributeType"S"
KeySchema
AttributeName"id"
KeyType"HASH"
ProvisionedThroughput
ReadCapacityUnits5
WriteCapacityUnits5
2. Distribuire lo Stack Serverless
Distribuisci la tua applicazione serverless utilizzando AWS CLI o AWS Management Console.
bash
aws cloudformation create-stack --stack-name MyServerlessStack --template-body file://serverless-template.yml
Implementazione VPC e EC2
CloudFormation può automatizzare la creazione di una Virtual Private Cloud (VPC), subnet, gruppi di sicurezza e istanze EC2 per carichi di lavoro più tradizionali.
1. Modello CloudFormation per VPC ed EC2
Questo modello definisce una semplice istanza EC2 all’interno di una VPC, con un gruppo di sicurezza che consente il traffico HTTP.
Esempio di Modello CloudFormation (VPC ed EC2):
Resources
MyVPC
Type'AWS::EC2::VPC'
Properties
CidrBlock"10.0.0.0/16"
EnableDnsSupport"true"
EnableDnsHostnames"true"
MySecurityGroup
Type'AWS::EC2::SecurityGroup'
Properties
GroupDescription"Allow HTTP and SSH traffic"
SecurityGroupIngress
IpProtocol"tcp"
FromPort"80"
ToPort"80"
CidrIp"0.0.0.0/0"
IpProtocol"tcp"
FromPort"22"
ToPort"22"
CidrIp"0.0.0.0/0"
MyEC2Instance
Type'AWS::EC2::Instance'
Properties
InstanceType"t2.micro"
ImageId"ami-xxxxxxxx"
SecurityGroupIds
!Ref MySecurityGroup
SubnetId !Ref MyVPC
2. Distribuire lo Stack
aws cloudformation create-stack --stack-name MyEC2Stack --template-body file://vpc-ec2-template.yml
Funzionalità Avanzate di CloudFormation
AWS CloudFormation offre più di una semplice fornitura di risorse. Ecco alcune delle funzionalità avanzate che rendono CloudFormation uno strumento potente per l’automazione dell’infrastruttura:
- Stack Sets. Creare e gestire stack su più account AWS e regioni, consentendo una distribuzione coerente dell’infrastruttura in tutta l’organizzazione.
- Set di modifica. Prima di applicare le modifiche al tuo stack CloudFormation, visualizza un set di modifica per assicurarti l’esito desiderato.
- Ouput. Valori di output da CloudFormation che puoi utilizzare per altri stack o applicazioni. Ad esempio, puoi ottenere l’URL di un API Gateway o l’indirizzo IP di un’istanza EC2.
- Parametri. Passa dei parametri per personalizzare il tuo stack senza modificare il template stesso, rendendolo riutilizzabile in diversi ambienti.
- Mappature. Crea coppie chiave-valore per configurare valori specifici di una regione AWS, tipi di istanze o altri parametri specifici dell’ambiente.
Utilizzo di CloudFormation con servizi AWS oltre Elastic Beanstalk
CloudFormation non è limitato solo agli sviluppi di Elastic Beanstalk – è uno strumento flessibile che può essere utilizzato con una varietà di servizi AWS, tra cui:
- AWS Lambda. Automatizza il rilascio di funzioni serverless insieme a trigger come API Gateway, S3 o eventi DynamoDB.
- Amazon S3. Utilizza CloudFormation per creare bucket S3 e gestirne la configurazione.
- AWS IAM. Automatizza la creazione di ruoli IAM e delle relative policy per controllare l’accesso alle risorse.
- Amazon RDS. Definisci database RDS (MySQL, PostgreSQL, ecc.) con tutte le relative configurazioni come impostazioni VPC, subnet e gruppi di sicurezza.
- Amazon SQS, SNS. Gestisci code e argomenti per l’architettura delle tue applicazioni utilizzando CloudFormation.
- Amazon ECS ed EKS. Automatizza la creazione e il deployment delle applicazioni containerizzate con servizi come ECS ed EKS.
Deployment manuale dell’infrastruttura dalla Console di gestione di AWS
Sebbene CloudFormation automatizzi il processo, a volte è necessario un intervento manuale. La Console di gestione di AWS ti consente di distribuire risorse manualmente.
1. Applicazione Elastic Beanstalk
- Vai alla Console di Elastic Beanstalk.
- Fai clic su “Crea applicazione”, segui i passaggi per definire il nome dell’applicazione e la piattaforma (ad esempio, Docker, Node.js), quindi configura manualmente l’ambiente, le opzioni di scalabilità e sicurezza.
2. Applicazioni serverless (Lambda + API Gateway)
- Vai alla Console di Lambda per creare e distribuire le funzioni.
- Utilizza la Console di API Gateway per creare API per le tue funzioni Lambda.
3. Istanze EC2
- Lancia manualmente le istanze EC2 dalla Console di EC2 e configuralle con il tipo di istanza scelto, i gruppi di sicurezza e le coppie di chiavi.
Conclusioni
AWS CloudFormation offre un modo coerente e ripetibile per gestire l’infrastruttura per le applicazioni Elastic Beanstalk, le architetture serverless e le applicazioni basate su EC2. Con le sue funzionalità avanzate come Stack Sets, Change Sets e Parametri, CloudFormation può adattarsi alle esigenze di ambienti complessi.
Per chiunque gestisca ambienti AWS di grandi dimensioni o dinamici, CloudFormation è uno strumento essenziale per garantire coerenza, sicurezza e automazione in tutte le tue distribuzioni AWS.
Source:
https://dzone.com/articles/automate-aws-infrastructure-deployment