Terraform (>= 0.12.0) module to create an EC2
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"
}
This module will create the following resources
- EC2 Instance
- Cloudwatch auto reboot alarm (Optional)
Name | Version |
---|---|
aws | ~> 2.0 |
null | ~> 2.0 |
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) |
[ |
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 |
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 |
Reach out to me at one of the following places!
- Website at
magnetarconsulting.co.uk
- Twitter at
@magnetarIT
- LinkedIn at
magnetar-it-consulting
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.