Quando se trata de gerenciar infraestrutura na nuvem, a AWS fornece várias ferramentas poderosas que ajudam a automatizar a criação e o gerenciamento de recursos.
Uma das maneiras mais eficazes de lidar com implantações é através do AWS CloudFormation. Isso permite que você defina sua infraestrutura de forma declarativa, facilitando a automação do provisionamento de serviços da AWS, incluindo Elastic Beanstalk, aplicações sem servidor, instâncias EC2, grupos de segurança, balanceadores de carga e muito mais.
Neste guia, exploraremos como usar o AWS CloudFormation para implantar infraestrutura de forma programática. Também abordaremos como implantar recursos manualmente por meio do Console de Gerenciamento da AWS e como integrar serviços como Elastic Beanstalk, funções sem servidor, EC2, IAM e outros recursos da AWS em seu fluxo de trabalho automatizado.
Usando o AWS CloudFormation para Infraestrutura como Código
O AWS CloudFormation permite que você defina sua infraestrutura usando código. O CloudFormation fornece um framework unificado para automatizar e versionar sua infraestrutura configurando Elastic Beanstalk, instâncias EC2, VPCs, funções IAM, funções Lambda ou aplicações sem servidor.
Os modelos do CloudFormation são escritos em formato YAML ou JSON, e definem os recursos que você precisa provisionar. Com o CloudFormation, é possível automatizar desde aplicações simples até ambientes complexos com vários serviços.
Recursos Principais do CloudFormation
- Configuração declarativa. Descreva o estado desejado da sua infraestrutura, e o CloudFormation garante que o estado atual corresponda a ele.
- Gerenciamento de recursos. Provisiona automaticamente e gerencia recursos da AWS, como instâncias EC2, bancos de dados RDS, VPCs, funções Lambda, funções IAM e muito mais.
- Atualizações de pilha declarativas. Se precisar modificar sua infraestrutura, basta atualizar o modelo do CloudFormation, e ele ajustará seus recursos para o novo estado desejado.
Passos para Usar o CloudFormation para Várias Implantações na AWS
Implantação do Elastic Beanstalk com o CloudFormation
1. Escreva um Modelo do CloudFormation
Crie um modelo do CloudFormation em YAML ou JSON para definir sua aplicação e ambiente do Elastic Beanstalk. Este modelo pode incluir recursos como instâncias EC2, grupos de segurança, políticas de dimensionamento e até mesmo a aplicação do Elastic Beanstalk em si.
Exemplo de Modelo do 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. Implante a Pilha do CloudFormation
Use a CLI da AWS ou o Console de Gerenciamento da AWS para implantar a pilha do CloudFormation. Uma vez implantada, o CloudFormation criará automaticamente todos os recursos definidos no modelo.
Implantação via CLI da AWS:
bash
aws cloudformation create-stack --stack-name MyElasticBeanstalkStack --template-body file://my-template.yml
Implantação Serverless com AWS Lambda, API Gateway e DynamoDB
O CloudFormation também é excelente para implantar aplicações serverless. Com serviços como AWS Lambda, API Gateway, DynamoDB e S3, você pode gerenciar facilmente cargas de trabalho serverless.
1. Crie um Modelo CloudFormation Serverless
Este modelo incluirá uma função Lambda, um API Gateway para acessar a função e uma tabela DynamoDB.
Exemplo de Modelo 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. Implante a Stack Serverless
Implante sua aplicação serverless usando a AWS CLI ou o Console de Gerenciamento da AWS.
bash
aws cloudformation create-stack --stack-name MyServerlessStack --template-body file://serverless-template.yml
Implantação VPC e EC2
O CloudFormation pode automatizar a criação de uma Nuvem Privada Virtual (VPC), sub-redes, grupos de segurança e instâncias EC2 para cargas de trabalho mais tradicionais.
1. Modelo CloudFormation para VPC e EC2
Este modelo define uma instância EC2 simples dentro de uma VPC, com um grupo de segurança permitindo tráfego HTTP.
Exemplo de Modelo CloudFormation (VPC e 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. Implante a Stack
aws cloudformation create-stack --stack-name MyEC2Stack --template-body file://vpc-ec2-template.yml
Recursos Avançados do CloudFormation
O AWS CloudFormation oferece mais do que apenas provisionamento simples de recursos. Aqui estão alguns dos recursos avançados que tornam o CloudFormation uma ferramenta poderosa para automação de infraestrutura:
- Conjuntos de Stack. Crie e gerencie stacks em várias contas e regiões da AWS, permitindo a implantação consistente de infraestrutura em toda a sua organização.
- Conjuntos de Alterações. Antes de aplicar alterações ao seu stack do CloudFormation, visualize as alterações com um conjunto de alterações para garantir o resultado desejado.
- Saídas. Valores de saída do CloudFormation que você pode usar para outros stacks ou aplicações. Por exemplo, exiba a URL de um API Gateway ou o endereço IP de uma instância EC2.
- Parâmetros. Passe parâmetros para personalizar seu stack sem modificar o próprio modelo, tornando-o reutilizável em diferentes ambientes.
- Mapeamentos. Crie pares de chave-valor para mapear valores de configuração, como valores específicos da região da AWS, tipos de instância ou outros parâmetros específicos do ambiente.
Usando CloudFormation com Serviços da AWS Além do Elastic Beanstalk
O CloudFormation não se limita apenas a implantações do Elastic Beanstalk — é uma ferramenta flexível que pode ser usada com uma variedade de serviços da AWS, incluindo:
- AWS Lambda. Automatize a implantação de funções sem servidor juntamente com gatilhos como API Gateway, S3 ou eventos do DynamoDB.
- Amazon S3. Use o CloudFormation para criar buckets S3 e gerenciar sua configuração.
- AWS IAM. Automatize a criação de funções e políticas IAM para controlar o acesso aos seus recursos.
- Amazon RDS. Defina bancos de dados RDS (MySQL, PostgreSQL, etc.) com todas as configurações associadas, como configurações de VPC, sub-redes e grupos de segurança.
- Amazon SQS, SNS. Gerencie filas e tópicos para a arquitetura de sua aplicação usando o CloudFormation.
- Amazon ECS e EKS. Automatize a criação e implantação de aplicações em contêineres com serviços como ECS e EKS.
Implantando Infraestrutura Manualmente a partir do Console de Gerenciamento da AWS
Embora o CloudFormation automatize o processo, às vezes a intervenção manual é necessária. O Console de Gerenciamento da AWS permite que você implante recursos manualmente.
1. Aplicativo Elastic Beanstalk
- Acesse o Console do Elastic Beanstalk.
- Clique em Criar Aplicativo, siga as etapas para definir o nome do aplicativo e a plataforma (por exemplo, Docker, Node.js), e então configure manualmente o ambiente, dimensionamento e opções de segurança.
2. Aplicações Serverless (Lambda + API Gateway)
- Acesse o Console do Lambda para criar e implantar funções.
- Use o Console do API Gateway para criar APIs para suas funções Lambda.
3. Instâncias EC2
- Implante manualmente instâncias EC2 a partir do Console do EC2 e configure-as com o tipo de instância escolhido, grupos de segurança e pares de chaves.
Conclusão
O AWS CloudFormation fornece uma maneira consistente e repetível de gerenciar infraestrutura para aplicativos Elastic Beanstalk, arquiteturas serverless e aplicações baseadas em EC2. Com seus recursos avançados como Conjuntos de Pilhas, Conjuntos de Alterações e Parâmetros, o CloudFormation pode escalar para atender às necessidades de ambientes complexos.
Para quem gerencia ambientes AWS grandes ou dinâmicos, o CloudFormation é uma ferramenta essencial para garantir consistência, segurança e automação em todas as implantações AWS.
Source:
https://dzone.com/articles/automate-aws-infrastructure-deployment