@@ -2,31 +2,68 @@ provider "aws" {
2
2
region = local. region
3
3
}
4
4
5
+ data "aws_availability_zones" "available" {}
6
+
5
7
locals {
6
- availability_zone = " ${ local . region } a"
7
- name = " example-ec2-volume-attachment"
8
- region = " eu-west-1"
8
+ name = " ex-${ basename (path. cwd )} "
9
+ region = " eu-west-1"
10
+
11
+ vpc_cidr = " 10.0.0.0/16"
12
+ azs = slice (data. aws_availability_zones . available . names , 0 , 3 )
13
+
9
14
tags = {
10
- Owner = " user"
11
- Environment = " dev"
15
+ Name = local.name
16
+ Example = local.name
17
+ Repository = " https://github.com/terraform-aws-modules/terraform-aws-ec2-instance"
12
18
}
13
19
}
14
20
21
+ # ###############################################################################
22
+ # EC2 Module
23
+ # ###############################################################################
24
+
25
+ module "ec2" {
26
+ source = " ../../"
27
+
28
+ name = local. name
29
+
30
+ ami = data. aws_ami . amazon_linux . id
31
+ instance_type = " c5.large"
32
+ availability_zone = element (local. azs , 0 )
33
+ subnet_id = element (module. vpc . private_subnets , 0 )
34
+ vpc_security_group_ids = [module . security_group . security_group_id ]
35
+ associate_public_ip_address = true
36
+
37
+ tags = local. tags
38
+ }
39
+
40
+ resource "aws_volume_attachment" "this" {
41
+ device_name = " /dev/sdh"
42
+ volume_id = aws_ebs_volume. this . id
43
+ instance_id = module. ec2 . id
44
+ }
45
+
46
+ resource "aws_ebs_volume" "this" {
47
+ availability_zone = element (local. azs , 0 )
48
+ size = 1
49
+
50
+ tags = local. tags
51
+ }
52
+
15
53
# ###############################################################################
16
54
# Supporting Resources
17
55
# ###############################################################################
18
56
19
57
module "vpc" {
20
58
source = " terraform-aws-modules/vpc/aws"
21
- version = " ~> 3 .0"
59
+ version = " ~> 4 .0"
22
60
23
61
name = local. name
24
- cidr = " 10.99.0.0/18 "
62
+ cidr = local . vpc_cidr
25
63
26
- azs = [" ${ local . region } a" , " ${ local . region } b" , " ${ local . region } c" ]
27
- public_subnets = [" 10.99.0.0/24" , " 10.99.1.0/24" , " 10.99.2.0/24" ]
28
- private_subnets = [" 10.99.3.0/24" , " 10.99.4.0/24" , " 10.99.5.0/24" ]
29
- database_subnets = [" 10.99.7.0/24" , " 10.99.8.0/24" , " 10.99.9.0/24" ]
64
+ azs = local. azs
65
+ private_subnets = [for k , v in local . azs : cidrsubnet (local. vpc_cidr , 4 , k)]
66
+ public_subnets = [for k , v in local . azs : cidrsubnet (local. vpc_cidr , 8 , k + 48 )]
30
67
31
68
tags = local. tags
32
69
}
@@ -55,35 +92,3 @@ module "security_group" {
55
92
56
93
tags = local. tags
57
94
}
58
-
59
- # ###############################################################################
60
- # EC2 Module
61
- # ###############################################################################
62
-
63
- module "ec2" {
64
- source = " ../../"
65
-
66
- name = local. name
67
-
68
- ami = data. aws_ami . amazon_linux . id
69
- instance_type = " c5.large"
70
- availability_zone = local. availability_zone
71
- subnet_id = element (module. vpc . private_subnets , 0 )
72
- vpc_security_group_ids = [module . security_group . security_group_id ]
73
- associate_public_ip_address = true
74
-
75
- tags = local. tags
76
- }
77
-
78
- resource "aws_volume_attachment" "this" {
79
- device_name = " /dev/sdh"
80
- volume_id = aws_ebs_volume. this . id
81
- instance_id = module. ec2 . id
82
- }
83
-
84
- resource "aws_ebs_volume" "this" {
85
- availability_zone = local. availability_zone
86
- size = 1
87
-
88
- tags = local. tags
89
- }
0 commit comments