====== Terraform AWS - básico ====== ==== Definindo o provider ==== $ mkdir -p terraform/aws terraform { required_providers { aws = { source = "hashicorp/aws" version = "5.14.0" } } } provider "aws" { region = "us-east-2" access_key = "AKI..." secret_key = "RrV..." default_tags { tags = { Environment = "Lab" Terraform = "yes" } } } ==== Criando uma VPC ==== resource "aws_vpc" "us-east-tf-vpc" { cidr_block = "10.22.0.0/16" enable_dns_support = true enable_dns_hostnames = true tags = { Name = "us-east-tf-vpc" } } $ terraform init Initializing the backend... Initializing provider plugins... - Finding hashicorp/aws versions matching "5.14.0"... - Installing hashicorp/aws v5.14.0... - Installed hashicorp/aws v5.14.0 (signed by HashiCorp) Terraform has created a lock file .terraform.lock.hcl to record the provider selections it made above. Include this file in your version control repository so that Terraform can guarantee to make the same selections by default when you run "terraform init" in the future. Terraform has been successfully initialized! You may now begin working with Terraform. Try running "terraform plan" to see any changes that are required for your infrastructure. All Terraform commands should now work. If you ever set or change modules or backend configuration for Terraform, rerun this command to reinitialize your working directory. If you forget, other commands will detect it and remind you to do so if necessary. $ terraform fmt 00-provider.tf $ terraform validate Success! The configuration is valid. $ terraform plan Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # aws_vpc.us-east-tf-vpc will be created + resource "aws_vpc" "us-east-tf-vpc" { + arn = (known after apply) + cidr_block = "10.22.0.0/16" + default_network_acl_id = (known after apply) + default_route_table_id = (known after apply) + default_security_group_id = (known after apply) + dhcp_options_id = (known after apply) + enable_dns_hostnames = true + enable_dns_support = true + enable_network_address_usage_metrics = (known after apply) + id = (known after apply) + instance_tenancy = "default" + ipv6_association_id = (known after apply) + ipv6_cidr_block = (known after apply) + ipv6_cidr_block_network_border_group = (known after apply) + main_route_table_id = (known after apply) + owner_id = (known after apply) + tags = { + "Name" = "us-east-tf-vpc" } + tags_all = { + "Environment" = "Lab" + "Name" = "us-east-tf-vpc" + "Terraform" = "yes" } } Plan: 1 to add, 0 to change, 0 to destroy. ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now. $ terraform apply Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # aws_vpc.us-east-tf-vpc will be created + resource "aws_vpc" "us-east-tf-vpc" { + arn = (known after apply) + cidr_block = "10.22.0.0/16" + default_network_acl_id = (known after apply) + default_route_table_id = (known after apply) + default_security_group_id = (known after apply) + dhcp_options_id = (known after apply) + enable_dns_hostnames = true + enable_dns_support = true + enable_network_address_usage_metrics = (known after apply) + id = (known after apply) + instance_tenancy = "default" + ipv6_association_id = (known after apply) + ipv6_cidr_block = (known after apply) + ipv6_cidr_block_network_border_group = (known after apply) + main_route_table_id = (known after apply) + owner_id = (known after apply) + tags = { + "Name" = "us-east-tf-vpc" } + tags_all = { + "Environment" = "Lab" + "Name" = "us-east-tf-vpc" + "Terraform" = "yes" } } Plan: 1 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes aws_vpc.us-east-tf-vpc: Creating... aws_vpc.us-east-tf-vpc: Still creating... [10s elapsed] aws_vpc.us-east-tf-vpc: Creation complete after 14s [id=vpc-0da4f5c6f6db12a12] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. **Consultando o ID da VPC** $ terraform state list aws_vpc.us-east-tf-vpc $ terraform state show aws_vpc.us-east-tf-vpc # aws_vpc.us-east-tf-vpc: resource "aws_vpc" "us-east-tf-vpc" { arn = "arn:aws:ec2:us-east-2:662644875436:vpc/vpc-0da4f5c6f6db12a12" assign_generated_ipv6_cidr_block = false cidr_block = "10.22.0.0/16" default_network_acl_id = "acl-0fbe42b1767a6ff7b" default_route_table_id = "rtb-01c135cec424c4457" default_security_group_id = "sg-0a1b27de005d0e907" dhcp_options_id = "dopt-0251f420400d60db9" enable_dns_hostnames = true enable_dns_support = true enable_network_address_usage_metrics = false id = "vpc-0da4f5c6f6db12a12" instance_tenancy = "default" ipv6_netmask_length = 0 main_route_table_id = "rtb-01c135cec424c4457" owner_id = "662644875436" tags = { "Name" = "us-east-tf-vpc" } tags_all = { "Environment" = "Lab" "Name" = "us-east-tf-vpc" "Terraform" = "yes" } } ==== Criando recursos ==== resource "aws_internet_gateway" "us-east-tf-gw" { vpc_id = "vpc-0da4f5c6f6db12a12" tags = { Name = "us-east-tf-gw" } } $ terraform apply aws_vpc.us-east-tf-vpc: Refreshing state... [id=vpc-0da4f5c6f6db12a12] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # aws_internet_gateway.us-east-tf-gw will be created + resource "aws_internet_gateway" "us-east-tf-gw" { + arn = (known after apply) + id = (known after apply) + owner_id = (known after apply) + tags = { + "Name" = "us-east-tf-gw" } + tags_all = { + "Environment" = "Lab" + "Name" = "us-east-tf-gw" + "Terraform" = "yes" } + vpc_id = "vpc-0da4f5c6f6db12a12" } Plan: 1 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes aws_internet_gateway.us-east-tf-gw: Creating... aws_internet_gateway.us-east-tf-gw: Creation complete after 2s [id=igw-052948fe8f76be6c3] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. **Consultando o ID do gateway** $ terraform state list aws_internet_gateway.us-east-tf-gw aws_vpc.us-east-tf-vpc $ terraform state show aws_internet_gateway.us-east-tf-gw # aws_internet_gateway.us-east-tf-gw: resource "aws_internet_gateway" "us-east-tf-gw" { arn = "arn:aws:ec2:us-east-2:662644875436:internet-gateway/igw-052948fe8f76be6c3" id = "igw-052948fe8f76be6c3" owner_id = "662644875436" tags = { "Name" = "us-east-tf-gw" } tags_all = { "Environment" = "Lab" "Name" = "us-east-tf-gw" "Terraform" = "yes" } vpc_id = "vpc-0da4f5c6f6db12a12" } resource "aws_internet_gateway" "us-east-tf-gw" { vpc_id = "vpc-0da4f5c6f6db12a12" tags = { Name = "us-east-tf-gw" } } resource "aws_route_table" "us-east-tf-rt-public" { vpc_id = "vpc-0da4f5c6f6db12a12" route { cidr_block = "0.0.0.0/0" gateway_id = "igw-052948fe8f76be6c3" } tags = { Name = "us-east-tf-rt-public" } } $ terraform plan aws_internet_gateway.us-east-tf-gw: Refreshing state... [id=igw-052948fe8f76be6c3] aws_vpc.us-east-tf-vpc: Refreshing state... [id=vpc-0da4f5c6f6db12a12] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # aws_route_table.us-east-tf-rt-public will be created + resource "aws_route_table" "us-east-tf-rt-public" { + arn = (known after apply) + id = (known after apply) + owner_id = (known after apply) + propagating_vgws = (known after apply) + route = [ + { + carrier_gateway_id = "" + cidr_block = "0.0.0.0/0" + core_network_arn = "" + destination_prefix_list_id = "" + egress_only_gateway_id = "" + gateway_id = "igw-052948fe8f76be6c3" + ipv6_cidr_block = "" + local_gateway_id = "" + nat_gateway_id = "" + network_interface_id = "" + transit_gateway_id = "" + vpc_endpoint_id = "" + vpc_peering_connection_id = "" }, ] + tags = { + "Name" = "us-east-tf-rt-public" } + tags_all = { + "Environment" = "Lab" + "Name" = "us-east-tf-rt-public" + "Terraform" = "yes" } + vpc_id = "vpc-0da4f5c6f6db12a12" } Plan: 1 to add, 0 to change, 0 to destroy. ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now. $ terraform apply aws_internet_gateway.us-east-tf-gw: Refreshing state... [id=igw-052948fe8f76be6c3] aws_vpc.us-east-tf-vpc: Refreshing state... [id=vpc-0da4f5c6f6db12a12] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # aws_route_table.us-east-tf-rt-public will be created + resource "aws_route_table" "us-east-tf-rt-public" { + arn = (known after apply) + id = (known after apply) + owner_id = (known after apply) + propagating_vgws = (known after apply) + route = [ + { + carrier_gateway_id = "" + cidr_block = "0.0.0.0/0" + core_network_arn = "" + destination_prefix_list_id = "" + egress_only_gateway_id = "" + gateway_id = "igw-052948fe8f76be6c3" + ipv6_cidr_block = "" + local_gateway_id = "" + nat_gateway_id = "" + network_interface_id = "" + transit_gateway_id = "" + vpc_endpoint_id = "" + vpc_peering_connection_id = "" }, ] + tags = { + "Name" = "us-east-tf-rt-public" } + tags_all = { + "Environment" = "Lab" + "Name" = "us-east-tf-rt-public" + "Terraform" = "yes" } + vpc_id = "vpc-0da4f5c6f6db12a12" } Plan: 1 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes aws_route_table.us-east-tf-rt-public: Creating... aws_route_table.us-east-tf-rt-public: Creation complete after 2s [id=rtb-0286ae2521f3181ab] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. resource "aws_subnet" "us-east-2a-tf-public_subnet" { vpc_id = "vpc-0da4f5c6f6db12a12" cidr_block = "10.22.100.0/24" availability_zone = "us-east-2a" map_public_ip_on_launch = true tags = { Name = "us-east-2a-tf-public_subnet" } } resource "aws_subnet" "us-east-2a-tf-private_subnet" { vpc_id = "vpc-0da4f5c6f6db12a12" cidr_block = "10.22.200.0/24" availability_zone = "us-east-2a" tags = { Name = "us-east-2a-tf-private_subnet" } } $ terraform apply aws_internet_gateway.us-east-tf-gw: Refreshing state... [id=igw-052948fe8f76be6c3] aws_route_table.us-east-tf-rt-public: Refreshing state... [id=rtb-0286ae2521f3181ab] aws_vpc.us-east-tf-vpc: Refreshing state... [id=vpc-0da4f5c6f6db12a12] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # aws_subnet.us-east-2a-tf-private_subnet will be created + resource "aws_subnet" "us-east-2a-tf-private_subnet" { + arn = (known after apply) + assign_ipv6_address_on_creation = false + availability_zone = "us-east-2a" + availability_zone_id = (known after apply) + cidr_block = "10.22.200.0/24" + enable_dns64 = false + enable_resource_name_dns_a_record_on_launch = false + enable_resource_name_dns_aaaa_record_on_launch = false + id = (known after apply) + ipv6_cidr_block_association_id = (known after apply) + ipv6_native = false + map_public_ip_on_launch = false + owner_id = (known after apply) + private_dns_hostname_type_on_launch = (known after apply) + tags = { + "Name" = "us-east-2a-tf-private_subnet" } + tags_all = { + "Environment" = "Lab" + "Name" = "us-east-2a-tf-private_subnet" + "Terraform" = "yes" } + vpc_id = "vpc-0da4f5c6f6db12a12" } # aws_subnet.us-east-2a-tf-public_subnet will be created + resource "aws_subnet" "us-east-2a-tf-public_subnet" { + arn = (known after apply) + assign_ipv6_address_on_creation = false + availability_zone = "us-east-2a" + availability_zone_id = (known after apply) + cidr_block = "10.22.100.0/24" + enable_dns64 = false + enable_resource_name_dns_a_record_on_launch = false + enable_resource_name_dns_aaaa_record_on_launch = false + id = (known after apply) + ipv6_cidr_block_association_id = (known after apply) + ipv6_native = false + map_public_ip_on_launch = true + owner_id = (known after apply) + private_dns_hostname_type_on_launch = (known after apply) + tags = { + "Name" = "us-east-2a-tf-public_subnet" } + tags_all = { + "Environment" = "Lab" + "Name" = "us-east-2a-tf-public_subnet" + "Terraform" = "yes" } + vpc_id = "vpc-0da4f5c6f6db12a12" } Plan: 2 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes aws_subnet.us-east-2a-tf-private_subnet: Creating... aws_subnet.us-east-2a-tf-public_subnet: Creating... aws_subnet.us-east-2a-tf-private_subnet: Creation complete after 2s [id=subnet-0957e7b3d46ac7f8c] aws_subnet.us-east-2a-tf-public_subnet: Still creating... [10s elapsed] aws_subnet.us-east-2a-tf-public_subnet: Creation complete after 12s [id=subnet-0b0627f1af34d5022] Apply complete! Resources: 2 added, 0 changed, 0 destroyed. ==== Associando a subnete pública a rota ==== $ terraform state list aws_internet_gateway.us-east-tf-gw aws_route_table.us-east-tf-rt-public aws_subnet.us-east-2a-tf-private_subnet aws_subnet.us-east-2a-tf-public_subnet aws_vpc.us-east-tf-vpc $ terraform state show aws_subnet.us-east-2a-tf-public_subnet # aws_subnet.us-east-2a-tf-public_subnet: resource "aws_subnet" "us-east-2a-tf-public_subnet" { arn = "arn:aws:ec2:us-east-2:662644875436:subnet/subnet-0b0627f1af34d5022" assign_ipv6_address_on_creation = false availability_zone = "us-east-2a" availability_zone_id = "use2-az1" cidr_block = "10.22.100.0/24" enable_dns64 = false enable_lni_at_device_index = 0 enable_resource_name_dns_a_record_on_launch = false enable_resource_name_dns_aaaa_record_on_launch = false id = "subnet-0b0627f1af34d5022" ipv6_native = false map_customer_owned_ip_on_launch = false map_public_ip_on_launch = true owner_id = "662644875436" private_dns_hostname_type_on_launch = "ip-name" tags = { "Name" = "us-east-2a-tf-public_subnet" } tags_all = { "Environment" = "Lab" "Name" = "us-east-2a-tf-public_subnet" "Terraform" = "yes" } vpc_id = "vpc-0da4f5c6f6db12a12" } $ terraform state show aws_route_table.us-east-tf-rt-public # aws_route_table.us-east-tf-rt-public: resource "aws_route_table" "us-east-tf-rt-public" { arn = "arn:aws:ec2:us-east-2:662644875436:route-table/rtb-0286ae2521f3181ab" id = "rtb-0286ae2521f3181ab" owner_id = "662644875436" propagating_vgws = [] route = [ { carrier_gateway_id = "" cidr_block = "0.0.0.0/0" core_network_arn = "" destination_prefix_list_id = "" egress_only_gateway_id = "" gateway_id = "igw-052948fe8f76be6c3" ipv6_cidr_block = "" local_gateway_id = "" nat_gateway_id = "" network_interface_id = "" transit_gateway_id = "" vpc_endpoint_id = "" vpc_peering_connection_id = "" }, ] tags = { "Name" = "us-east-tf-rt-public" } tags_all = { "Environment" = "Lab" "Name" = "us-east-tf-rt-public" "Terraform" = "yes" } vpc_id = "vpc-0da4f5c6f6db12a12" } resource "aws_internet_gateway" "us-east-tf-gw" { vpc_id = "vpc-0da4f5c6f6db12a12" tags = { Name = "us-east-tf-gw" } } resource "aws_route_table" "us-east-tf-rt-public" { vpc_id = "vpc-0da4f5c6f6db12a12" route { cidr_block = "0.0.0.0/0" gateway_id = "igw-052948fe8f76be6c3" } tags = { Name = "us-east-tf-rt-public" } } resource "aws_route_table_association" "us-east-tf-rt-public-association" { subnet_id = "subnet-0b0627f1af34d5022" route_table_id = "rtb-0286ae2521f3181ab" } $ terraform apply aws_internet_gateway.us-east-tf-gw: Refreshing state... [id=igw-052948fe8f76be6c3] aws_subnet.us-east-2a-tf-public_subnet: Refreshing state... [id=subnet-0b0627f1af34d5022] aws_subnet.us-east-2a-tf-private_subnet: Refreshing state... [id=subnet-0957e7b3d46ac7f8c] aws_vpc.us-east-tf-vpc: Refreshing state... [id=vpc-0da4f5c6f6db12a12] aws_route_table.us-east-tf-rt-public: Refreshing state... [id=rtb-0286ae2521f3181ab] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # aws_route_table_association.us-east-tf-rt-public-association will be created + resource "aws_route_table_association" "us-east-tf-rt-public-association" { + id = (known after apply) + route_table_id = "rtb-0286ae2521f3181ab" + subnet_id = "subnet-0b0627f1af34d5022" } Plan: 1 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes aws_route_table_association.us-east-tf-rt-public-association: Creating... aws_route_table_association.us-east-tf-rt-public-association: Creation complete after 1s [id=rtbassoc-05923419316f18c4e] Apply complete! Resources: 1 added, 0 changed, 0 destroyed. ==== Criando instâncias ==== resource "aws_instance" "us-east-2a-tf-vm-01" { ami = "ami-0cf0e376c672104d6" instance_type = "t2.micro" associate_public_ip_address = true subnet_id = "subnet-0b0627f1af34d5022" tags = { Name = "us-east-2a-tf-vm-01" } } ==== Criando um secury group ==== resource "aws_security_group" "us-east-tf-sg" { name = "us-east-tf-sg" description = "us-east-tf-sg" vpc_id = "vpc-0da4f5c6f6db12a12" ingress { description = "Allow ICMP" from_port = -1 to_port = -1 protocol = "icmp" cidr_blocks = ["0.0.0.0/0"] } ingress { description = "Allow SSH" from_port = 22 to_port = 22 protocol = "tcp" cidr_blocks = ["0.0.0.0/0"] } egress { from_port = 0 to_port = 0 protocol = "-1" cidr_blocks = ["0.0.0.0/0"] } tags = { Name = "us-east-tf-sg" } } $ terraform apply aws_internet_gateway.us-east-tf-gw: Refreshing state... [id=igw-052948fe8f76be6c3] aws_route_table.us-east-tf-rt-public: Refreshing state... [id=rtb-0286ae2521f3181ab] aws_route_table_association.us-east-tf-rt-public-association: Refreshing state... [id=rtbassoc-05923419316f18c4e] aws_subnet.us-east-2a-tf-private_subnet: Refreshing state... [id=subnet-0957e7b3d46ac7f8c] aws_subnet.us-east-2a-tf-public_subnet: Refreshing state... [id=subnet-0b0627f1af34d5022] aws_vpc.us-east-tf-vpc: Refreshing state... [id=vpc-0da4f5c6f6db12a12] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: + create Terraform will perform the following actions: # aws_instance.us-east-2a-tf-vm-01 will be created + resource "aws_instance" "us-east-2a-tf-vm-01" { + ami = "ami-0cf0e376c672104d6" + arn = (known after apply) + associate_public_ip_address = true + availability_zone = (known after apply) + cpu_core_count = (known after apply) + cpu_threads_per_core = (known after apply) + disable_api_stop = (known after apply) + disable_api_termination = (known after apply) + ebs_optimized = (known after apply) + get_password_data = false + host_id = (known after apply) + host_resource_group_arn = (known after apply) + iam_instance_profile = (known after apply) + id = (known after apply) + instance_initiated_shutdown_behavior = (known after apply) + instance_lifecycle = (known after apply) + instance_state = (known after apply) + instance_type = "t2.micro" + ipv6_address_count = (known after apply) + ipv6_addresses = (known after apply) + key_name = (known after apply) + monitoring = (known after apply) + outpost_arn = (known after apply) + password_data = (known after apply) + placement_group = (known after apply) + placement_partition_number = (known after apply) + primary_network_interface_id = (known after apply) + private_dns = (known after apply) + private_ip = (known after apply) + public_dns = (known after apply) + public_ip = (known after apply) + secondary_private_ips = (known after apply) + security_groups = (known after apply) + source_dest_check = true + spot_instance_request_id = (known after apply) + subnet_id = "subnet-0b0627f1af34d5022" + tags = { + "Name" = "us-east-2a-tf-vm-01" } + tags_all = { + "Environment" = "Lab" + "Name" = "us-east-2a-tf-vm-01" + "Terraform" = "yes" } + tenancy = (known after apply) + user_data = (known after apply) + user_data_base64 = (known after apply) + user_data_replace_on_change = false + vpc_security_group_ids = (known after apply) } # aws_security_group.us-east-tf-sg will be created + resource "aws_security_group" "us-east-tf-sg" { + arn = (known after apply) + description = "us-east-tf-sg" + egress = [ + { + cidr_blocks = [ + "0.0.0.0/0", ] + description = "" + from_port = 0 + ipv6_cidr_blocks = [] + prefix_list_ids = [] + protocol = "-1" + security_groups = [] + self = false + to_port = 0 }, ] + id = (known after apply) + ingress = [ + { + cidr_blocks = [ + "0.0.0.0/0", ] + description = "Allow ICMP" + from_port = -1 + ipv6_cidr_blocks = [] + prefix_list_ids = [] + protocol = "icmp" + security_groups = [] + self = false + to_port = -1 }, + { + cidr_blocks = [ + "0.0.0.0/0", ] + description = "Allow SSH" + from_port = 22 + ipv6_cidr_blocks = [] + prefix_list_ids = [] + protocol = "tcp" + security_groups = [] + self = false + to_port = 22 }, ] + name = "us-east-tf-sg" + name_prefix = (known after apply) + owner_id = (known after apply) + revoke_rules_on_delete = false + tags = { + "Name" = "us-east-tf-sg" } + tags_all = { + "Environment" = "Lab" + "Name" = "us-east-tf-sg" + "Terraform" = "yes" } + vpc_id = "vpc-0da4f5c6f6db12a12" } Plan: 2 to add, 0 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes aws_security_group.us-east-tf-sg: Creating... aws_instance.us-east-2a-tf-vm-01: Creating... aws_security_group.us-east-tf-sg: Creation complete after 5s [id=sg-08e5c60c51926286d] aws_instance.us-east-2a-tf-vm-01: Still creating... [10s elapsed] aws_instance.us-east-2a-tf-vm-01: Still creating... [20s elapsed] aws_instance.us-east-2a-tf-vm-01: Creation complete after 25s [id=i-0670a1d1fea3a2e01] Apply complete! Resources: 2 added, 0 changed, 0 destroyed. ==== Associando o secury group a instância ==== $ terraform state list aws_instance.us-east-2a-tf-vm-01 aws_internet_gateway.us-east-tf-gw aws_route_table.us-east-tf-rt-public aws_route_table_association.us-east-tf-rt-public-association aws_security_group.us-east-tf-sg aws_subnet.us-east-2a-tf-private_subnet aws_subnet.us-east-2a-tf-public_subnet aws_vpc.us-east-tf-vpc $ terraform state show aws_security_group.us-east-tf-sg # aws_security_group.us-east-tf-sg: resource "aws_security_group" "us-east-tf-sg" { arn = "arn:aws:ec2:us-east-2:662644875436:security-group/sg-08e5c60c51926286d" description = "us-east-tf-sg" egress = [ { cidr_blocks = [ "0.0.0.0/0", ] description = "" from_port = 0 ipv6_cidr_blocks = [] prefix_list_ids = [] protocol = "-1" security_groups = [] self = false to_port = 0 }, ] id = "sg-08e5c60c51926286d" ingress = [ { cidr_blocks = [ "0.0.0.0/0", ] description = "Allow ICMP" from_port = -1 ipv6_cidr_blocks = [] prefix_list_ids = [] protocol = "icmp" security_groups = [] self = false to_port = -1 }, { cidr_blocks = [ "0.0.0.0/0", ] description = "Allow SSH" from_port = 22 ipv6_cidr_blocks = [] prefix_list_ids = [] protocol = "tcp" security_groups = [] self = false to_port = 22 }, ] name = "us-east-tf-sg" owner_id = "662644875436" revoke_rules_on_delete = false tags = { "Name" = "us-east-tf-sg" } tags_all = { "Environment" = "Lab" "Name" = "us-east-tf-sg" "Terraform" = "yes" } vpc_id = "vpc-0da4f5c6f6db12a12" } resource "aws_instance" "us-east-2a-tf-vm-01" { ami = "ami-0cf0e376c672104d6" instance_type = "t2.micro" associate_public_ip_address = true vpc_security_group_ids = ["sg-08e5c60c51926286d"] subnet_id = "subnet-0b0627f1af34d5022" tags = { Name = "us-east-2a-tf-vm-01" } } $ terraform validate Success! The configuration is valid. $ terraform plan aws_subnet.us-east-2a-tf-public_subnet: Refreshing state... [id=subnet-0b0627f1af34d5022] aws_route_table.us-east-tf-rt-public: Refreshing state... [id=rtb-0286ae2521f3181ab] aws_route_table_association.us-east-tf-rt-public-association: Refreshing state... [id=rtbassoc-05923419316f18c4e] aws_internet_gateway.us-east-tf-gw: Refreshing state... [id=igw-052948fe8f76be6c3] aws_vpc.us-east-tf-vpc: Refreshing state... [id=vpc-0da4f5c6f6db12a12] aws_subnet.us-east-2a-tf-private_subnet: Refreshing state... [id=subnet-0957e7b3d46ac7f8c] aws_security_group.us-east-tf-sg: Refreshing state... [id=sg-08e5c60c51926286d] aws_instance.us-east-2a-tf-vm-01: Refreshing state... [id=i-0670a1d1fea3a2e01] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: ~ update in-place Terraform will perform the following actions: # aws_instance.us-east-2a-tf-vm-01 will be updated in-place ~ resource "aws_instance" "us-east-2a-tf-vm-01" { id = "i-0670a1d1fea3a2e01" tags = { "Name" = "us-east-2a-tf-vm-01" } ~ vpc_security_group_ids = [ - "sg-0a1b27de005d0e907", + "sg-08e5c60c51926286d", ] # (30 unchanged attributes hidden) # (8 unchanged blocks hidden) } Plan: 0 to add, 1 to change, 0 to destroy. ─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────── Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now. $ terraform apply aws_route_table_association.us-east-tf-rt-public-association: Refreshing state... [id=rtbassoc-05923419316f18c4e] aws_vpc.us-east-tf-vpc: Refreshing state... [id=vpc-0da4f5c6f6db12a12] aws_subnet.us-east-2a-tf-public_subnet: Refreshing state... [id=subnet-0b0627f1af34d5022] aws_internet_gateway.us-east-tf-gw: Refreshing state... [id=igw-052948fe8f76be6c3] aws_subnet.us-east-2a-tf-private_subnet: Refreshing state... [id=subnet-0957e7b3d46ac7f8c] aws_route_table.us-east-tf-rt-public: Refreshing state... [id=rtb-0286ae2521f3181ab] aws_security_group.us-east-tf-sg: Refreshing state... [id=sg-08e5c60c51926286d] aws_instance.us-east-2a-tf-vm-01: Refreshing state... [id=i-0670a1d1fea3a2e01] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: ~ update in-place Terraform will perform the following actions: # aws_instance.us-east-2a-tf-vm-01 will be updated in-place ~ resource "aws_instance" "us-east-2a-tf-vm-01" { id = "i-0670a1d1fea3a2e01" tags = { "Name" = "us-east-2a-tf-vm-01" } ~ vpc_security_group_ids = [ - "sg-0a1b27de005d0e907", + "sg-08e5c60c51926286d", ] # (30 unchanged attributes hidden) # (8 unchanged blocks hidden) } Plan: 0 to add, 1 to change, 0 to destroy. Do you want to perform these actions? Terraform will perform the actions described above. Only 'yes' will be accepted to approve. Enter a value: yes aws_instance.us-east-2a-tf-vm-01: Modifying... [id=i-0670a1d1fea3a2e01] aws_instance.us-east-2a-tf-vm-01: Modifications complete after 4s [id=i-0670a1d1fea3a2e01] Apply complete! Resources: 0 added, 1 changed, 0 destroyed. $ terraform state list aws_instance.us-east-2a-tf-vm-01 aws_internet_gateway.us-east-tf-gw aws_route_table.us-east-tf-rt-public aws_route_table_association.us-east-tf-rt-public-association aws_security_group.us-east-tf-sg aws_subnet.us-east-2a-tf-private_subnet aws_subnet.us-east-2a-tf-public_subnet aws_vpc.us-east-tf-vpc $ terraform state show aws_instance.us-east-2a-tf-vm-01 # aws_instance.us-east-2a-tf-vm-01: resource "aws_instance" "us-east-2a-tf-vm-01" { ami = "ami-0cf0e376c672104d6" arn = "arn:aws:ec2:us-east-2:662644875436:instance/i-0670a1d1fea3a2e01" associate_public_ip_address = true availability_zone = "us-east-2a" cpu_core_count = 1 cpu_threads_per_core = 1 disable_api_stop = false disable_api_termination = false ebs_optimized = false get_password_data = false hibernation = false id = "i-0670a1d1fea3a2e01" instance_initiated_shutdown_behavior = "stop" instance_state = "running" instance_type = "t2.micro" ipv6_address_count = 0 ipv6_addresses = [] monitoring = false placement_partition_number = 0 primary_network_interface_id = "eni-0bc8b5582ba5943db" private_dns = "ip-10-22-100-5.us-east-2.compute.internal" private_ip = "10.22.100.5" public_dns = "ec2-3-144-11-107.us-east-2.compute.amazonaws.com" public_ip = "3.144.11.107" secondary_private_ips = [] security_groups = [] source_dest_check = true subnet_id = "subnet-0b0627f1af34d5022" tags = { "Name" = "us-east-2a-tf-vm-01" } tags_all = { "Environment" = "Lab" "Name" = "us-east-2a-tf-vm-01" "Terraform" = "yes" } tenancy = "default" user_data_replace_on_change = false vpc_security_group_ids = [ "sg-08e5c60c51926286d", ] capacity_reservation_specification { capacity_reservation_preference = "open" } cpu_options { core_count = 1 threads_per_core = 1 } credit_specification { cpu_credits = "standard" } enclave_options { enabled = false } maintenance_options { auto_recovery = "default" } metadata_options { http_endpoint = "enabled" http_protocol_ipv6 = "disabled" http_put_response_hop_limit = 2 http_tokens = "required" instance_metadata_tags = "disabled" } private_dns_name_options { enable_resource_name_dns_a_record = false enable_resource_name_dns_aaaa_record = false hostname_type = "ip-name" } root_block_device { delete_on_termination = true device_name = "/dev/xvda" encrypted = false iops = 3000 tags = {} throughput = 125 volume_id = "vol-0ef32a9165aa36ae1" volume_size = 8 volume_type = "gp3" } } $ sudo ping -c3 3.144.11.107 PING 3.144.11.107 (3.144.11.107) 56(84) bytes of data. 64 bytes from 3.144.11.107: icmp_seq=1 ttl=105 time=180 ms 64 bytes from 3.144.11.107: icmp_seq=2 ttl=105 time=182 ms 64 bytes from 3.144.11.107: icmp_seq=3 ttl=105 time=186 ms --- 3.144.11.107 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 2003ms rtt min/avg/max/mdev = 180.010/182.656/185.987/2.487 ms ===== Destruindo a infra ===== $ terraform destroy -auto-approve aws_internet_gateway.us-east-tf-gw: Refreshing state... [id=igw-052948fe8f76be6c3] aws_route_table_association.us-east-tf-rt-public-association: Refreshing state... [id=rtbassoc-05923419316f18c4e] aws_subnet.us-east-2a-tf-public_subnet: Refreshing state... [id=subnet-0b0627f1af34d5022] aws_subnet.us-east-2a-tf-private_subnet: Refreshing state... [id=subnet-0957e7b3d46ac7f8c] aws_route_table.us-east-tf-rt-public: Refreshing state... [id=rtb-0286ae2521f3181ab] aws_vpc.us-east-tf-vpc: Refreshing state... [id=vpc-0da4f5c6f6db12a12] aws_security_group.us-east-tf-sg: Refreshing state... [id=sg-08e5c60c51926286d] aws_instance.us-east-2a-tf-vm-01: Refreshing state... [id=i-0670a1d1fea3a2e01] Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols: - destroy Terraform will perform the following actions: # aws_instance.us-east-2a-tf-vm-01 will be destroyed - resource "aws_instance" "us-east-2a-tf-vm-01" { - ami = "ami-0cf0e376c672104d6" -> null - arn = "arn:aws:ec2:us-east-2:662644875436:instance/i-0670a1d1fea3a2e01" -> null - associate_public_ip_address = true -> null - availability_zone = "us-east-2a" -> null - cpu_core_count = 1 -> null - cpu_threads_per_core = 1 -> null - disable_api_stop = false -> null - disable_api_termination = false -> null - ebs_optimized = false -> null - get_password_data = false -> null - hibernation = false -> null - id = "i-0670a1d1fea3a2e01" -> null - instance_initiated_shutdown_behavior = "stop" -> null - instance_state = "running" -> null - instance_type = "t2.micro" -> null - ipv6_address_count = 0 -> null - ipv6_addresses = [] -> null - monitoring = false -> null - placement_partition_number = 0 -> null - primary_network_interface_id = "eni-0bc8b5582ba5943db" -> null - private_dns = "ip-10-22-100-5.us-east-2.compute.internal" -> null - private_ip = "10.22.100.5" -> null - public_dns = "ec2-3-144-11-107.us-east-2.compute.amazonaws.com" -> null - public_ip = "3.144.11.107" -> null - secondary_private_ips = [] -> null - security_groups = [] -> null - source_dest_check = true -> null - subnet_id = "subnet-0b0627f1af34d5022" -> null - tags = { - "Name" = "us-east-2a-tf-vm-01" } -> null - tags_all = { - "Environment" = "Lab" - "Name" = "us-east-2a-tf-vm-01" - "Terraform" = "yes" } -> null - tenancy = "default" -> null - user_data_replace_on_change = false -> null - vpc_security_group_ids = [ - "sg-08e5c60c51926286d", ] -> null - capacity_reservation_specification { - capacity_reservation_preference = "open" -> null } - cpu_options { - core_count = 1 -> null - threads_per_core = 1 -> null } - credit_specification { - cpu_credits = "standard" -> null } - enclave_options { - enabled = false -> null } - maintenance_options { - auto_recovery = "default" -> null } - metadata_options { - http_endpoint = "enabled" -> null - http_protocol_ipv6 = "disabled" -> null - http_put_response_hop_limit = 2 -> null - http_tokens = "required" -> null - instance_metadata_tags = "disabled" -> null } - private_dns_name_options { - enable_resource_name_dns_a_record = false -> null - enable_resource_name_dns_aaaa_record = false -> null - hostname_type = "ip-name" -> null } - root_block_device { - delete_on_termination = true -> null - device_name = "/dev/xvda" -> null - encrypted = false -> null - iops = 3000 -> null - tags = {} -> null - throughput = 125 -> null - volume_id = "vol-0ef32a9165aa36ae1" -> null - volume_size = 8 -> null - volume_type = "gp3" -> null } } # aws_internet_gateway.us-east-tf-gw will be destroyed - resource "aws_internet_gateway" "us-east-tf-gw" { - arn = "arn:aws:ec2:us-east-2:662644875436:internet-gateway/igw-052948fe8f76be6c3" -> null - id = "igw-052948fe8f76be6c3" -> null - owner_id = "662644875436" -> null - tags = { - "Name" = "us-east-tf-gw" } -> null - tags_all = { - "Environment" = "Lab" - "Name" = "us-east-tf-gw" - "Terraform" = "yes" } -> null - vpc_id = "vpc-0da4f5c6f6db12a12" -> null } # aws_route_table.us-east-tf-rt-public will be destroyed - resource "aws_route_table" "us-east-tf-rt-public" { - arn = "arn:aws:ec2:us-east-2:662644875436:route-table/rtb-0286ae2521f3181ab" -> null - id = "rtb-0286ae2521f3181ab" -> null - owner_id = "662644875436" -> null - propagating_vgws = [] -> null - route = [ - { - carrier_gateway_id = "" - cidr_block = "0.0.0.0/0" - core_network_arn = "" - destination_prefix_list_id = "" - egress_only_gateway_id = "" - gateway_id = "igw-052948fe8f76be6c3" - ipv6_cidr_block = "" - local_gateway_id = "" - nat_gateway_id = "" - network_interface_id = "" - transit_gateway_id = "" - vpc_endpoint_id = "" - vpc_peering_connection_id = "" }, ] -> null - tags = { - "Name" = "us-east-tf-rt-public" } -> null - tags_all = { - "Environment" = "Lab" - "Name" = "us-east-tf-rt-public" - "Terraform" = "yes" } -> null - vpc_id = "vpc-0da4f5c6f6db12a12" -> null } # aws_route_table_association.us-east-tf-rt-public-association will be destroyed - resource "aws_route_table_association" "us-east-tf-rt-public-association" { - id = "rtbassoc-05923419316f18c4e" -> null - route_table_id = "rtb-0286ae2521f3181ab" -> null - subnet_id = "subnet-0b0627f1af34d5022" -> null } # aws_security_group.us-east-tf-sg will be destroyed - resource "aws_security_group" "us-east-tf-sg" { - arn = "arn:aws:ec2:us-east-2:662644875436:security-group/sg-08e5c60c51926286d" -> null - description = "us-east-tf-sg" -> null - egress = [ - { - cidr_blocks = [ - "0.0.0.0/0", ] - description = "" - from_port = 0 - ipv6_cidr_blocks = [] - prefix_list_ids = [] - protocol = "-1" - security_groups = [] - self = false - to_port = 0 }, ] -> null - id = "sg-08e5c60c51926286d" -> null - ingress = [ - { - cidr_blocks = [ - "0.0.0.0/0", ] - description = "Allow ICMP" - from_port = -1 - ipv6_cidr_blocks = [] - prefix_list_ids = [] - protocol = "icmp" - security_groups = [] - self = false - to_port = -1 }, - { - cidr_blocks = [ - "0.0.0.0/0", ] - description = "Allow SSH" - from_port = 22 - ipv6_cidr_blocks = [] - prefix_list_ids = [] - protocol = "tcp" - security_groups = [] - self = false - to_port = 22 }, ] -> null - name = "us-east-tf-sg" -> null - owner_id = "662644875436" -> null - revoke_rules_on_delete = false -> null - tags = { - "Name" = "us-east-tf-sg" } -> null - tags_all = { - "Environment" = "Lab" - "Name" = "us-east-tf-sg" - "Terraform" = "yes" } -> null - vpc_id = "vpc-0da4f5c6f6db12a12" -> null } # aws_subnet.us-east-2a-tf-private_subnet will be destroyed - resource "aws_subnet" "us-east-2a-tf-private_subnet" { - arn = "arn:aws:ec2:us-east-2:662644875436:subnet/subnet-0957e7b3d46ac7f8c" -> null - assign_ipv6_address_on_creation = false -> null - availability_zone = "us-east-2a" -> null - availability_zone_id = "use2-az1" -> null - cidr_block = "10.22.200.0/24" -> null - enable_dns64 = false -> null - enable_lni_at_device_index = 0 -> null - enable_resource_name_dns_a_record_on_launch = false -> null - enable_resource_name_dns_aaaa_record_on_launch = false -> null - id = "subnet-0957e7b3d46ac7f8c" -> null - ipv6_native = false -> null - map_customer_owned_ip_on_launch = false -> null - map_public_ip_on_launch = false -> null - owner_id = "662644875436" -> null - private_dns_hostname_type_on_launch = "ip-name" -> null - tags = { - "Name" = "us-east-2a-tf-private_subnet" } -> null - tags_all = { - "Environment" = "Lab" - "Name" = "us-east-2a-tf-private_subnet" - "Terraform" = "yes" } -> null - vpc_id = "vpc-0da4f5c6f6db12a12" -> null } # aws_subnet.us-east-2a-tf-public_subnet will be destroyed - resource "aws_subnet" "us-east-2a-tf-public_subnet" { - arn = "arn:aws:ec2:us-east-2:662644875436:subnet/subnet-0b0627f1af34d5022" -> null - assign_ipv6_address_on_creation = false -> null - availability_zone = "us-east-2a" -> null - availability_zone_id = "use2-az1" -> null - cidr_block = "10.22.100.0/24" -> null - enable_dns64 = false -> null - enable_lni_at_device_index = 0 -> null - enable_resource_name_dns_a_record_on_launch = false -> null - enable_resource_name_dns_aaaa_record_on_launch = false -> null - id = "subnet-0b0627f1af34d5022" -> null - ipv6_native = false -> null - map_customer_owned_ip_on_launch = false -> null - map_public_ip_on_launch = true -> null - owner_id = "662644875436" -> null - private_dns_hostname_type_on_launch = "ip-name" -> null - tags = { - "Name" = "us-east-2a-tf-public_subnet" } -> null - tags_all = { - "Environment" = "Lab" - "Name" = "us-east-2a-tf-public_subnet" - "Terraform" = "yes" } -> null - vpc_id = "vpc-0da4f5c6f6db12a12" -> null } # aws_vpc.us-east-tf-vpc will be destroyed - resource "aws_vpc" "us-east-tf-vpc" { - arn = "arn:aws:ec2:us-east-2:662644875436:vpc/vpc-0da4f5c6f6db12a12" -> null - assign_generated_ipv6_cidr_block = false -> null - cidr_block = "10.22.0.0/16" -> null - default_network_acl_id = "acl-0fbe42b1767a6ff7b" -> null - default_route_table_id = "rtb-01c135cec424c4457" -> null - default_security_group_id = "sg-0a1b27de005d0e907" -> null - dhcp_options_id = "dopt-0251f420400d60db9" -> null - enable_dns_hostnames = true -> null - enable_dns_support = true -> null - enable_network_address_usage_metrics = false -> null - id = "vpc-0da4f5c6f6db12a12" -> null - instance_tenancy = "default" -> null - ipv6_netmask_length = 0 -> null - main_route_table_id = "rtb-01c135cec424c4457" -> null - owner_id = "662644875436" -> null - tags = { - "Name" = "us-east-tf-vpc" } -> null - tags_all = { - "Environment" = "Lab" - "Name" = "us-east-tf-vpc" - "Terraform" = "yes" } -> null } Plan: 0 to add, 0 to change, 8 to destroy. aws_internet_gateway.us-east-tf-gw: Destroying... [id=igw-052948fe8f76be6c3] aws_route_table_association.us-east-tf-rt-public-association: Destroying... [id=rtbassoc-05923419316f18c4e] aws_subnet.us-east-2a-tf-private_subnet: Destroying... [id=subnet-0957e7b3d46ac7f8c] aws_vpc.us-east-tf-vpc: Destroying... [id=vpc-0da4f5c6f6db12a12] aws_route_table.us-east-tf-rt-public: Destroying... [id=rtb-0286ae2521f3181ab] aws_subnet.us-east-2a-tf-public_subnet: Destroying... [id=subnet-0b0627f1af34d5022] aws_security_group.us-east-tf-sg: Destroying... [id=sg-08e5c60c51926286d] aws_instance.us-east-2a-tf-vm-01: Destroying... [id=i-0670a1d1fea3a2e01] aws_route_table_association.us-east-tf-rt-public-association: Destruction complete after 1s aws_subnet.us-east-2a-tf-private_subnet: Destruction complete after 1s aws_route_table.us-east-tf-rt-public: Destruction complete after 2s aws_internet_gateway.us-east-tf-gw: Still destroying... [id=igw-052948fe8f76be6c3, 10s elapsed] aws_vpc.us-east-tf-vpc: Still destroying... [id=vpc-0da4f5c6f6db12a12, 10s elapsed] aws_subnet.us-east-2a-tf-public_subnet: Still destroying... [id=subnet-0b0627f1af34d5022, 10s elapsed] aws_instance.us-east-2a-tf-vm-01: Still destroying... [id=i-0670a1d1fea3a2e01, 10s elapsed] aws_security_group.us-east-tf-sg: Still destroying... [id=sg-08e5c60c51926286d, 10s elapsed] aws_vpc.us-east-tf-vpc: Still destroying... [id=vpc-0da4f5c6f6db12a12, 20s elapsed] aws_internet_gateway.us-east-tf-gw: Still destroying... [id=igw-052948fe8f76be6c3, 20s elapsed] aws_security_group.us-east-tf-sg: Still destroying... [id=sg-08e5c60c51926286d, 20s elapsed] aws_instance.us-east-2a-tf-vm-01: Still destroying... [id=i-0670a1d1fea3a2e01, 20s elapsed] aws_subnet.us-east-2a-tf-public_subnet: Still destroying... [id=subnet-0b0627f1af34d5022, 20s elapsed] aws_internet_gateway.us-east-tf-gw: Still destroying... [id=igw-052948fe8f76be6c3, 30s elapsed] aws_subnet.us-east-2a-tf-public_subnet: Still destroying... [id=subnet-0b0627f1af34d5022, 30s elapsed] aws_vpc.us-east-tf-vpc: Still destroying... [id=vpc-0da4f5c6f6db12a12, 30s elapsed] aws_security_group.us-east-tf-sg: Still destroying... [id=sg-08e5c60c51926286d, 30s elapsed] aws_instance.us-east-2a-tf-vm-01: Still destroying... [id=i-0670a1d1fea3a2e01, 30s elapsed] aws_internet_gateway.us-east-tf-gw: Destruction complete after 30s aws_subnet.us-east-2a-tf-public_subnet: Destruction complete after 31s aws_security_group.us-east-tf-sg: Destruction complete after 31s aws_instance.us-east-2a-tf-vm-01: Destruction complete after 32s aws_vpc.us-east-tf-vpc: Still destroying... [id=vpc-0da4f5c6f6db12a12, 40s elapsed] aws_vpc.us-east-tf-vpc: Destruction complete after 42s Destroy complete! Resources: 8 destroyed.