Note:
1. Ensure that you DO NOT post the access/secret keys along with the code. You can remove the keys and add the code snippet.
2. For AWS, every region has a different AMI ID. It need to go to AWS EC2 create console and check before setting the terraform configuration file.
3. For AWS, the default subnet will auto-assign public IPv4 address. So even .tf file "associate_public_ip_address = "false"",
the EC2 still has public IP. Need to go the "Edit subnet settings" > unlick "Enable auto-assign public IPv4 address"
3-10_first_EC2.tf:
# Configure the AWS Providerprovider "aws" {region = "ap-southeast-1"access_key = "PUT-YOUR-ACCESS-KEY-HERE"secret_key = "PUT-YOUR-SECRET-KEY-HERE"}# Provides an EC2 instance resource.resource "aws_instance" "HelloWorld" {ami = "ami-0c802847a7dd848c0"instance_type = "t2.micro"associate_public_ip_address = "false"tags = {Name = "HelloWorld"}}
Commands:
terraform init#terraform init will create a file call ".terraform.lock.hcl"terraform planterraform apply#terraform apply will create a file call "terraform.tfstate"
Command output:
PS D:\Blog\Terraform> terraform.exe initInitializing the backend...Initializing provider plugins...- Finding latest version of hashicorp/aws...- Installing hashicorp/aws v4.19.0...- Installed hashicorp/aws v4.19.0 (signed by HashiCorp)Terraform has created a lock file .terraform.lock.hcl to record the providerselections it made above. Include this file in your version control repositoryso that Terraform can guarantee to make the same selections by default whenyou run "terraform init" in the future.Terraform has been successfully initialized!You may now begin working with Terraform. Try running "terraform plan" to seeany changes that are required for your infrastructure. All Terraform commandsshould 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, othercommands will detect it and remind you to do so if necessary.PS D:\Blog\Terraform>PS D:\Blog\Terraform>PS D:\Blog\Terraform>PS D:\Blog\Terraform>PS D:\Blog\Terraform> terraform.exe planTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:+ createTerraform will perform the following actions:# aws_instance.HelloWorld will be created+ resource "aws_instance" "HelloWorld" {+ ami = "ami-0c802847a7dd848c0"+ arn = (known after apply)+ associate_public_ip_address = false+ availability_zone = (known after apply)+ cpu_core_count = (known after apply)+ cpu_threads_per_core = (known after apply)+ disable_api_termination = (known after apply)+ ebs_optimized = (known after apply)+ get_password_data = false+ host_id = (known after apply)+ id = (known after apply)+ instance_initiated_shutdown_behavior = (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+ subnet_id = (known after apply)+ tags = {+ "Name" = "HelloWorld"}+ tags_all = {+ "Name" = "HelloWorld"}+ 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)+ capacity_reservation_specification {+ capacity_reservation_preference = (known after apply)+ capacity_reservation_target {+ capacity_reservation_id = (known after apply)+ capacity_reservation_resource_group_arn = (known after apply)}}+ ebs_block_device {+ delete_on_termination = (known after apply)+ device_name = (known after apply)+ encrypted = (known after apply)+ iops = (known after apply)+ kms_key_id = (known after apply)+ snapshot_id = (known after apply)+ tags = (known after apply)+ throughput = (known after apply)+ volume_id = (known after apply)+ volume_size = (known after apply)+ volume_type = (known after apply)}+ enclave_options {+ enabled = (known after apply)}+ ephemeral_block_device {+ device_name = (known after apply)+ no_device = (known after apply)+ virtual_name = (known after apply)}+ maintenance_options {+ auto_recovery = (known after apply)}+ metadata_options {+ http_endpoint = (known after apply)+ http_put_response_hop_limit = (known after apply)+ http_tokens = (known after apply)+ instance_metadata_tags = (known after apply)}+ network_card_index = (known after apply)+ network_interface_id = (known after apply)}+ root_block_device {+ delete_on_termination = (known after apply)+ device_name = (known after apply)+ encrypted = (known after apply)+ iops = (known after apply)+ kms_key_id = (known after apply)+ tags = (known after apply)+ throughput = (known after apply)+ volume_id = (known after apply)+ volume_size = (known after apply)+ volume_type = (known after apply)}}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.PS D:\Blog\Terraform>PS D:\Blog\Terraform>PS D:\Blog\Terraform>PS D:\Blog\Terraform>PS D:\Blog\Terraform> terraform.exe applyTerraform used the selected providers to generate the following execution plan. Resource actions are indicated with the following symbols:+ createTerraform will perform the following actions:# aws_instance.HelloWorld will be created+ resource "aws_instance" "HelloWorld" {+ ami = "ami-0c802847a7dd848c0"+ arn = (known after apply)+ associate_public_ip_address = false+ availability_zone = (known after apply)+ cpu_core_count = (known after apply)+ cpu_threads_per_core = (known after apply)+ disable_api_termination = (known after apply)+ ebs_optimized = (known after apply)+ get_password_data = false+ host_id = (known after apply)+ id = (known after apply)+ instance_initiated_shutdown_behavior = (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+ subnet_id = (known after apply)+ tags = {+ "Name" = "HelloWorld"}+ tags_all = {+ "Name" = "HelloWorld"}+ 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)+ capacity_reservation_specification {+ capacity_reservation_preference = (known after apply)+ capacity_reservation_target {+ capacity_reservation_id = (known after apply)+ capacity_reservation_resource_group_arn = (known after apply)}}+ ebs_block_device {+ delete_on_termination = (known after apply)+ device_name = (known after apply)+ encrypted = (known after apply)+ iops = (known after apply)+ kms_key_id = (known after apply)+ snapshot_id = (known after apply)+ tags = (known after apply)+ throughput = (known after apply)+ volume_id = (known after apply)+ volume_size = (known after apply)+ volume_type = (known after apply)}+ enclave_options {+ enabled = (known after apply)}+ ephemeral_block_device {+ device_name = (known after apply)+ no_device = (known after apply)+ virtual_name = (known after apply)}+ maintenance_options {+ auto_recovery = (known after apply)}+ metadata_options {+ http_endpoint = (known after apply)+ http_put_response_hop_limit = (known after apply)+ http_tokens = (known after apply)+ instance_metadata_tags = (known after apply)}+ network_interface {+ delete_on_termination = (known after apply)+ device_index = (known after apply)+ network_card_index = (known after apply)+ network_interface_id = (known after apply)}+ root_block_device {+ delete_on_termination = (known after apply)+ device_name = (known after apply)+ kms_key_id = (known after apply)+ tags = (known after apply)+ throughput = (known after apply)+ volume_id = (known after apply)+ volume_size = (known after apply)+ volume_type = (known after apply)}}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: yesaws_instance.HelloWorld: Creating...aws_instance.HelloWorld: Still creating... [10s elapsed]aws_instance.HelloWorld: Still creating... [20s elapsed]aws_instance.HelloWorld: Still creating... [30s elapsed]aws_instance.HelloWorld: Creation complete after 31s [id=i-0bdabc3de0ac94688]Apply complete! Resources: 1 added, 0 changed, 0 destroyed.PS D:\Blog\Terraform>PS D:\Blog\Terraform>
Reference:
1. Terraform Providers:
2. Terraform AWS Resource: aws_instance
最初發表 / 最後更新: 2022.06.20 / 2022.06.20
0 comments:
張貼留言