mirror of
https://github.com/opentofu/opentofu.git
synced 2025-02-25 18:45:20 -06:00
Initial commit aws sample for ELB
This commit is contained in:
parent
5f129f1b9d
commit
e10d658b09
11
examples/aws-elb/README.md
Normal file
11
examples/aws-elb/README.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# ELB with stickiness Example
|
||||||
|
|
||||||
|
The example launches a web server, installs nginx, creates an ELB for isnatnce. It also creates security groups for elb/instance
|
||||||
|
|
||||||
|
To run, configure your AWS provider as described in https://www.terraform.io/docs/providers/aws/index.html
|
||||||
|
|
||||||
|
Running the example
|
||||||
|
|
||||||
|
run `terraform apply -var 'key_name={your_key_name}}'`
|
||||||
|
|
||||||
|
Give couple of mins for userdata to insatll nginx, and then type the ELB DNS Name from outputs in your browser and see tegh nginx welcome page
|
123
examples/aws-elb/main.tf
Normal file
123
examples/aws-elb/main.tf
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
# Specify the provider and access details
|
||||||
|
provider "aws" {
|
||||||
|
region = "${var.aws_region}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Our default security group to access
|
||||||
|
# the instances over SSH and HTTP
|
||||||
|
resource "aws_security_group" "default" {
|
||||||
|
name = "instance_sg"
|
||||||
|
description = "Used in the terraform"
|
||||||
|
|
||||||
|
# SSH access from anywhere
|
||||||
|
ingress {
|
||||||
|
from_port = 22
|
||||||
|
to_port = 22
|
||||||
|
protocol = "tcp"
|
||||||
|
cidr_blocks = ["0.0.0.0/0"]
|
||||||
|
}
|
||||||
|
|
||||||
|
# HTTP access from anywhere
|
||||||
|
ingress {
|
||||||
|
from_port = 80
|
||||||
|
to_port = 80
|
||||||
|
protocol = "tcp"
|
||||||
|
cidr_blocks = ["0.0.0.0/0"]
|
||||||
|
}
|
||||||
|
|
||||||
|
# outbound internet access
|
||||||
|
egress {
|
||||||
|
from_port = 0
|
||||||
|
to_port = 0
|
||||||
|
protocol = "-1"
|
||||||
|
cidr_blocks = ["0.0.0.0/0"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Our elb security group to access
|
||||||
|
# the ELB over HTTP
|
||||||
|
resource "aws_security_group" "elb" {
|
||||||
|
name = "elb_sg"
|
||||||
|
description = "Used in the terraform"
|
||||||
|
|
||||||
|
# HTTP access from anywhere
|
||||||
|
ingress {
|
||||||
|
from_port = 80
|
||||||
|
to_port = 80
|
||||||
|
protocol = "tcp"
|
||||||
|
cidr_blocks = ["0.0.0.0/0"]
|
||||||
|
}
|
||||||
|
|
||||||
|
# outbound internet access
|
||||||
|
egress {
|
||||||
|
from_port = 0
|
||||||
|
to_port = 0
|
||||||
|
protocol = "-1"
|
||||||
|
cidr_blocks = ["0.0.0.0/0"]
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
resource "aws_elb" "web" {
|
||||||
|
name = "example-elb"
|
||||||
|
|
||||||
|
# The same availability zone as our instance
|
||||||
|
availability_zones = ["${aws_instance.web.availability_zone}"]
|
||||||
|
security_groups = ["${aws_security_group.elb.id}"]
|
||||||
|
listener {
|
||||||
|
instance_port = 80
|
||||||
|
instance_protocol = "http"
|
||||||
|
lb_port = 80
|
||||||
|
lb_protocol = "http"
|
||||||
|
}
|
||||||
|
|
||||||
|
health_check {
|
||||||
|
healthy_threshold = 2
|
||||||
|
unhealthy_threshold = 2
|
||||||
|
timeout = 3
|
||||||
|
target = "HTTP:80/"
|
||||||
|
interval = 30
|
||||||
|
}
|
||||||
|
|
||||||
|
# The instance is registered automatically
|
||||||
|
instances = ["${aws_instance.web.id}"]
|
||||||
|
|
||||||
|
cross_zone_load_balancing = true
|
||||||
|
idle_timeout = 400
|
||||||
|
connection_draining = true
|
||||||
|
connection_draining_timeout = 400
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_lb_cookie_stickiness_policy" "default" {
|
||||||
|
name = "lbpolicy"
|
||||||
|
load_balancer = "${aws_elb.web.id}"
|
||||||
|
lb_port = 80
|
||||||
|
cookie_expiration_period = 600
|
||||||
|
}
|
||||||
|
|
||||||
|
resource "aws_instance" "web" {
|
||||||
|
|
||||||
|
instance_type = "t2.micro"
|
||||||
|
|
||||||
|
# Lookup the correct AMI based on the region
|
||||||
|
# we specified
|
||||||
|
ami = "${lookup(var.aws_amis, var.aws_region)}"
|
||||||
|
|
||||||
|
# The name of our SSH keypair you've created and downloaded
|
||||||
|
# from the AWS console.
|
||||||
|
#
|
||||||
|
# https://console.aws.amazon.com/ec2/v2/home?region=us-west-2#KeyPairs:
|
||||||
|
#
|
||||||
|
key_name = "${var.key_name}"
|
||||||
|
|
||||||
|
# Our Security group to allow HTTP and SSH access
|
||||||
|
security_groups = ["${aws_security_group.default.name}"]
|
||||||
|
|
||||||
|
user_data = "${file("userdata.sh")}"
|
||||||
|
#Instance tags
|
||||||
|
tags {
|
||||||
|
Name = "elb-example"
|
||||||
|
}
|
||||||
|
}
|
3
examples/aws-elb/outputs.tf
Normal file
3
examples/aws-elb/outputs.tf
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
output "address" {
|
||||||
|
value = "${aws_elb.web.dns_name}"
|
||||||
|
}
|
3
examples/aws-elb/userdata.sh
Normal file
3
examples/aws-elb/userdata.sh
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/bash -v
|
||||||
|
apt-get update -y
|
||||||
|
apt-get install -y nginx > /tmp/nginx.log
|
17
examples/aws-elb/variables.tf
Normal file
17
examples/aws-elb/variables.tf
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
variable "key_name" {
|
||||||
|
description = "Name of the SSH keypair to use in AWS."
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "aws_region" {
|
||||||
|
description = "AWS region to launch servers."
|
||||||
|
default = "us-east-1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# ubuntu-trusty-14.04 (x64)
|
||||||
|
variable "aws_amis" {
|
||||||
|
default = {
|
||||||
|
"us-east-1" = "ami-5f709f34"
|
||||||
|
"us-west-2" = "ami-7f675e4f"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user