Create an EC2 Instance with Terraform: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
 
(14 intermediate revisions by the same user not shown)
Line 9: Line 9:


EC2 instances can be created, updated and deleted. Instances also support [[Terraform_Concepts#Provisioning|provisioning]].
EC2 instances can be created, updated and deleted. Instances also support [[Terraform_Concepts#Provisioning|provisioning]].
=Playground=
{{External|https://github.com/ovidiuf/playground/tree/master/hashicorp/terraform/simplest-ec2-instance}}
=Terraform Registry ec2-instance Module=
{{External|https://registry.terraform.io/modules/terraform-aws-modules/ec2-instance/aws/2.8.0}}


=Configuration=
=Configuration=
<syntaxhighlight lang='text'>
<syntaxhighlight lang='json'>
provider "aws" {
provider "aws" {


   profile = "default"
   profile = "default"
   region = "us-west-2"
   region = "us-west-2"
}
}


resource "aws_instance" "terraform-test-01" {
resource "aws_instance" "terraform-experiment-01" {
 
  ami                        = "ami-000000000000000"
  instance_type              = "t2.small"
  subnet_id                  = "subnet-0000000000000000"
  key_name                    = "my-keypair-01"
  security_groups            = ["sg-0000000000000000"]
  associate_public_ip_address = false
  iam_instance_profile        = aws_iam_instance_profile.some-profile.name
 
  tags = {
 
    Name = "terraform-experiment-01"
  }
}</syntaxhighlight>


  ami          = "ami-a6faba49dddaecfb7"
The instance profile can be created by the same module or a dependency module. If it is created by a dependency sub-module, it can be referred as:
   instance_type = "m5.4xlarge"
<syntaxhighlight lang='json'>
}
resource "aws_instance" "terraform-experiment-01" {
</syntaxhighlight>
  ...
   iam_instance_profile        = ${module.aws-iam.some-profile}
}</syntaxhighlight>


=Configuration Details=
=Configuration Details=
Line 31: Line 52:
If nothing is specified, the instance will get a public IP. To disable allocation of a public address specify:
If nothing is specified, the instance will get a public IP. To disable allocation of a public address specify:


<syntaxhighlight lang='text'>
<syntaxhighlight lang='json'>
resource "aws_instance" ... {
resource "aws_instance" ... {
   ...
   ...
Line 38: Line 59:
}
}
</syntaxhighlight>
</syntaxhighlight>
Note that even if <code>associate_public_ip_address</code> is explicitly set to "True", if the associated subnet has a map_public_ip_on_launch = true, a public IP will be associated anyway.
Note that even if <code>associate_public_ip_address</code> is explicitly set to "true", if the associated subnet has a <code>map_public_ip_on_launch</code> = true, a public IP will be associated anyway.
 
==Multiple Instances==
 
<syntaxhighlight lang='json'>
variable "instances" {
  default = "2"
}
 
resource "aws_instance" "my-instance" {
  count        = "${var.instances}"
  ...
  tags = {
    Name  = "my-instance-${count.index + 1}"
  }
}
</syntaxhighlight>
 
==Block Device Mapping==

Latest revision as of 22:10, 10 December 2019

External

Internal

Overview

EC2 instances can be created, updated and deleted. Instances also support provisioning.

Playground

https://github.com/ovidiuf/playground/tree/master/hashicorp/terraform/simplest-ec2-instance

Terraform Registry ec2-instance Module

https://registry.terraform.io/modules/terraform-aws-modules/ec2-instance/aws/2.8.0

Configuration

provider "aws" {

  profile = "default"
  region  = "us-west-2"
}

resource "aws_instance" "terraform-experiment-01" {

  ami                         = "ami-000000000000000"
  instance_type               = "t2.small"
  subnet_id                   = "subnet-0000000000000000"
  key_name                    = "my-keypair-01"
  security_groups             = ["sg-0000000000000000"]
  associate_public_ip_address = false
  iam_instance_profile        = aws_iam_instance_profile.some-profile.name

  tags = {

    Name = "terraform-experiment-01"
  }
}

The instance profile can be created by the same module or a dependency module. If it is created by a dependency sub-module, it can be referred as:

resource "aws_instance" "terraform-experiment-01" {
  ...
  iam_instance_profile        = ${module.aws-iam.some-profile}
}

Configuration Details

Public IP

If nothing is specified, the instance will get a public IP. To disable allocation of a public address specify:

resource "aws_instance" ... {
  ...
  associate_public_ip_address = false
  ...
}

Note that even if associate_public_ip_address is explicitly set to "true", if the associated subnet has a map_public_ip_on_launch = true, a public IP will be associated anyway.

Multiple Instances

variable "instances" {
  default = "2"
}

resource "aws_instance" "my-instance" {
  count         = "${var.instances}"
  ...
  tags = {
    Name  = "my-instance-${count.index + 1}"
  }
}

Block Device Mapping