Skip to content

MagnetarIT/terraform-aws-ec2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

terraform-aws-ec2

Terraform (>= 0.12.0) module to create an EC2

Build Status Latest Release


Example

provider "aws" {
  region = "eu-west-2"
}

module "ec2" {
  source       = "git::https://github.com/MagnetarIT/terraform-aws-ec2.git?ref=tags/0.3.0"
  namespace    = "mag"
  environment  = "dev"
  name         = "myapp"
  ssh_key_pair = "Lewis"
}

Intro

This module will create the following resources

  • EC2 Instance
  • Cloudwatch auto reboot alarm (Optional)

Providers

Name Version
aws ~> 2.0
null ~> 2.0

Inputs

Name Description Type Default Required
additional_cloudwatch_alarm_action Additional cloudwatch alarm action arn to trigger if instance fails status checks. string "" no
ami The AMI to use for the instance. By default it is the AMI provided by Amazon with Ubuntu 16.04 string "" no
ami_owner Owner of the given AMI (ignored if ami unset) string "" no
applying_period The period in seconds over which the specified statistic is applied number 60 no
assign_elastic_ip Determine whether or not to assign an Elastic IP to the instance bool false no
associate_public_ip_address Associate a public IP address with the instance bool true no
attributes Additional attributes (e.g. 1) list(string) [] no
aws_cloudwatch_auto_reboot Enable the cloudwatch auto reboot alarm bool false no
comparison_operator The arithmetic operation to use when comparing the specified Statistic and Threshold. Possible values are: GreaterThanOrEqualToThreshold, GreaterThanThreshold, LessThanThreshold, LessThanOrEqualToThreshold. string "GreaterThanOrEqualToThreshold" no
cpu_credits The credit option for CPU usage (unlimited or standard) string "standard" no
custom_aws_iam_role_policy Json formatted IAM role policy for the instance profile, use data.aws_iam_policy_document.xxx.json string "" no
default_alarm_action Default alarm action string "action/actions/AWS_EC2.InstanceId.Reboot/1.0" no
default_availability_zone Default availability zone used for subnet searching string "eu-west-2a" no
delete_on_termination Whether the volume should be destroyed on instance termination bool true no
disable_api_termination Enable EC2 Instance Termination Protection bool false no
ebs_device_name Name of the EBS device to mount list(string)
[
"/dev/xvdb",
"/dev/xvdc",
"/dev/xvdd",
"/dev/xvde",
"/dev/xvdf",
"/dev/xvdg",
"/dev/xvdh",
"/dev/xvdi",
"/dev/xvdj",
"/dev/xvdk",
"/dev/xvdl",
"/dev/xvdm",
"/dev/xvdn",
"/dev/xvdo",
"/dev/xvdp",
"/dev/xvdq",
"/dev/xvdr",
"/dev/xvds",
"/dev/xvdt",
"/dev/xvdu",
"/dev/xvdv",
"/dev/xvdw",
"/dev/xvdx",
"/dev/xvdy",
"/dev/xvdz"
]
no
ebs_iops Amount of provisioned IOPS. This must be set with a volume_type of io1 number 0 no
ebs_optimized Launched EC2 instance will be EBS-optimized bool false no
ebs_volume_count Count of EBS volumes that will be attached to the instance number 0 no
ebs_volume_size Size of the EBS volume in gigabytes number 10 no
ebs_volume_type The type of EBS volume. Can be standard, gp2 or io1 string "gp2" no
environment Environment, e.g. 'prod', 'staging', 'dev', 'pre-prod', 'UAT' string n/a yes
evaluation_periods The number of periods over which data is compared to the specified threshold. number 5 no
instance_type The type of the instance string "t2.micro" no
ipv6_address_count Number of IPv6 addresses to associate with the primary network interface. Amazon EC2 chooses the IPv6 addresses from the range of your subnet (-1 to use subnet default) number 0 no
ipv6_addresses List of IPv6 addresses from the range of the subnet to associate with the primary network interface list(string) [] no
kms_key_id Amazon Resource Name (ARN) of the KMS Key to use when encrypting the volume. Default to (aws_ebs_default_kms_key) string "" no
metric_name The name for the alarm's associated metric. Allowed values can be found in https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/ec2-metricscollected.html string "StatusCheckFailed_Instance" no
metric_namespace The namespace for the alarm's associated metric. Allowed values can be found in https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/aws-namespaces.html string "AWS/EC2" no
metric_threshold The value against which the specified statistic is compared number 1 no
monitoring Launched EC2 instance will have detailed monitoring enabled bool true no
name Solution name, e.g. 'app' or 'jenkins' string n/a yes
namespace Namespace, which could be your team, business name or abbreviation, e.g. 'mag' or 'tar' string n/a yes
permissions_boundary_arn Policy ARN to attach to instance role as a permissions boundary string "" no
private_ip Private IP address to associate with the instance in the VPC string "" no
root_iops Amount of provisioned IOPS. This must be set if root_volume_type is set to io1 number 0 no
root_volume_size Size of the root volume in gigabytes number 10 no
root_volume_type Type of root volume. Can be standard, gp2 or io1 string "gp2" no
security_groups List of Security Group IDs allowed to connect to the instance list(string) [] no
source_dest_check Controls if traffic is routed to the instance when the destination address does not match the instance. Used for NAT or VPNs bool true no
ssh_key_pair SSH key pair to be provisioned on the instance string n/a yes
statistic_level The statistic to apply to the alarm's associated metric. Allowed values are: SampleCount, Average, Sum, Minimum, Maximum string "Maximum" no
subnet VPC Subnet ID the instance is launched in string "" no
tags Additional tags (e.g. map('BusinessUnit','XYZ') map(string) {} no
user_data Instance user data. Do not pass gzip-compressed data via this argument string "" no

Outputs

Name Description
alarm CloudWatch Alarm ID
ebs_ids IDs of EBSs
elastic_ip_id Contains the EIP allocation ID.
elastic_ip_public_ip Contains the public IP address for the Elastic IP.
id Disambiguated ID of the instance
kms_key_id Amazon Resource Name (ARN) of the KMS Key to use when encrypting the volume. Default to (aws_ebs_default_kms_key)
name Instance name
primary_network_interface_id ID of the instance's primary network interface
private_dns Private DNS of instance
private_ip Private IP of instance
public_dns Public DNS of instance (or DNS of EIP)
public_ip Public IP of instance (or EIP)
role Name of AWS IAM Role associated with the instance
security_group_ids IDs on the AWS Security Groups associated with the instance
ssh_key_pair Name of the SSH key pair provisioned on the instance

Support

Reach out to me at one of the following places!


License

License

See LICENSE for full details.

Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

  https://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.