Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
O AWS CloudFormation usa uma linguagem de modelo para descrever e provisionar recursos da AWS de forma programática. A sintaxe dessa linguagem de modelo é baseada em JSON e YAML e é usada para descrever os recursos da AWS que devem ser criados ou modificados.
Resources: Este é o bloco principal do CloudFormation e é onde você define os recursos que deseja criar ou modificar. Cada recurso é definido dentro deste bloco, com um nome exclusivo que é usado para referenciar o recurso em outras partes do modelo.
Type: O tipo de recurso que você deseja criar ou modificar. O CloudFormation suporta uma ampla variedade de tipos de recursos da AWS, como instâncias EC2, grupos de segurança, buckets S3, entre outros.
Properties: As propriedades específicas do recurso que você está criando ou modificando. Cada tipo de recurso tem um conjunto diferente de propriedades que podem ser definidas, como o nome do bucket S3, o tipo de instância EC2, entre outras.
Parameters: Define parâmetros que podem ser passados para o modelo do CloudFormation ao ser executado. Isso pode permitir que você crie um modelo genérico que pode ser usado para criar recursos em vários ambientes.
Mappings: Usado para mapear chaves de valores em um bloco do modelo para outros valores em outro bloco. Por exemplo, você pode usar Mappings para mapear um nome de região AWS em um AMI específico.
Conditions: Permite que você especifique condições para a criação ou modificação de um recurso. Isso pode ser usado para criar recursos com base em certas variáveis ou condições.
Outputs: Define valores de saída que podem ser usados por outros modelos ou scripts. Isso pode incluir informações sobre o ambiente criado, como endpoints de API ou URLs de serviços.
Em resumo, a sintaxe do CloudFormation é baseada em JSON e YAML e usa uma variedade de blocos para definir recursos, parâmetros, mapeamentos, condições e saídas. É uma linguagem poderosa que permite a criação e a modificação de recursos da AWS de forma programática.
Aqui está um exemplo de modelo do CloudFormation para criar uma instância EC2 na região us-east-1:
Resources:
EC2Instance:
Type: "AWS::EC2::Instance"
Properties:
ImageId: "ami-0c55b159cbfafe1f0" # Amazon Linux 2 AMI ID
InstanceType: "t2.micro"
KeyName: "my-key-pair"
SecurityGroupIds:
- sg-1234567890abcdef # Security Group ID
SubnetId: subnet-1234567890abcdef # Subnet ID
Outputs:
InstanceId:
Value: !Ref EC2Instance
ec2-instance.ymlEste modelo define um recurso “EC2Instance” que é uma instância EC2 do tipo “t2.micro”, usando a imagem “Amazon Linux 2 AMI ID”. Ele também define a chave de acesso SSH que será usada para acessar a instância, o grupo de segurança e a sub-rede.
Para usar este modelo do CloudFormation, você pode salvá-lo em um arquivo YAML por exemplo, “ec2-instance.yml” (o nome do arquivo é de livre escolha) e, em seguida, usar o AWS CLI para criar a pilha:
aws cloudformation create-stack --stack-name my-ec2-instance --template-body file://ec2-instance.yml
ShellScriptO comando acima criará uma nova pilha chamada “my-ec2-instance” com base no modelo “ec2-instance.yml”. O CloudFormation provisionará os recursos necessários (a instância EC2) e você poderá acessá-los usando a chave de acesso SSH especificada no modelo.
É importante lembrar que, antes de criar uma instância EC2, você deve criar os recursos necessários, como uma VPC, sub-redes (subnets), grupos de segurança (security groups) e chaves de acesso SSH. O modelo do CloudFormation acima assume que esses recursos já foram criados e usa seus IDs para criar a instância EC2.
Abaixo vamos demonstrar a criação de alguns recursos na AWS usando o CloudFormation.
Segue abaixo um exemplo básico de modelo CloudFormation para criar um bucket S3:
Resources:
MyS3Bucket:
Type: AWS::S3::Bucket
Properties:
BucketName: my-s3-bucket-name
AccessControl: Private
VersioningConfiguration:
Status: Enabled
YAMLNesse exemplo, o modelo cria um recurso AWS S3 Bucket com o nome my-s3-bucket-name
, que é definido na propriedade BucketName
. A propriedade AccessControl
é definida como “Private”, o que significa que apenas o proprietário da conta AWS tem acesso ao bucket. A propriedade VersioningConfiguration
é usada para habilitar o versionamento de objetos no bucket.
Segue abaixo um exemplo básico de modelo CloudFormation para criar uma VPC com sub-redes:
Resources:
MyVPC:
Type: AWS::EC2::VPC
Properties:
CidrBlock: "10.0.0.0/16"
Tags:
- Key: Name
Value: my-vpc-name
MyPublicSubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
CidrBlock: "10.0.1.0/24"
AvailabilityZone: !Select [0, !GetAZs ""]
MapPublicIpOnLaunch: true
Tags:
- Key: Name
Value: my-public-subnet-name
MyPrivateSubnet:
Type: AWS::EC2::Subnet
Properties:
VpcId: !Ref MyVPC
CidrBlock: "10.0.2.0/24"
AvailabilityZone: !Select [0, !GetAZs ""]
MapPublicIpOnLaunch: false
Tags:
- Key: Name
Value: my-private-subnet-name
YAMLNesse exemplo, o modelo cria uma VPC com o CIDR block de 10.0.0.0/16
e define um nome com a tag Name
. Em seguida, cria duas sub-redes (subnets): uma pública, com o CIDR block de 10.0.1.0/24
, disponível na primeira zona de disponibilidade da região atual e habilita o atributo MapPublicIpOnLaunch
, e uma privada, com o CIDR block de 10.0.2.0/24
, também disponível na primeira zona de disponibilidade da região atual e com o atributo MapPublicIpOnLaunch
desabilitado. É importante notar que a seleção da primeira zona de disponibilidade é feita utilizando a função !Select
e a função !GetAZs
.
É muito simples a utilização do CloudFormation para criação de recursos na AWS, além de garantir que você possa versionar sua infraestrutura, garantindo que quaisquer alterações sejam mapeadas de maneira mais fácil, além de facilitar migrações entre contas.