Skip to content

Commit

Permalink
Merge pull request #2 from ThiagoPanini/feature/mvp-dynamodb-table-mo…
Browse files Browse the repository at this point in the history
…dule

feat: primeira versão básica e funcional para criação de tabelas no DynamoDB
  • Loading branch information
ThiagoPanini authored Feb 19, 2025
2 parents 9fea485 + 61709f3 commit 3c7cee4
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 2 deletions.
48 changes: 47 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,47 @@
# TF Modules Showcase
<div align="center">
<br><img src="https://github.com/ThiagoPanini/tf-modules-showcase/blob/feature/mvp-dynamodb-table-module/docs/logo.png?raw=true" width=200 alt="tf-modules-showcase-logo">
</div>

<div align="center">

<a href="https://www.terraform.io/">
<img src="https://img.shields.io/badge/terraform-grey?style=for-the-badge&logo=terraform&logoColor=B252D0">
</a>

<a href="https://aws.amazon.com/">
<img src="https://img.shields.io/badge/aws-grey?style=for-the-badge&logo=amazon-web-services&logoColor=B252D0">
</a>

<a href="https://github.com/">
<img src="https://img.shields.io/badge/github-grey?style=for-the-badge&logo=github&logoColor=B252D0">
</a>
</div>

___

<div align="center">
<br>
</div>

## Visão Geral

A iniciativa **Terraform Modules Showcase** visa consolidar uma série de módulos Terraform criados mediante a necessidades reais de implantação de recursos em *cloud providers*.

Em estudos ou situações práticas de trabalho envolvendo computação em nuvem, serviços precisam ser criados em *workspaces* para atender determinadas exigências de uma aplicação. Em muitos casos, a dinâmica de implementação de alguns desses serviços não envolve, necessariamente, a definição pura e individual de recursos Terraform.

Exemplificando em outras palavras, a devida implementação de um [Glue job](https://docs.aws.amazon.com/pt_br/glue/latest/dg/what-is-glue.html) na AWS dificilmente será alcançada apenas através da reclaração do recurso Terraform [aws_glue_job](https://registry.terraform.io/providers/hashicorp/aws/2.70.1/docs/resources/glue_job), mas também de outros recursos adicionais, como [aws_glue_security_configuration](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/glue_security_configuration) para configurações de segurança do job ou até mesmo [aws_s3_bucket_object](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/s3_bucket_object) para *upload* de *assets* utilizados no ETL.

Inspirado pelo compilado de módulos Terraform disponível em [github/terraform-aws-modules](https://github.com/terraform-aws-modules) e, visando aprimorar os conhecimentos em modularização de recursos em Terraform, este repositório tem como objetivo consolidar diferentes módulos Terraform criados para atender as mais variadas necessidades práticas encontradas em experiências reais vividas nos mundos de Engenharia de Dados, Analytics e Plataforma.

> 🚀 Sempre que um novo recurso precisar ser explorado a níveis de projetos pessoais ou corporativos, eventualmente a dinâmica prática de sua implementação será transformada em um novo módulo neste repositório.
## Documentações dos Módulos

📚 O repositório foi pré configurado para lançar novas *releases* dos módulos construídos de forma automática através da *action* [terraform-module-releaser](https://github.com/techpivot/terraform-module-releaser). Para verificar as versões e todos os detalhes de documentação disponíveis, acesse a [wiki do repositório](https://github.com/ThiagoPanini/tf-modules-showcase/wiki).

## Entre em Contato

- GitHub: [@ThiagoPanini](https://github.com/ThiagoPanini)
- LinkedIn: [Thiago Panini](https://www.linkedin.com/in/thiago-panini/)
- Hashnode: [panini-tech-lab](https://panini.hashnode.dev/)
- DevTo: [thiagopanini](https://dev.to/thiagopanini)
11 changes: 11 additions & 0 deletions aws/dynamodb-table/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,16 @@ e implantação de uma tabela pré configurada no DynamoDB.
resource "aws_dynamodb_table" "this" {
name = var.name
billing_mode = var.billing_mode
hash_key = var.hash_key
range_key = var.range_key

dynamic "attribute" {
for_each = var.attributes

content {
name = attribute.value.name
type = attribute.value.type
}
}

}
27 changes: 26 additions & 1 deletion aws/dynamodb-table/variables.tf
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,35 @@ definição e criação de tabelas no DynamoDB
-------------------------------------------------------- */

variable "name" {
description = "[REQUIRED] Nome da tabela a ser criada no DynamoDB"
description = "Nome da tabela a ser criada no DynamoDB"
type = string
}

variable "hash_key" {
description = "Nome de atributo a ser utilizado como chave primária (hash key) da tabela"
type = string
}

variable "range_key" {
description = "Nome de atributo a ser utilizado como segunda parte da chave secundária (range key) da tabela"
type = string
default = null
}

variable "attributes" {
description = "Lista de maps contendo informações sobre os atributos da tabela. Todos os índices definidos para a tabela (hash key e range key) devem, obrigatoriamente, estarem contidos como elementos dessa lista de atributos."
type = list(map(string))
default = []

validation {
condition = alltrue([
for type in distinct([
for attribute_map in var.attributes : attribute_map.type
]) : contains(["S", "N", "B"], type)
])
error_message = "Os atributos de uma tabela do DynamoDB precisam ser definidos com tipos primitivos que referem-se a: 'S' para strings, 'N' para numéricos e 'B' para binários."
}
}

variable "billing_mode" {
description = "Tipo de cobrança associada ao consumo dos itens da tabela criada"
Expand Down
Binary file added docs/logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 3c7cee4

Please sign in to comment.