Imagem da infraestrutura do cluster ECS.
Name | Version |
---|---|
terraform | >= 1.0.0 |
aws | ~> 4.0 |
Name | Version |
---|---|
aws | 4.0 |
Este modulo permite provisionar cluster ECS.
- Cluster ECS.
- Service.
- Task definition.
- Politicas de AutoScaling
- Security Group.
- Load Balance.
O Amazon Elastic Container Service (ou ECS, para abreviar) é um serviço totalmente gerenciado de orquestração de contêineres que ajuda a implantar, gerenciar e escalar facilmente aplicações em contêineres.
Para saber mais sobre AWS ECS acesso o link: https://docs.aws.amazon.com/ecs/index.html
Name | Type | Description |
---|---|---|
aws_ecs_cluster | resource | Cria um cluster para executar os containers. |
aws_ecs_service | resource | Permite executar e manter número especificado de tasks definitions em execução no cluster. |
aws_ecs_task_definition | resource | É um arquivo de texto em formato JSON que descreve uma ou mais características dos contêineres. |
aws_appautoscaling_target | resource | O Auto Scaling é um serviço que permite aumentar ou diminuir a escala das tarefas (tasks). |
aws_appautoscaling_policy | resource | O Auto Scaling policy define as regras de escala de um serviço Auto Scaling. |
aws_iam_role | resource | IAM é um serviço de gerenciamento de acesso que ajuda você a controlar o acesso aos recursos da AWS. |
aws_iam_role_policy_attachment | resource | IAM é um serviço de gerenciamento de acesso que ajuda você a controlar o acesso aos recursos da AWS. |
aws_lb | resource | Elastic Load Balance distribui automaticamente o tráfego de entrada entre as tarefas (tasks) do serviço no cluster. |
aws_lb_target_group | resource | Fornece um grupo de destino que onde o load balance consiga encaminhar requisições. |
aws_lb_listener | resource | Porta onde o balanceador de carga está escutando as requisições. |
aws_security_group | resource | Grupo de segurança atua como um firewall virtual. |
aws_cloudwatch_log_group | resource | CloudWatch responsável por armazenar os logs das task. |
required_providers | expression | Sintaxe do Terraform para restrições de versão. |
provider | provider | São plugins utilizado pelo Terraform para interagir com provedores de nuvem. |
locals | input | Um conjunto de valores relacionados chave=valor que podem ser declarados em um único bloco. |
variables | input | Serve como parâmetros para que um usuário possam personalizar o comportamento sem editar o código fonte. |
Name | Description | Type | Default | Required |
---|---|---|---|---|
create_cluster | Define se cluster será criado | bool |
true | no |
cluster_name | Nome do cluster ECS | string |
n/a | yes |
container_insights | Usado para habilitar CloudWatch Container Insights para o cluster | bool |
true | no |
delete_protection | Impede que terraform exclua o load balance | bool |
false | no |
region | Região AWS | string |
n/a | yes |
service_name | Nome do service cluster que será criado | string |
n/a | yes |
tags | Tags para recurso | map(string) |
n/a | yes |
service_name | Nome do service cluster que será criado | string |
n/a | yes |
app_count | Números de tarefas em execução task definition | number |
n/a | yes |
family_name | Nome para task definition | string |
n/a | yes |
fargate_cpu | Número de CPUs usados na task definition | number |
n/a | yes |
fargate_memory | Quantidade de memória usada pela task definition | number |
n/a | yes |
subnet_ids | ID das subnetes | list(string) |
n/a | yes |
vpc_id | ID da VPC | string |
n/a | yes |
app_port | Porta que será utilizada pela aplicação | number |
n/a | yes |
protocol | Protocolo que será utilizado na aplicação <http, https, tcp> |
string |
n/a | yes |
policy_ssl | Nome da política SSL. Obrigatório se o protocolo for HTTPS ou TLS |
string |
null | no |
certificate_arn | ARN do certificado de servidor SSL padrão | string |
null | no |
template_container | Um arquivo json que contém as definições do container | list(object) |
n/a | no |
tags | Tag para recursos criados | map(string) |
n/a | yes |
Name | Description |
---|---|
loadbalance_dns_name | Endereço DNS do loadbalance |
Name | Version |
---|---|
terraform | >= 1.0.0 |
Crie um arquivo terraform.tf
com o seguinte conteúdo. E altere os valores das variáveis.
module "ecs_mentoria" {
source = "git@github.com:mentoriaiac/iac-modulo-aws-ecs.git?ref=v1.0"
cria_cluster = true
app_port = 80
region = "us-east-1"
app_count = 1
fargate_cpu = 256
fargate_memory = 512
subnet_ids = ["<ID_SUBNET_X>", "<ID_SUBNET_Y>"]
vpc_id = "<ID_AWS_VPC>"
protocol = "HTTP"
family_name = "<NAME>"
service_name = "<NAME>"
cluster_name = "<NAME>"
template_container = [{
name = "<NAME>"
image = "<ENDEREÇO_REGISTRER_IMAGEM_DOCKER>"
cpu = 128
memory = 256
essential = true
portMappings = [{
containerPort = 80
hostPort = 80
}]
logConfiguration = {
logDriver = "awslogs"
options = {
awslogs-group = "<NAME>"
awslogs-region = "us-east-1"
awslogs-stream-prefix = "<NAME>"
}
}
}]
}
output "load_balancer_dns_name" {
value = "http://${module.ecs_mentoria.loadbalance_dns_name}"
}
Após preencher os valores requiridos utilize os comandos abaixo para provisonar cluster e suas aplicação.
terraform init
terraform fmt
terraform validate
terraform plan
terraform apply
Segue uma breve descrição dos comandos listados acima.
terraform init: Execute o terraform init para baixar todos os plugins necessários.
terraform fmt: O comando é usado para reescrever os arquivos de configuração do Terraform para um formato e estilo canônicos.
terraform validate: Comando valida sintaticamente os arquivos de configuração em um diretório.
terraform plan: Executar um plano de terraform e colocá-lo em um arquivo chamado plano.
terraform apply: Usa plano para aplicar as alterações na AWS.