Skip to content

Commit 8233c88

Browse files
committed
[add] Added files
0 parents  commit 8233c88

26 files changed

+1663
-0
lines changed

.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
mykey
2+
.tfstate
+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"aws": "2cb7ba40c1496959553c7bd6c224cc18ac2791c2f3f7d2a60d481ddc79dc1ca6",
3+
"template": "f1d8e373d9f89d21fade8858a562bed75b463c814a2cf8fb750eb017083f1e88"
4+
}
Binary file not shown.
Binary file not shown.

.terraform/terraform.tfstate

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
{
2+
"version": 3,
3+
"serial": 1,
4+
"lineage": "06907ce5-e150-5588-b91a-74c2707e5a3c",
5+
"backend": {
6+
"type": "s3",
7+
"config": {
8+
"bucket": "terraform-state-luislongo-123",
9+
"key": "terraform/docker-demo-3",
10+
"region": "eu-west-1"
11+
},
12+
"hash": 4093006775391328672
13+
},
14+
"modules": [
15+
{
16+
"path": [
17+
"root"
18+
],
19+
"outputs": {},
20+
"resources": {},
21+
"depends_on": []
22+
}
23+
]
24+
}

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
My terraform examples to test the examples of this course https://github.com/wardviaene/terraform-course

backend.tf

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
terraform {
2+
backend "s3" {
3+
bucket= "terraform-state-luislongo-123"
4+
key= "terraform/docker-demo-3"
5+
region= "eu-west-1"
6+
}
7+
}

cloudinit.tf

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
data "template_file" "jenkins-init" {
2+
template = "${file("scripts/jenkins-init.sh")}"
3+
vars {
4+
DEVICE = "${var.INSTANCE_DEVICE_NAME}"
5+
JENKINS_VERSION = "${var.JENKINS_VERSION}"
6+
TERRAFORM_VERSION = "${var.TERRAFORM_VERSION}"
7+
}
8+
}
9+
data "template_cloudinit_config" "cloudinit-jenkins" {
10+
11+
gzip = false
12+
base64_encode = false
13+
14+
part {
15+
content_type = "text/x-shellscript"
16+
content = "${data.template_file.jenkins-init.rendered}"
17+
}
18+
19+
}

ecr.tf

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
resource "aws_ecr_repository" "myapp" {
2+
name = "myapp"
3+
}

ecs.tf

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# cluster
2+
resource "aws_ecs_cluster" "example-cluster" {
3+
name = "example-cluster"
4+
}
5+
resource "aws_launch_configuration" "ecs-example-launchconfig" {
6+
name_prefix = "ecs-launchconfig"
7+
image_id = "${lookup(var.ECS_AMIS, var.AWS_REGION)}"
8+
instance_type = "${var.ECS_INSTANCE_TYPE}"
9+
key_name = "${aws_key_pair.mykeypair.key_name}"
10+
iam_instance_profile = "${aws_iam_instance_profile.ecs-ec2-role.id}"
11+
security_groups = ["${aws_security_group.ecs-securitygroup.id}"]
12+
user_data = "#!/bin/bash\necho 'ECS_CLUSTER=example-cluster' > /etc/ecs/ecs.config\nstart ecs"
13+
lifecycle { create_before_destroy = true }
14+
}
15+
resource "aws_autoscaling_group" "ecs-example-autoscaling" {
16+
name = "ecs-example-autoscaling"
17+
vpc_zone_identifier = ["${aws_subnet.main-public-1.id}", "${aws_subnet.main-public-2.id}"]
18+
launch_configuration = "${aws_launch_configuration.ecs-example-launchconfig.name}"
19+
min_size = 1
20+
max_size = 1
21+
tag {
22+
key = "Name"
23+
value = "ecs-ec2-container"
24+
propagate_at_launch = true
25+
}
26+
}
27+
28+

iam.tf

+113
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
# ecs ec2 role
2+
resource "aws_iam_role" "ecs-ec2-role" {
3+
name = "ecs-ec2-role"
4+
assume_role_policy = <<EOF
5+
{
6+
"Version": "2012-10-17",
7+
"Statement": [
8+
{
9+
"Action": "sts:AssumeRole",
10+
"Principal": {
11+
"Service": "ec2.amazonaws.com"
12+
},
13+
"Effect": "Allow",
14+
"Sid": ""
15+
}
16+
]
17+
}
18+
EOF
19+
}
20+
resource "aws_iam_instance_profile" "ecs-ec2-role" {
21+
name = "ecs-ec2-role"
22+
role = "${aws_iam_role.ecs-ec2-role.name}"
23+
}
24+
25+
resource "aws_iam_role" "ecs-consul-server-role" {
26+
name = "ecs-consul-server-role"
27+
assume_role_policy = <<EOF
28+
{
29+
"Version": "2012-10-17",
30+
"Statement": [
31+
{
32+
"Action": "sts:AssumeRole",
33+
"Principal": {
34+
"Service": "ec2.amazonaws.com"
35+
},
36+
"Effect": "Allow",
37+
"Sid": ""
38+
}
39+
]
40+
}
41+
EOF
42+
}
43+
44+
resource "aws_iam_role_policy" "ecs-ec2-role-policy" {
45+
name = "ecs-ec2-role-policy"
46+
role = "${aws_iam_role.ecs-ec2-role.id}"
47+
policy = <<EOF
48+
{
49+
"Version": "2012-10-17",
50+
"Statement": [
51+
{
52+
"Effect": "Allow",
53+
"Action": [
54+
"ecs:CreateCluster",
55+
"ecs:DeregisterContainerInstance",
56+
"ecs:DiscoverPollEndpoint",
57+
"ecs:Poll",
58+
"ecs:RegisterContainerInstance",
59+
"ecs:StartTelemetrySession",
60+
"ecs:Submit*",
61+
"ecs:StartTask",
62+
"ecr:GetAuthorizationToken",
63+
"ecr:BatchCheckLayerAvailability",
64+
"ecr:GetDownloadUrlForLayer",
65+
"ecr:BatchGetImage",
66+
"logs:CreateLogStream",
67+
"logs:PutLogEvents"
68+
],
69+
"Resource": "*"
70+
},
71+
{
72+
"Effect": "Allow",
73+
"Action": [
74+
"logs:CreateLogGroup",
75+
"logs:CreateLogStream",
76+
"logs:PutLogEvents",
77+
"logs:DescribeLogStreams"
78+
],
79+
"Resource": [
80+
"arn:aws:logs:*:*:*"
81+
]
82+
}
83+
]
84+
}
85+
EOF
86+
}
87+
88+
# ecs service role
89+
resource "aws_iam_role" "ecs-service-role" {
90+
name = "ecs-service-role"
91+
assume_role_policy = <<EOF
92+
{
93+
"Version": "2012-10-17",
94+
"Statement": [
95+
{
96+
"Action": "sts:AssumeRole",
97+
"Principal": {
98+
"Service": "ecs.amazonaws.com"
99+
},
100+
"Effect": "Allow",
101+
"Sid": ""
102+
}
103+
]
104+
}
105+
EOF
106+
}
107+
108+
resource "aws_iam_policy_attachment" "ecs-service-attach1" {
109+
name = "ecs-service-attach1"
110+
roles = ["${aws_iam_role.ecs-service-role.name}"]
111+
policy_arn = "arn:aws:iam::aws:policy/service-role/AmazonEC2ContainerServiceRole"
112+
}
113+

jenkins.tf

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
resource "aws_instance" "jenkins-instance" {
2+
ami = "${lookup(var.AMIS, var.AWS_REGION)}"
3+
instance_type = "t2.micro"
4+
5+
# the VPC subnet
6+
subnet_id = "${aws_subnet.main-public-1.id}"
7+
8+
# the security group
9+
vpc_security_group_ids = ["${aws_security_group.jenkins-securitygroup.id}"]
10+
11+
# the public SSH key
12+
key_name = "${aws_key_pair.mykeypair.key_name}"
13+
14+
# user data
15+
user_data = "${data.template_cloudinit_config.cloudinit-jenkins.rendered}"
16+
17+
}
18+
19+
resource "aws_ebs_volume" "jenkins-data" {
20+
availability_zone = "eu-west-1a"
21+
size = 20
22+
type = "gp2"
23+
tags {
24+
Name = "jenkins-data"
25+
}
26+
}
27+
28+
resource "aws_volume_attachment" "jenkins-data-attachment" {
29+
device_name = "${var.INSTANCE_DEVICE_NAME}"
30+
volume_id = "${aws_ebs_volume.jenkins-data.id}"
31+
instance_id = "${aws_instance.jenkins-instance.id}"
32+
}
33+

key.tf

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
resource "aws_key_pair" "mykeypair" {
2+
key_name = "mykeypair"
3+
public_key = "${file("${var.PATH_TO_PUBLIC_KEY}")}"
4+
lifecycle {
5+
ignore_changes = ["public_key"]
6+
}
7+
}

myapp-vars.tf

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
variable "MYAPP_SERVICE_ENABLE" { default = "0" }
2+
variable "MYAPP_VERSION" { default = "0" }

myapp.tf

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# app
2+
3+
data "template_file" "myapp-task-definition-template" {
4+
template = "${file("templates/app.json.tpl")}"
5+
vars {
6+
REPOSITORY_URL = "${replace("${aws_ecr_repository.myapp.repository_url}", "https://", "")}"
7+
APP_VERSION = "${var.MYAPP_VERSION}"
8+
}
9+
}
10+
11+
resource "aws_ecs_task_definition" "myapp-task-definition" {
12+
family = "myapp"
13+
container_definitions = "${data.template_file.myapp-task-definition-template.rendered}"
14+
}
15+
16+
resource "aws_ecs_service" "myapp-service" {
17+
count = "${var.MYAPP_SERVICE_ENABLE}"
18+
name = "myapp"
19+
cluster = "${aws_ecs_cluster.example-cluster.id}"
20+
task_definition = "${aws_ecs_task_definition.myapp-task-definition.arn}"
21+
desired_count = 1
22+
iam_role = "${aws_iam_role.ecs-service-role.arn}"
23+
depends_on = ["aws_iam_policy_attachment.ecs-service-attach1"]
24+
25+
load_balancer {
26+
elb_name = "${aws_elb.myapp-elb.name}"
27+
container_name = "myapp"
28+
container_port = 3000
29+
}
30+
lifecycle { ignore_changes = ["task_definition"] }
31+
}
32+
33+
# load balancer
34+
resource "aws_elb" "myapp-elb" {
35+
name = "myapp-elb"
36+
37+
listener {
38+
instance_port = 3000
39+
instance_protocol = "http"
40+
lb_port = 80
41+
lb_protocol = "http"
42+
}
43+
44+
health_check {
45+
healthy_threshold = 3
46+
unhealthy_threshold = 3
47+
timeout = 30
48+
target = "HTTP:3000/"
49+
interval = 60
50+
}
51+
52+
cross_zone_load_balancing = true
53+
idle_timeout = 400
54+
connection_draining = true
55+
connection_draining_timeout = 400
56+
57+
subnets = ["${aws_subnet.main-public-1.id}","${aws_subnet.main-public-2.id}"]
58+
security_groups = ["${aws_security_group.myapp-elb-securitygroup.id}"]
59+
60+
tags {
61+
Name = "myapp-elb"
62+
}
63+
}
64+

mykey.pub

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5R3hBGD182YcOnTXykn/bM4vhUUeAGFelk6yR4PhxXdbaYisshwnyQdOkuBpS/LfjHeT4xgjwovCIY32xpj0pgUsonlhCUzrs6Ec+69gFvIIK9b3C2U2UjoKQULjONUco2ZB0IlvRWTd80DiRlHGZbou8oAgx87TQ8PR8x1iKDECK2hUTYQE/ztnNubsT3sNZ1kfwjR51APPbJ4DIAJMDyIK7BwyecfiAU1b8iXjBS4fAhMvnDhaTeEKfuPSPp9a2X6PLzgDW5enPmckBfk9PVlpChnBPuY3DppG7MMP19+xve9FpMdikksTPvNMXoUAggwd3tek0spg7DQgYxRit nagraops@debian-nagraops

output.tf

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
output "elb" {
2+
value = "${aws_elb.myapp-elb.dns_name}"
3+
}
4+
output "jenkins" {
5+
value = "${aws_instance.jenkins-instance.public_ip}"
6+
}
7+
output "myapp-repository-URL" {
8+
value = "${aws_ecr_repository.myapp.repository_url}"
9+
}

provider.tf

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
provider "aws" {
2+
version = "~> 1.13"
3+
region = "${var.AWS_REGION}"
4+
}

s3.tf

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
resource "aws_s3_bucket" "terraform-state" {
2+
bucket = "terraform-state-luislongo-123"
3+
acl = "private"
4+
5+
tags {
6+
Name = "Terraform state"
7+
}
8+
}

0 commit comments

Comments
 (0)