website: add AWS example

This commit is contained in:
Jack Pearkes 2014-07-27 21:23:42 -04:00
parent 7ef47671b0
commit a16b34e4d6
1 changed files with 93 additions and 6 deletions

View File

@ -10,16 +10,103 @@ This provides a template for running a simple two-tier architecture on Amazon
Web services.
The basic premise is you have stateless app servers running behind
and ELB serving traffic. State for your application is stored in an RDS
an ELB serving traffic. State for your application is stored in an RDS
database.
This ignores deploying and getting data onto the application
servers intentionally to simplify. However, you could do so either via
[provisioners](/docs/provisioners/index.html) or by pre-baking configured
AMIs with [Packer](http://www.packer.io).
To simplify the example, this intentionally ignores deploying and
getting your application onto the servers. However, you could do so either via
[provisioners](/docs/provisioners/index.html) and a configuration
management tool, or by pre-baking configured AMIs with
[Packer](http://www.packer.io).
After you run `terraform apply` on this configuration, it will
automatically output the DNS address of the ELB. After your instance
registers, this should respond with the default nginx web page.
## Configuration
```
FOOBAR
# Our default security group to access
# the instances over SSH and HTTP
resource "aws_security_group" "default" {
name = "terraform_example"
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"]
}
}
resource "aws_elb" "web" {
name = "terraform-example-elb"
# The same availability zone as our instance
availability_zones = ["${aws_instance.web.availability_zone}"]
listener {
instance_port = 80
instance_protocol = "http"
lb_port = 80
lb_protocol = "http"
}
# The instance is registered automatically
instances = ["${aws_instance.web.id}"]
}
resource "aws_instance" "web" {
# The connection block tells our provisioner how to
# communicate with the resource (instance)
connection {
# The default username for our AMI
user = "ubuntu"
# The path to your keyfile
key_file = "/Users/pearkes/Desktop/hashicorp-demo.pem"
}
instance_type = "m1.small"
# ubuntu-precise-12.04-amd64-server
ami = "ami-4fccb37f"
# 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 = "hashicorp-demo"
# Our Security group to allow HTTP and SSH access
security_groups = ["${aws_security_group.default.name}"]
# We run a remote provisioner on the instance after creating it.
# In this case, we just install nginx and start it. By default,
# this should be on port 80
provisioner "remote-exec" {
inline = [
"sudo apt-get -y update",
"sudo apt-get -y install nginx",
"sudo service nginx start",
]
}
}
output "address" {
value = "${aws_elb.web.dns_name}"
}
```