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. Ele 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 mais.
Neste guia, vamos explorar como usar o AWS CloudFormation para implantar infraestrutura programaticamente. 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 uma estrutura unificada 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, você pode automatizar tudo, desde aplicações simples até ambientes complexos com múltiplos serviços.
Principais recursos 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 e gerencia automaticamente recursos da AWS, como instâncias EC2, bancos de dados RDS, VPCs, funções Lambda, funções IAM e muito mais.
- Atualizações declarativas de pilha. 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 em Várias Implantações 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é a própria aplicação do Elastic Beanstalk.
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.
Implante via CLI da AWS:
bash
aws cloudformation create-stack --stack-name MyElasticBeanstalkStack --template-body file://my-template.yml
Implantação sem servidor com AWS Lambda, API Gateway e DynamoDB
O CloudFormation também é ótimo para implantar aplicativos 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 o Stack Serverless
Implante seu aplicativo serverless usando a CLI da AWS 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 Rede Virtual Privada (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 o 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 Stacks. 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 à sua pilha do CloudFormation, visualize as alterações com um conjunto de alterações para garantir o resultado desejado.
- Resultados. Valores de saída do CloudFormation que você pode usar em outras pilhas ou aplicações. Por exemplo, mostrar a URL de um API Gateway ou o endereço IP de uma instância do EC2.
- Parâmetros. Passe parâmetros para personalizar sua pilha sem modificar o próprio modelo, tornando-a 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 o CloudFormation com Serviços da AWS além do Elastic Beanstalk
O CloudFormation não se limita apenas a implantações no 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 acionadores como API Gateway, S3 ou eventos do DynamoDB.
- Amazon S3. Use o CloudFormation para criar buckets do S3 e gerenciar sua configuração.
- AWS IAM. Automatize a criação de funções e políticas do 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.
Implantação Manual de Infraestrutura pelo Console de Gerenciamento da AWS
Embora o CloudFormation automatize o processo, às vezes é necessária intervenção manual. O Console de Gerenciamento da AWS permite implantar recursos manualmente.
1. Aplicação Elastic Beanstalk
- Acesse o Console do Elastic Beanstalk.
- Clique em Criar Aplicação, siga as etapas para definir o nome da aplicação e a plataforma (por exemplo, Docker, Node.js) e, em seguida, configure manualmente o ambiente, a escalabilidade e as 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 do Lambda.
3. Instâncias EC2
- Inicie manualmente instâncias EC2 a partir do Console do EC2 e configure-as com o tipo de instância, grupos de segurança e pares de chaves escolhidos.
Conclusão
O AWS CloudFormation fornece uma maneira consistente e repetível de gerenciar infraestrutura para aplicações Elastic Beanstalk, arquiteturas serverless e aplicações baseadas em EC2. Com recursos avançados como Conjuntos de Pilhas, Conjuntos de Alterações e Parâmetros, o CloudFormation pode dimensionar para atender às necessidades de ambientes complexos.
Para qualquer pessoa que gerencia ambientes AWS grandes ou dinâmicos, o CloudFormation é uma ferramenta essencial para garantir consistência, segurança e automação em todas as suas implantações AWS.
Source:
https://dzone.com/articles/automate-aws-infrastructure-deployment