Providers Populares
AWS Provider
Copy
Ask AI
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
provider "aws" {
region = "us-east-1"
default_tags {
tags = {
ManagedBy = "Terraform"
Project = "MyProject"
}
}
}
Recursos Comuns AWS
Copy
Ask AI
# S3 Bucket
resource "aws_s3_bucket" "app" {
bucket = "my-unique-bucket-name"
versioning {
enabled = true
}
lifecycle_rule {
enabled = true
transition {
days = 30
storage_class = "STANDARD_IA"
}
}
}
# RDS Database
resource "aws_db_instance" "app" {
identifier = "my-db"
engine = "postgres"
engine_version = "15.4"
instance_class = "db.t3.micro"
allocated_storage = 20
max_allocated_storage = 100
db_name = "myapp"
username = var.db_username
password = var.db_password
vpc_security_group_ids = [aws_security_group.rds.id]
db_subnet_group_name = aws_db_subnet_group.app.name
backup_retention_period = 7
skip_final_snapshot = true
}
# ALB
resource "aws_lb" "app" {
name = "my-alb"
internal = false
load_balancer_type = "application"
security_groups = [aws_security_group.alb.id]
subnets = data.aws_subnets.public.ids
}
resource "aws_lb_target_group" "app" {
name = "my-tg"
port = 80
protocol = "HTTP"
vpc_id = aws_vpc.app.id
health_check {
path = "/health"
interval = 30
timeout = 5
healthy_threshold = 2
unhealthy_threshold = 2
}
}
resource "aws_lb_listener" "app" {
load_balancer_arn = aws_lb.app.arn
port = 80
protocol = "HTTP"
default_action {
type = "forward"
target_group_arn = aws_lb_target_group.app.arn
}
}
# EKS Cluster
resource "aws_eks_cluster" "app" {
name = "my-cluster"
role_arn = aws_iam_role.cluster.arn
version = "1.27"
vpc_config {
subnet_ids = aws_subnet.private[*].id
endpoint_private_access = true
endpoint_public_access = true
}
depends_on = [
aws_iam_role_policy_attachment.cluster_policy
]
}
Google Cloud Provider
Copy
Ask AI
provider "google" {
project = "my-project-id"
region = "us-central1"
}
# GKE Cluster
resource "google_container_cluster" "primary" {
name = "my-cluster"
location = "us-central1-a"
node_pool {
name = "default-pool"
node_count = 3
node_config {
machine_type = "e2-medium"
oauth_scopes = [
"https://www.googleapis.com/auth/cloud-platform"
]
}
}
}
# Cloud SQL
resource "google_sql_database_instance" "app" {
name = "my-instance"
database_version = "POSTGRES_15"
region = "us-central1"
settings {
tier = "db-f1-micro"
ip_configuration {
authorized_networks {
name = "all"
value = "0.0.0.0/0"
}
}
}
}
Azure Provider
Copy
Ask AI
provider "azurerm" {
features {}
use_oidc = true
}
# Resource Group
resource "azurerm_resource_group" "app" {
name = "my-resource-group"
location = "brazilsouth"
}
# Virtual Network
resource "azurerm_virtual_network" "app" {
name = "my-vnet"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.app.location
resource_group_name = azurerm_resource_group.app.name
}
# AKS
resource "azurerm_kubernetes_cluster" "app" {
name = "my-aks"
location = azurerm_resource_group.app.location
resource_group_name = azurerm_resource_group.app.name
dns_prefix = "myaks"
default_node_pool {
name = "default"
node_count = 3
vm_size = "Standard_D2_v2"
}
identity {
type = "SystemAssigned"
}
}
Kubernetes Provider
Copy
Ask AI
provider "kubernetes" {
host = aws_eks_cluster.app.endpoint
cluster_ca_certificate = base64decode(aws_eks_cluster.app.certificate_authority[0].data)
token = data.aws_eks_cluster_auth.app.token
}
resource "kubernetes_namespace" "app" {
metadata {
name = "myapp"
}
}
resource "kubernetes_deployment" "app" {
metadata {
name = "myapp"
namespace = kubernetes_namespace.app.metadata[0].name
}
spec {
replicas = 3
selector {
match_labels = {
app = "myapp"
}
}
template {
metadata {
labels = {
app = "myapp"
}
}
spec {
container {
image = "nginx:latest"
name = "myapp"
port {
container_port = 80
}
}
}
}
}
}
Helm Provider
Copy
Ask AI
provider "helm" {
kubernetes {
host = aws_eks_cluster.app.endpoint
cluster_ca_certificate = base64decode(aws_eks_cluster.app.certificate_authority[0].data)
token = data.aws_eks_cluster_auth.app.token
}
}
resource "helm_release" "nginx" {
name = "nginx-ingress"
repository = "https://kubernetes.github.io/ingress-nginx"
chart = "ingress-nginx"
namespace = "ingress-nginx"
set {
name = "controller.service.type"
value = "LoadBalancer"
}
}