Skip to content

Commit

Permalink
Merge pull request #1 from Victor-Borges-Silva/melhoria-tfvars
Browse files Browse the repository at this point in the history
Melhoria tfvars
  • Loading branch information
Victor-Borges-Silva authored Jan 18, 2025
2 parents c260fbc + 8be3f3a commit 7535bc1
Show file tree
Hide file tree
Showing 9 changed files with 572 additions and 40 deletions.
42 changes: 42 additions & 0 deletions .github/workflows/tf_apply.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Terraform Apply
on:
push:
branches:
- main

jobs:
terraform-apply:
runs-on: ubuntu-latest

environment: prd

steps:
- name: Checkout code
uses: actions/checkout@v3

- name: Set up Terraform
uses: hashicorp/setup-terraform@v2

- name: Configure AWS credentials
uses: aws-actions/configure-aws-credentials@v2
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: us-west-1

- uses: webfactory/[email protected]
with:
ssh-private-key: "${{ secrets.SSH_PRIVATE_KEY }}"

- name: Terraform Init
run: terraform init

- name: Terraform Plan
id: plan
run: terraform plan -out=plano

- name: Terraform Apply
run: terraform apply -auto-approve plano

- name: Clean up plan file
run: rm -f plano
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ crash.*.log
# password, private keys, and other secrets. These should not be part of version
# control as they are data points which are potentially sensitive and subject
# to change depending on the environment.
*.tfvars
#*.tfvars
*.tfvars.json

# Ignore override files as they are usually used to override resources locally and so
Expand Down
83 changes: 83 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,85 @@
# terraform-aws-Victor-Borges-Silva_iac
Repositório destinado ao projeto final.

# Repositório auxiliar para checagem de segurança
https://github.com/aquasecurity/tfsec

# Repositório auxiliar para criação do README
https://github.com/terraform-docs/terraform-docs

<!-- BEGIN_TF_DOCS -->
## Requirements

| Name | Version |
|------|---------|
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | 5.58.0 |

## Providers

No providers.

## Modules

| Name | Source | Version |
|------|--------|---------|
| <a name="module_Backup"></a> [Backup](#module\_Backup) | ../Modulo-bakcup/ | n/a |
| <a name="module_cloudwatch_desliga"></a> [cloudwatch\_desliga](#module\_cloudwatch\_desliga) | ../Modulo-cloudwatch-desliga/ | n/a |
| <a name="module_cloudwatch_inicia"></a> [cloudwatch\_inicia](#module\_cloudwatch\_inicia) | ../Modulo-cloudwatch-inicia/ | n/a |
| <a name="module_iam_policy_role"></a> [iam\_policy\_role](#module\_iam\_policy\_role) | ../Modulo-iam/ | n/a |
| <a name="module_instancias"></a> [instancias](#module\_instancias) | ../Modulo-instancias/ | n/a |
| <a name="module_lambda_desliga"></a> [lambda\_desliga](#module\_lambda\_desliga) | ../Modulo-lambda-desliga/ | n/a |
| <a name="module_lambda_inicia"></a> [lambda\_inicia](#module\_lambda\_inicia) | ../Modulo-lambda-inicia/ | n/a |

## Resources

No resources.

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| <a name="input_agendamento_backup"></a> [agendamento\_backup](#input\_agendamento\_backup) | Agendamento do backup | `string` | n/a | yes |
| <a name="input_agendamento_cron"></a> [agendamento\_cron](#input\_agendamento\_cron) | Agendamento em formato cron para iniciar a função | `string` | n/a | yes |
| <a name="input_armazenamento_temporario"></a> [armazenamento\_temporario](#input\_armazenamento\_temporario) | description | `number` | n/a | yes |
| <a name="input_cloudwatch_inicia_name"></a> [cloudwatch\_inicia\_name](#input\_cloudwatch\_inicia\_name) | Nome do CloudWatch Inicia | `string` | n/a | yes |
| <a name="input_cloudwatch_inicio_description"></a> [cloudwatch\_inicio\_description](#input\_cloudwatch\_inicio\_description) | Descrição para o início do CloudWatch | `string` | n/a | yes |
| <a name="input_description_role_backup"></a> [description\_role\_backup](#input\_description\_role\_backup) | Descrição para função IAM que permite o cofre gerenciar os backups | `string` | n/a | yes |
| <a name="input_desliga_agendamento_cron"></a> [desliga\_agendamento\_cron](#input\_desliga\_agendamento\_cron) | Agendamento em formato cron para desligar a função | `string` | n/a | yes |
| <a name="input_desliga_cloudwatch_desliga_description"></a> [desliga\_cloudwatch\_desliga\_description](#input\_desliga\_cloudwatch\_desliga\_description) | Descrição para o desligamento no CloudWatch | `string` | n/a | yes |
| <a name="input_desliga_cloudwatch_desliga_name"></a> [desliga\_cloudwatch\_desliga\_name](#input\_desliga\_cloudwatch\_desliga\_name) | Nome do CloudWatch para Desligar | `string` | n/a | yes |
| <a name="input_desliga_estado"></a> [desliga\_estado](#input\_desliga\_estado) | Estado da instância ou recurso no processo de desligamento | `string` | n/a | yes |
| <a name="input_desliga_evento_cloudwatch"></a> [desliga\_evento\_cloudwatch](#input\_desliga\_evento\_cloudwatch) | Descrição do evento do CloudWatch para desligamento | `string` | n/a | yes |
| <a name="input_desliga_nome_alvo"></a> [desliga\_nome\_alvo](#input\_desliga\_nome\_alvo) | Nome do alvo da função ou evento de desligamento | `string` | n/a | yes |
| <a name="input_desliga_statement_id"></a> [desliga\_statement\_id](#input\_desliga\_statement\_id) | ID do statement para a política de desligamento | `string` | n/a | yes |
| <a name="input_estado"></a> [estado](#input\_estado) | Estado da instância ou recurso | `string` | n/a | yes |
| <a name="input_evento_cloudwatch"></a> [evento\_cloudwatch](#input\_evento\_cloudwatch) | Descrição do evento do CloudWatch | `string` | n/a | yes |
| <a name="input_force_destruir"></a> [force\_destruir](#input\_force\_destruir) | Flag para forçar a destruição | `bool` | n/a | yes |
| <a name="input_inicio_manutencao"></a> [inicio\_manutencao](#input\_inicio\_manutencao) | Data e hora de início da manutenção | `number` | n/a | yes |
| <a name="input_janela_manutencao"></a> [janela\_manutencao](#input\_janela\_manutencao) | Janela de tempo para a manutenção | `number` | n/a | yes |
| <a name="input_nome_alvo"></a> [nome\_alvo](#input\_nome\_alvo) | Nome do alvo da função ou evento | `string` | n/a | yes |
| <a name="input_nome_cofre"></a> [nome\_cofre](#input\_nome\_cofre) | Nome do Cofre | `string` | n/a | yes |
| <a name="input_nome_funcao_desliga"></a> [nome\_funcao\_desliga](#input\_nome\_funcao\_desliga) | description | `string` | n/a | yes |
| <a name="input_nome_funcao_inicia"></a> [nome\_funcao\_inicia](#input\_nome\_funcao\_inicia) | description | `string` | n/a | yes |
| <a name="input_nome_plano_backup"></a> [nome\_plano\_backup](#input\_nome\_plano\_backup) | Nome do plano de backup | `string` | n/a | yes |
| <a name="input_nome_regra"></a> [nome\_regra](#input\_nome\_regra) | Nome da regra | `string` | n/a | yes |
| <a name="input_nome_role_backup"></a> [nome\_role\_backup](#input\_nome\_role\_backup) | Nome da role/função para permitir o AWSBackup gerenciar os pontos de restauração | `string` | n/a | yes |
| <a name="input_nome_selecao_alvo_tag"></a> [nome\_selecao\_alvo\_tag](#input\_nome\_selecao\_alvo\_tag) | Nome da tag do alvo de seleção | `string` | n/a | yes |
| <a name="input_numero_de_ec2"></a> [numero\_de\_ec2](#input\_numero\_de\_ec2) | Quantidade de instancias EC2 a ser provisionada | `number` | n/a | yes |
| <a name="input_policy_description"></a> [policy\_description](#input\_policy\_description) | description | `string` | n/a | yes |
| <a name="input_policy_name"></a> [policy\_name](#input\_policy\_name) | Nome da politica | `string` | n/a | yes |
| <a name="input_quantidade_dias_para_delecao"></a> [quantidade\_dias\_para\_delecao](#input\_quantidade\_dias\_para\_delecao) | Quantidade de dias para a deleção | `number` | n/a | yes |
| <a name="input_rastreio_log"></a> [rastreio\_log](#input\_rastreio\_log) | description | `string` | n/a | yes |
| <a name="input_role_description"></a> [role\_description](#input\_role\_description) | Nome da role | `string` | n/a | yes |
| <a name="input_role_name"></a> [role\_name](#input\_role\_name) | Nome da Funcao | `string` | n/a | yes |
| <a name="input_selecao_recurso_tag_key"></a> [selecao\_recurso\_tag\_key](#input\_selecao\_recurso\_tag\_key) | Chave da tag para seleção de recurso | `string` | n/a | yes |
| <a name="input_selecao_recurso_tag_type"></a> [selecao\_recurso\_tag\_type](#input\_selecao\_recurso\_tag\_type) | Tipo da tag para seleção de recurso | `string` | n/a | yes |
| <a name="input_selecao_recurso_tag_value"></a> [selecao\_recurso\_tag\_value](#input\_selecao\_recurso\_tag\_value) | Valor da tag para seleção de recurso | `string` | n/a | yes |
| <a name="input_statement_id"></a> [statement\_id](#input\_statement\_id) | ID do statement para a política | `string` | n/a | yes |
| <a name="input_tamanho_memoria"></a> [tamanho\_memoria](#input\_tamanho\_memoria) | description | `number` | n/a | yes |
| <a name="input_timeout"></a> [timeout](#input\_timeout) | description | `number` | n/a | yes |
| <a name="input_tipo_instancia"></a> [tipo\_instancia](#input\_tipo\_instancia) | Tipo de instancia EC2 a ser provisionada | `string` | n/a | yes |

## Outputs

No outputs.
<!-- END_TF_DOCS -->
137 changes: 104 additions & 33 deletions main.tf
Original file line number Diff line number Diff line change
@@ -1,63 +1,134 @@
module "instancias" {
source = "[email protected]:Victor-Borges-Silva/Modulo-instancias.git?ref=v1.0.2"
numero_de_ec2 = 3
#source = "[email protected]:Victor-Borges-Silva/Modulo-instancias.git?ref=v1.0.4"
source = "../Modulo-instancias/"

numero_de_ec2 = var.numero_de_ec2
tipo_instancia = var.tipo_instancia

#for_each = { for atributo in var.tags : atributo.Name => atributo }
#tags = {
# Name = each.value.Name
# Terraform = each.value.Terraform
# Environment = each.value.Environment
# Backup = each.value.Backup
#}

tags = {
Name = "Teste"
Name = "Projeto_Final"
Terraform = "Sim"
Environment = "Dev"
Backup = "true"
}

}


module "iam_policy_role" {
source = "[email protected]:Victor-Borges-Silva/Modulo-iam.git?ref=v1.0.1"
#source = "[email protected]:Victor-Borges-Silva/Modulo-iam.git?ref=v1.0.5"
source = "../Modulo-iam/"
# for_each = { for idx, atributo in var.modulo_iam_policy_role : idx.atributo => idx }
#
# #Criação da politica para EC2
# policy_name = each.value.policy_name
# policy_description = each.value.policy_description
#
# #Criação da role para EC2
# role_name = each.value.role_name
# role_description = each.value.role_description
#
# #Criação de role para AWSBackup
# nome_role_backup = each.value.nome_role_backup
# description_role_backup = each.value.description_role_backup

#Criação da politica
policy_name = "Inicia_Desliga_EC2"
policy_description = "Policy que permite o Lambda a desligar e ligar as instâncias EC2"
#Criação da politica para EC2
policy_name = var.policy_name
policy_description = var.policy_description

#Criação da Role
role_name = "Inicia_Desliga_EC2"
role_description = "Função que permite o Lambda a desligar e ligar as instâncias EC2"
#Criação da role para EC2
role_name = var.role_name
role_description = var.role_description

#Criação de role para AWSBackup
nome_role_backup = var.nome_role_backup
description_role_backup = var.description_role_backup
}

locals {
instance_id = tolist(module.instancias.instance_id)
}

module "lambda_inicia" {
#source = "../../../Modulo-lambda-inicia"
source = "[email protected]:Victor-Borges-Silva/Modulo-lambda-inicia.git?ref=v1.0.2"
nome_funcao_inicia = "IniciaEC2"
instancia_id = module.instancias.instance_id
role = module.iam_policy_role.iam_role_arn
#source = "[email protected]:Victor-Borges-Silva/Modulo-lambda-inicia.git?ref=v1.0.5"
source = "../Modulo-lambda-inicia/"
nome_funcao_inicia = var.nome_funcao_inicia
instancia_id = local.instance_id
role = module.iam_policy_role.iam_role_arn_ec2
tamanho_memoria = var.tamanho_memoria
timeout = var.timeout
armazenamento_temporario = var.armazenamento_temporario
rastreio_log = var.rastreio_log

depends_on = [module.iam_policy_role]
}

module "lambda_desliga" {
#source = "../../../Modulo-lambda-desliga"
source = "[email protected]:Victor-Borges-Silva/Modulo-lambda-desliga.git?ref=v1.0.2"
nome_funcao_desliga = "DesligaEC2"
instancia_id = module.instancias.instance_id
role = module.iam_policy_role.iam_role_arn
#source = "[email protected]:Victor-Borges-Silva/Modulo-lambda-desliga.git?ref=v1.0.4"
source = "../Modulo-lambda-desliga/"
nome_funcao_desliga = var.nome_funcao_desliga
instancia_id = local.instance_id
role = module.iam_policy_role.iam_role_arn_ec2
tamanho_memoria = var.tamanho_memoria
timeout = var.timeout
armazenamento_temporario = var.armazenamento_temporario
rastreio_log = var.rastreio_log

depends_on = [module.iam_policy_role]
}

module "cloudwatch_inicia" {
#source = "../../../Modulo-cloudwatch-inicia"
source = "[email protected]:Victor-Borges-Silva/Modulo-cloudwatch-inicia.git?ref=v1.0.1"
cloudwatch_inicia_name = "Horario_de_inicio"
cloudwatch_inicio_description = "Agendamento para desligar as instancias"
aws_region_inicia = "us-west-1"
statement_id = "permite_EventBridge_executar_lambda_inicia"
#source = "[email protected]:Victor-Borges-Silva/Modulo-cloudwatch-inicia.git?ref=v1.0.3"
source = "../Modulo-cloudwatch-inicia/"
cloudwatch_inicia_name = var.cloudwatch_inicia_name
agendamento_cron = var.agendamento_cron
estado = var.estado
evento_cloudwatch = var.evento_cloudwatch
cloudwatch_inicio_description = var.cloudwatch_inicio_description
statement_id = var.statement_id
nome_alvo = var.nome_alvo
lambda_function_arn_inicia = module.lambda_inicia.lambda_function_arn
lambda_function_name_inicia = module.lambda_inicia.lambda_function_name_inicia
}

module "cloudwatch_desliga" {
#source = "../../../Modulo-cloudwatch-desliga"
source = "[email protected]:Victor-Borges-Silva/Modulo-cloudwatch-desliga.git?ref=v1.0.1"
cloudwatch_desliga_name = "Horario_de_desligamento"
cloudwatch_desliga_description = "Agendamento para desligar as instancias"
aws_region_desliga = "us-west-1"
statement_id = "permite_EventBridge_executar_lambda_desliga"
#source = "[email protected]:Victor-Borges-Silva/Modulo-cloudwatch-desliga.git?ref=v1.0.3"
source = "../Modulo-cloudwatch-desliga/"
cloudwatch_desliga_name = var.desliga_cloudwatch_desliga_name
agendamento_cron = var.desliga_agendamento_cron
estado = var.desliga_estado
evento_cloudwatch = var.desliga_evento_cloudwatch
cloudwatch_desliga_description = var.desliga_cloudwatch_desliga_description
statement_id = var.desliga_statement_id
nome_alvo = var.desliga_nome_alvo
lambda_function_arn_desliga = module.lambda_desliga.lambda_function_arn
lambda_function_name_desliga = module.lambda_desliga.lambda_function_name_desliga
}
}

module "Backup" {
#source = "[email protected]:Victor-Borges-Silva/Modulo-bakcup.git?ref=v1.0.4"
source = "../Modulo-bakcup/"
nome_cofre = var.nome_cofre
force_destruir = var.force_destruir
nome_plano_backup = var.nome_plano_backup
nome_regra = var.nome_regra
agendamento_backup = var.agendamento_backup # agendametno é feito conforme horário UTC +00
inicio_manutencao = var.inicio_manutencao #Especifique(em minutos) o período em que o plano de backup será iniciado, caso não comece no horário especificado.
janela_manutencao = var.janela_manutencao #Defina(em minutos) o período durante o qual o backup deve ser concluído antes de retornar qualquer erro por timeout.
quantidade_dias_para_delecao = var.quantidade_dias_para_delecao
nome_selecao_alvo_tag = var.nome_selecao_alvo_tag
iam_role_arn_backup = module.iam_policy_role.iam_role_arn_backup
selecao_recurso_tag_type = var.selecao_recurso_tag_type
selecao_recurso_tag_key = var.selecao_recurso_tag_key
selecao_recurso_tag_value = var.selecao_recurso_tag_value

depends_on = [module.iam_policy_role]
}
10 changes: 7 additions & 3 deletions outputs.tf
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
output "ARN_iam_role" {
value = module.iam_policy_role.iam_role_arn
}
#output "ARN_iam_role" {
# value = module.iam_policy_role.Inicia_Desliga_EC2.arn
#}

#output "instance_id" {
# value = module.instancias.web.id
#}
Binary file removed plano
Binary file not shown.
8 changes: 5 additions & 3 deletions provider.tf
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
terraform {
# backend "s3" {
# bucket = "descomplicando-terraform-turma-2024" #nome do bucket
# key = "aula_backend"
# region = "us-east-1"
# bucket = "descomplicando-terraform-turma-2024-vborges" #nome do bucket
# key = "projeto_final"
# region = "us-west-1"
# }
backend "local" {
}

required_providers {
aws = {
Expand Down
Loading

0 comments on commit 7535bc1

Please sign in to comment.