lono 3.5.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +15 -4
  3. data/.rspec +1 -0
  4. data/CHANGELOG.md +15 -1
  5. data/Gemfile +3 -3
  6. data/Guardfile +17 -8
  7. data/{LICENSE → LICENSE.txt} +1 -1
  8. data/README.md +20 -12
  9. data/Rakefile +1 -2
  10. data/{bin → exe}/lono +1 -0
  11. data/lib/lono.rb +12 -9
  12. data/lib/lono/cfn.rb +7 -9
  13. data/lib/lono/cfn/{aws_services.rb → aws_service.rb} +1 -1
  14. data/lib/lono/cfn/base.rb +41 -38
  15. data/lib/lono/cfn/create.rb +6 -2
  16. data/lib/lono/cfn/delete.rb +2 -2
  17. data/lib/lono/cfn/diff.rb +1 -1
  18. data/lib/lono/cfn/preview.rb +26 -15
  19. data/lib/lono/cfn/update.rb +11 -9
  20. data/lib/lono/cfn/util.rb +3 -3
  21. data/lib/lono/clean.rb +1 -1
  22. data/lib/lono/cli.rb +71 -39
  23. data/lib/lono/command.rb +42 -18
  24. data/lib/lono/completer.rb +162 -0
  25. data/lib/lono/completer/script.rb +6 -0
  26. data/lib/lono/completer/script.sh +10 -0
  27. data/lib/lono/completion.rb +15 -0
  28. data/lib/lono/core.rb +23 -9
  29. data/lib/lono/core/config.rb +20 -0
  30. data/lib/lono/default/settings.yml +33 -13
  31. data/lib/lono/help.rb +6 -79
  32. data/lib/lono/help/cfn.md +6 -0
  33. data/lib/lono/help/cfn/create.md +22 -0
  34. data/lib/lono/help/cfn/delete.md +5 -0
  35. data/lib/lono/help/cfn/diff.md +5 -0
  36. data/lib/lono/help/cfn/download.md +5 -0
  37. data/lib/lono/help/cfn/preview.md +11 -0
  38. data/lib/lono/help/cfn/update.md +21 -0
  39. data/lib/lono/help/completion.md +22 -0
  40. data/lib/lono/help/completion_script.md +3 -0
  41. data/lib/lono/help/generate.md +7 -0
  42. data/lib/lono/help/hello.md +5 -0
  43. data/lib/lono/help/import.md +7 -0
  44. data/lib/lono/help/inspect.md +4 -0
  45. data/lib/lono/help/inspect/depends.md +3 -0
  46. data/lib/lono/help/inspect/summary.md +3 -0
  47. data/lib/lono/help/new.md +8 -0
  48. data/lib/lono/help/param.md +3 -0
  49. data/lib/lono/{param/help.rb → help/param/generate.md} +1 -9
  50. data/lib/lono/help/script/build.md +5 -0
  51. data/lib/lono/help/script/upload.md +8 -0
  52. data/lib/lono/help/template.md +4 -0
  53. data/lib/lono/help/template/bashify.md +4 -0
  54. data/lib/lono/help/template/generate.md +7 -0
  55. data/lib/lono/help/user_data.md +3 -0
  56. data/lib/lono/importer.rb +43 -20
  57. data/lib/lono/inspector.rb +2 -19
  58. data/lib/lono/inspector/base.rb +2 -2
  59. data/lib/lono/inspector/{depends.rb → graph.rb} +3 -3
  60. data/lib/lono/inspector/summary.rb +1 -1
  61. data/lib/lono/new.rb +79 -26
  62. data/lib/lono/new/helper.rb +16 -0
  63. data/lib/lono/new/message.rb +35 -0
  64. data/lib/lono/param.rb +1 -2
  65. data/lib/lono/param/generator.rb +34 -86
  66. data/lib/lono/project_checker.rb +35 -40
  67. data/lib/lono/script.rb +19 -0
  68. data/lib/lono/script/base.rb +9 -0
  69. data/lib/lono/script/build.rb +73 -0
  70. data/lib/lono/script/upload.rb +81 -0
  71. data/lib/lono/sequence.rb +33 -0
  72. data/lib/lono/setting.rb +83 -0
  73. data/lib/lono/template.rb +8 -9
  74. data/lib/lono/template/{aws_services.rb → aws_service.rb} +1 -1
  75. data/lib/lono/template/context.rb +73 -0
  76. data/lib/lono/template/dsl.rb +63 -64
  77. data/lib/lono/template/helper.rb +201 -0
  78. data/lib/lono/template/template.rb +29 -221
  79. data/lib/lono/template/upload.rb +41 -33
  80. data/lib/lono/upgrade4.rb +175 -0
  81. data/lib/lono/user_data.rb +31 -0
  82. data/lib/lono/version.rb +1 -1
  83. data/lib/starter_projects/autoscaling/.gitignore +1 -0
  84. data/lib/starter_projects/{json_project → autoscaling}/Gemfile +0 -0
  85. data/lib/starter_projects/{yaml_project → autoscaling}/Guardfile +0 -0
  86. data/lib/starter_projects/autoscaling/README.md +118 -0
  87. data/lib/starter_projects/autoscaling/app/definitions/base.rb +2 -0
  88. data/lib/starter_projects/autoscaling/app/templates/autoscaling.yml +682 -0
  89. data/lib/starter_projects/autoscaling/config/params/base/autoscaling.txt +6 -0
  90. data/lib/starter_projects/autoscaling/config/settings.yml +33 -0
  91. data/lib/starter_projects/ec2/.gitignore +1 -0
  92. data/lib/starter_projects/{yaml_project → ec2}/Gemfile +0 -0
  93. data/lib/starter_projects/{json_project → ec2}/Guardfile +1 -1
  94. data/lib/starter_projects/ec2/README.md +86 -0
  95. data/lib/starter_projects/ec2/app/definitions/base.rb +2 -0
  96. data/lib/starter_projects/ec2/app/definitions/development.rb +1 -0
  97. data/lib/starter_projects/ec2/app/definitions/production.rb +1 -0
  98. data/lib/starter_projects/{yaml_project → ec2/app}/helpers/my_custom_helper.rb +0 -0
  99. data/lib/starter_projects/{json_project/templates/user_data/app.sh → ec2/app/partials/user_data/bootstrap.sh} +1 -2
  100. data/lib/starter_projects/{yaml_project → ec2/app}/templates/example.yml +0 -0
  101. data/lib/starter_projects/{json_project/params/base/api-web.txt → ec2/config/params/base/example.txt} +0 -0
  102. data/lib/starter_projects/ec2/config/params/development/example.txt +3 -0
  103. data/lib/starter_projects/ec2/config/params/production/example.txt +2 -0
  104. data/lib/starter_projects/ec2/config/settings.yml +33 -0
  105. data/lib/starter_projects/ec2/config/variables/base.rb +3 -0
  106. data/lib/starter_projects/ec2/config/variables/development.rb +2 -0
  107. data/lib/starter_projects/ec2/config/variables/production.rb +2 -0
  108. data/lib/starter_projects/ec2/welcome.txt +8 -0
  109. data/lib/starter_projects/skeleton/.gitignore +1 -0
  110. data/lib/starter_projects/skeleton/Gemfile +3 -0
  111. data/lib/starter_projects/skeleton/Guardfile +12 -0
  112. data/lib/starter_projects/skeleton/README.md +53 -0
  113. data/{spec/fixtures/my_project/templates/.gitkeep → lib/starter_projects/skeleton/app/definitions/base.rb} +0 -0
  114. data/lib/starter_projects/skeleton/config/settings.yml +33 -0
  115. data/lib/starter_projects/skeleton/welcome.txt +7 -0
  116. data/lono.gemspec +12 -10
  117. data/spec/fixtures/lono_project/.gitignore +1 -0
  118. data/spec/fixtures/lono_project/Gemfile +3 -0
  119. data/spec/fixtures/lono_project/Guardfile +12 -0
  120. data/spec/fixtures/lono_project/app/definitions/base.rb +10 -0
  121. data/spec/fixtures/lono_project/app/definitions/base/more.rb +7 -0
  122. data/spec/fixtures/lono_project/app/definitions/development.rb +1 -0
  123. data/spec/fixtures/lono_project/app/definitions/production.rb +1 -0
  124. data/spec/fixtures/lono_project/app/helpers/custom_helper.rb +5 -0
  125. data/spec/fixtures/lono_project/app/partials/security_group.yml +10 -0
  126. data/{lib/starter_projects/yaml_project/templates/partial → spec/fixtures/lono_project/app/partials}/user_data/bootstrap.sh +8 -2
  127. data/spec/fixtures/lono_project/app/templates/example.yml +50 -0
  128. data/{lib/starter_projects/yaml_project/params/base/api-web-prod.txt → spec/fixtures/lono_project/config/params/base/example.txt} +1 -0
  129. data/spec/fixtures/lono_project/config/params/development/example.txt +1 -0
  130. data/spec/fixtures/lono_project/config/params/production/example.txt +1 -0
  131. data/spec/fixtures/lono_project/config/settings.yml +31 -0
  132. data/spec/fixtures/lono_project/config/variables/base.rb +3 -0
  133. data/spec/fixtures/lono_project/config/variables/development.rb +1 -0
  134. data/spec/fixtures/lono_project/config/variables/production.rb +1 -0
  135. data/spec/fixtures/params/envonly/params/{prod → development}/network.txt +0 -0
  136. data/spec/fixtures/params/overlay/params/{prod → development}/network.txt +0 -0
  137. data/spec/fixtures/raw_templates/aws-waf-security-automations.template +2 -2
  138. data/spec/lib/lono/cfn_spec.rb +6 -9
  139. data/spec/lib/lono/cli_spec.rb +44 -0
  140. data/spec/lib/lono/completion_spec.rb +17 -0
  141. data/spec/lib/lono/inspect_spec.rb +6 -15
  142. data/spec/lib/lono/param/generator_spec.rb +45 -26
  143. data/spec/lib/lono/param_spec.rb +1 -3
  144. data/spec/lib/lono/setting_spec.rb +47 -0
  145. data/spec/lib/lono/template/dsl_spec.rb +33 -157
  146. data/spec/lib/lono/template_spec.rb +4 -16
  147. data/spec/spec_helper.rb +45 -14
  148. metadata +168 -82
  149. data/.coveralls.yml +0 -1
  150. data/lib/lono/cfn/help.rb +0 -103
  151. data/lib/lono/current_region.rb +0 -42
  152. data/lib/lono/inspector/help.rb +0 -21
  153. data/lib/lono/settings.rb +0 -45
  154. data/lib/lono/template/help.rb +0 -25
  155. data/lib/lono/template/helpers.rb +0 -136
  156. data/lib/starter_projects/json_project/.gitignore +0 -1
  157. data/lib/starter_projects/json_project/config/templates/base/blog.rb +0 -20
  158. data/lib/starter_projects/json_project/config/templates/base/stacks.rb +0 -58
  159. data/lib/starter_projects/json_project/templates/db.json +0 -212
  160. data/lib/starter_projects/json_project/templates/partial/host_record.json +0 -28
  161. data/lib/starter_projects/json_project/templates/partial/server.json +0 -45
  162. data/lib/starter_projects/json_project/templates/user_data/db.sh +0 -39
  163. data/lib/starter_projects/json_project/templates/user_data/db2.sh +0 -2
  164. data/lib/starter_projects/json_project/templates/user_data/ruby_script.rb +0 -5
  165. data/lib/starter_projects/json_project/templates/web.json +0 -386
  166. data/lib/starter_projects/yaml_project/.gitignore +0 -1
  167. data/lib/starter_projects/yaml_project/config/templates/base/blog.rb +0 -20
  168. data/lib/starter_projects/yaml_project/config/templates/base/stacks.rb +0 -56
  169. data/lib/starter_projects/yaml_project/config/templates/prod/stacks.rb +0 -1
  170. data/lib/starter_projects/yaml_project/config/templates/stag/stacks.rb +0 -1
  171. data/lib/starter_projects/yaml_project/config/variables/base/variables.rb +0 -4
  172. data/lib/starter_projects/yaml_project/config/variables/prod/variables.rb +0 -1
  173. data/lib/starter_projects/yaml_project/config/variables/stag/variables.rb +0 -1
  174. data/lib/starter_projects/yaml_project/params/base/example.txt +0 -2
  175. data/lib/starter_projects/yaml_project/params/prod/example.txt +0 -1
  176. data/lib/starter_projects/yaml_project/params/stag/example.txt +0 -1
  177. data/lib/starter_projects/yaml_project/templates/db.yml +0 -148
  178. data/lib/starter_projects/yaml_project/templates/partial/host_record.yml +0 -14
  179. data/lib/starter_projects/yaml_project/templates/partial/server.yml +0 -59
  180. data/lib/starter_projects/yaml_project/templates/web.yml +0 -206
  181. data/spec/fixtures/my_project/config/templates/base/stacks.rb +0 -3
  182. data/spec/fixtures/my_project/params/my-stack.txt +0 -3
  183. data/spec/fixtures/my_project/templates/my-stack.yml +0 -0
  184. data/spec/lib/lono/new_spec.rb +0 -59
  185. data/spec/lib/lono/template/template_spec.rb +0 -104
  186. data/spec/lib/lono_spec.rb +0 -27
@@ -1 +0,0 @@
1
- /output
@@ -1,20 +0,0 @@
1
- template "blog-web" do
2
- app,role,env = name.split('-')
3
- source "web"
4
- variables(
5
- env: env,
6
- app: app,
7
- role: role,
8
- instance_type: "t2.small",
9
- port: "80",
10
- high_threshold: "35",
11
- high_periods: "4",
12
- low_threshold: "20",
13
- low_periods: "2",
14
- max_size: "6",
15
- min_size: "3",
16
- down_adjustment: "-1",
17
- up_adjustment: "2"
18
- )
19
- end
20
-
@@ -1,56 +0,0 @@
1
- template "example"
2
-
3
- template "api-web" do
4
- source "web"
5
- variables(
6
- instance_type: "t2.small",
7
- port: "80",
8
- high_threshold: "15",
9
- high_periods: "4",
10
- low_threshold: "5",
11
- low_periods: "10",
12
- max_size: "24",
13
- min_size: "6",
14
- down_adjustment: "-3",
15
- up_adjustment: "3",
16
- ssl_cert: "arn:aws:iam::12345:server-certificate/wildcard"
17
- )
18
- end
19
-
20
- template "api-worker" do
21
- source "web"
22
- variables(
23
- instance_type: "t2.small",
24
- port: "80",
25
- high_threshold: "15",
26
- high_periods: "4",
27
- low_threshold: "5",
28
- low_periods: "10",
29
- max_size: "24",
30
- min_size: "6",
31
- down_adjustment: "-3",
32
- up_adjustment: "3",
33
- user_data_script: "ruby_script.rb",
34
- ssl_cert: "arn:aws:iam::12345:server-certificate/wildcard"
35
- )
36
- end
37
-
38
- template "api-redis" do
39
- source "db"
40
- variables(
41
- instance_type: "t2.small",
42
- port: "80",
43
- volume_size: "20",
44
- availability_zone: "us-east-1e"
45
- )
46
- end
47
-
48
- template "parent/db-stack" do
49
- source "db"
50
- variables(
51
- instance_type: "t2.small",
52
- port: "80",
53
- volume_size: "20",
54
- availability_zone: "us-east-1e"
55
- )
56
- end
@@ -1 +0,0 @@
1
- # resources that only exist in the prod environment
@@ -1 +0,0 @@
1
- # resources that only exist in the stag environment
@@ -1,4 +0,0 @@
1
- @ami = "ami-123"
2
- @base_only = "base-only-test"
3
- @prod_override = "overridden-by-whats-in-prod"
4
- @stag_override = "overridden-by-whats-in-stag"
@@ -1 +0,0 @@
1
- @prod_override = "prod-override-test"
@@ -1 +0,0 @@
1
- @stag_override = "stag-override-test"
@@ -1,2 +0,0 @@
1
- InstanceType=t2.micro
2
- KeyName=tutorial
@@ -1 +0,0 @@
1
- InstanceType=m4.large
@@ -1 +0,0 @@
1
- InstanceType=m4.small
@@ -1,148 +0,0 @@
1
- <% @app,@role,@env = name.sub('.yml','').split('-') -%>
2
- ---
3
- AWSTemplateFormatVersion: '2010-09-09'
4
- Description: '<%= @app.capitalize %> <%= @role %>'
5
- Outputs:
6
- DBHostname:
7
- Description: Hostname for Redis
8
- Value:
9
- Fn::Join:
10
- - ''
11
- - - ''
12
- - Fn::GetAtt:
13
- - server
14
- - PublicDnsName
15
- Parameters:
16
- Ami:
17
- Default: <%= @ami %>
18
- Description: deploy ami
19
- Type: String
20
- Application:
21
- Default: <%= @app %>
22
- Description: foo, bar, etc
23
- Type: String
24
- Environment:
25
- Default: <%= @env %>
26
- Description: stag, prod etc
27
- Type: String
28
- InstanceType:
29
- AllowedValues:
30
- - t1.micro
31
- - m1.small
32
- - m1.medium
33
- - m1.large
34
- - m1.xlarge
35
- - m2.xlarge
36
- - m2.2xlarge
37
- - m2.4xlarge
38
- - c1.medium
39
- - c1.xlarge
40
- - cc1.4xlarge
41
- - cc2.8xlarge
42
- - cg1.4xlarge
43
- ConstraintDescription: must be a valid EC2 instance type.
44
- Default: <%= @instance_type %>
45
- Description: server EC2 instance type
46
- Type: String
47
- KeyName:
48
- AllowedPattern: "[-_ a-zA-Z0-9]*"
49
- ConstraintDescription: can contain only alphanumeric characters, spaces, dashes
50
- and underscores.
51
- Default: default
52
- Description: Name of an existing EC2 KeyPair to enable SSH access to the instances
53
- MaxLength: '64'
54
- MinLength: '1'
55
- Type: String
56
- Role:
57
- Default: '<%= @role %>'
58
- Description: redis, psql, app, etc
59
- Type: String
60
- StackNumber:
61
- Default: ''
62
- Description: s1, s2, s3, etc
63
- Type: String
64
- VolumeSize:
65
- ConstraintDescription: must be between 5 and 1024 Gb.
66
- Default: '<%= @volume_size %>'
67
- Description: Size of Volume
68
- MaxValue: '1024'
69
- MinValue: '5'
70
- Type: Number
71
- Resources:
72
- CfnUser:
73
- Properties:
74
- Path: "/"
75
- Policies:
76
- - PolicyDocument:
77
- Statement:
78
- - Action: cloudformation:DescribeStackResource
79
- Effect: Allow
80
- Resource: "*"
81
- PolicyName: root
82
- Type: AWS::IAM::User
83
- DataVolume:
84
- DeletionPolicy: Snapshot
85
- Properties:
86
- AvailabilityZone:
87
- Fn::GetAtt:
88
- - server
89
- - AvailabilityZone
90
- Size:
91
- Ref: VolumeSize
92
- Tags:
93
- - Key: Usage
94
- Value: Data Volume
95
- Type: AWS::EC2::Volume
96
- HostKeys:
97
- Properties:
98
- UserName:
99
- Ref: CfnUser
100
- Type: AWS::IAM::AccessKey
101
- HostRecord:
102
- Properties:
103
- Comment: DNS name for my stack.
104
- HostedZoneName: ".mydomain.net."
105
- Name:
106
- Fn::Join:
107
- - ''
108
- - - Ref: AWS::StackName
109
- - ".mydomain.net."
110
- ResourceRecords:
111
- - Fn::GetAtt:
112
- - server
113
- - PublicDnsName
114
- TTL: '60'
115
- Type: CNAME
116
- Type: AWS::Route53::RecordSet
117
- MountPoint:
118
- Properties:
119
- Device: "/dev/sdf"
120
- InstanceId:
121
- Ref: server
122
- VolumeId:
123
- Ref: DataVolume
124
- Type: AWS::EC2::VolumeAttachment
125
- ServiceSecurityGroup:
126
- Properties:
127
- GroupDescription: Enable SSH access.
128
- SecurityGroupIngress:
129
- - CidrIp: 0.0.0.0/0
130
- FromPort: '22'
131
- IpProtocol: tcp
132
- ToPort: '22'
133
- Type: AWS::EC2::SecurityGroup
134
- WaitCondition:
135
- DependsOn: MountPoint
136
- Metadata:
137
- Comment1: Note that the WaitCondition is dependent on the volume mount point
138
- allowing the volume to be created and attached to the EC2 instance
139
- Comment2: The instance bootstrap script waits for the volume to be attached
140
- to the instance prior to signalling completion.
141
- Properties:
142
- Handle:
143
- Ref: WaitHandle
144
- Timeout: '3000'
145
- Type: AWS::CloudFormation::WaitCondition
146
- WaitHandle:
147
- Type: AWS::CloudFormation::WaitConditionHandle
148
- <%= partial("server") %>
@@ -1,14 +0,0 @@
1
- HostRecord:
2
- Properties:
3
- Comment: DNS name for <%= @domain %>
4
- HostedZoneName: <%= @domain %>.
5
- Name:
6
- Fn::Join:
7
- - ''
8
- - - Ref: AWS::StackName
9
- - ".<%= @domain %>"
10
- ResourceRecords:
11
- - !GetAtt elb.DNSName
12
- TTL: '60'
13
- Type: CNAME
14
- Type: AWS::Route53::RecordSet
@@ -1,59 +0,0 @@
1
- server:
2
- Properties:
3
- AvailabilityZone: us-east-1e
4
- ImageId:
5
- Ref: Ami
6
- InstanceType:
7
- Ref: InstanceType
8
- KeyName:
9
- Ref: KeyName
10
- SecurityGroups:
11
- - global
12
- - Fn::Join:
13
- - "-"
14
- - - Ref: Environment
15
- - Ref: Application
16
- - Ref: ServiceSecurityGroup
17
- UserData:
18
- Fn::Base64: !Sub | # No more Fn::Join needed
19
- #!/bin/bash -lexv
20
- exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
21
-
22
- FIND_IN_MAP=!FindInMap [ MapName, TopLevelKey, SecondLevelKey ]
23
- HOSTNAME_PREFIX=!FindInMap [ EnvironmentMapping, HostnamePrefix, !Ref Environment ]
24
- BAR=!Ref DRINK ; MORE=!FindInMap [MapName, TopLevelKey, SecondLevelKey ]
25
-
26
- BASE64=!Base64 "value to encode"
27
- GET_ATT=!GetAtt server.PublicDnsName
28
- GET_AZS=!GetAZs us-east-1
29
- JOIN=!Join [ ":", [a, b, c]
30
- SELECT=!Select [ "1", [ a, b, c] ]
31
-
32
- VARTEST=<%= @vartest %>
33
-
34
- echo !Ref AWS::StackName > /tmp/stack_name
35
- # Helper function
36
- function error_exit
37
- {
38
- /usr/local/bin/cfn-signal -e 1 -r "$1" '!Ref WaitHandle'
39
- exit 1
40
- }
41
- # Wait for the EBS volume to show up
42
- while [ ! -e /dev/xvdf ]; do echo Waiting for EBS volume to attach; sleep 1; done
43
- /bin/mkdir /media/redis
44
- /sbin/mkfs -t ext4 /dev/xvdf
45
- echo "/dev/xvdf /media/redis auto defaults 0 0" >> /etc/fstab
46
- /bin/mount /media/redis
47
- /usr/bin/redis-cli shutdown
48
- sleep 10
49
- mv /var/lib/redis/* /media/redis/
50
- rm -r /var/lib/redis
51
- ln -s /media/redis /var/lib/redis
52
- chown -R redis:redis /var/lib/redis
53
- chown -R redis:redis /media/redis
54
- /usr/bin/redis-server
55
- # If all is well so signal success
56
- /usr/local/bin/cfn-signal -e $? -r "Ready to rock" '!Ref WaitHandle'
57
- cat /proc/uptime | cut -f1 -d'.' > /tmp/time-to-boot
58
-
59
- Type: AWS::EC2::Instance
@@ -1,206 +0,0 @@
1
- <% @app,@role,@env = name.sub('.yml','').split('-') -%>
2
- ---
3
- AWSTemplateFormatVersion: '2010-09-09'
4
- Description: <%= @app.capitalize %> Stack
5
- Outputs:
6
- ELBHostname:
7
- Description: The URL of the website
8
- Value:
9
- Fn::Join:
10
- - ''
11
- - - http://
12
- - Fn::GetAtt:
13
- - elb
14
- - DNSName
15
- Parameters:
16
- Ami:
17
- Default: <%= @ami %>
18
- Description: Ami id
19
- Type: String
20
- Application:
21
- Default: <%= @app %>
22
- Description: Application name
23
- Type: String
24
- Environment:
25
- Default: <%= @env %>
26
- Description: stag, prod etc
27
- Type: String
28
- InstanceType:
29
- AllowedValues:
30
- - t2.nano
31
- - t2.micro
32
- - t2.small
33
- - t2.medium
34
- - t2.large
35
- - t2.xlarge
36
- - t2.2xlarge
37
- - m4.large
38
- - m4.xlarge
39
- - m4.2xlarge
40
- - m4.4xlarge
41
- - m4.10xlarge
42
- - m4.16xlarge
43
- - m3.medium
44
- - m3.large
45
- - m3.xlarge
46
- - m3.2xlarge
47
- - c4.large
48
- - c4.xlarge
49
- - c4.2xlarge
50
- - c4.4xlarge
51
- - c4.8xlarge
52
- - c3.large
53
- - c3.xlarge
54
- - c3.2xlarge
55
- - c3.4xlarge
56
- - c3.8xlarge
57
- ConstraintDescription: must be a valid EC2 instance type.
58
- Default: <%= @instance_type %>
59
- Description: WebServer EC2 instance type
60
- Type: String
61
- KeyName:
62
- Default: default
63
- Description: The EC2 Key Pair to allow SSH access to the instances
64
- Type: String
65
- Role:
66
- Default: <%= @role %>
67
- Description: redis, psql, app, etc
68
- Type: String
69
- WebServerPort:
70
- Default: '<%= @port %>'
71
- Description: The TCP port for the Web Server
72
- Type: Number
73
- Resources:
74
- CPUAlarmHigh:
75
- Properties:
76
- AlarmActions:
77
- - Ref: WebServerScaleUpPolicy
78
- AlarmDescription: Scale-up if CPU > <%= @high_threshold %>% for <%= @high_mins %>
79
- ComparisonOperator: GreaterThanThreshold
80
- Dimensions:
81
- - Name: AutoScalingGroupName
82
- Value:
83
- Ref: WebServerGroup
84
- EvaluationPeriods: '<%= @high_periods %>'
85
- MetricName: CPUUtilization
86
- Namespace: AWS/EC2
87
- Period: '60'
88
- Statistic: Average
89
- Threshold: '<%= @high_threshold %>'
90
- Type: AWS::CloudWatch::Alarm
91
- CPUAlarmLow:
92
- Properties:
93
- AlarmActions:
94
- - Ref: WebServerScaleDownPolicy
95
- AlarmDescription: Scale-down if CPU < <%= @low_threshold %>% for 10 minutes
96
- ComparisonOperator: LessThanThreshold
97
- Dimensions:
98
- - Name: AutoScalingGroupName
99
- Value:
100
- Ref: WebServerGroup
101
- EvaluationPeriods: '<%= @low_periods %>'
102
- MetricName: CPUUtilization
103
- Namespace: AWS/EC2
104
- Period: '60'
105
- Statistic: Average
106
- Threshold: '<%= @low_threshold %>'
107
- Type: AWS::CloudWatch::Alarm
108
- <%= partial("host_record", domain: "mydomain.net") %>
109
- LaunchConfig:
110
- Properties:
111
- BlockDeviceMappings:
112
- - DeviceName: "/dev/sdb"
113
- VirtualName: ephemeral0
114
- ImageId: !Ref Ami
115
- InstanceType: !Ref InstanceType
116
- KeyName:
117
- Ref: KeyName
118
- SecurityGroups:
119
- - global
120
- - Fn::Join:
121
- - "-"
122
- - - Ref: Application
123
- - Ref: Environment
124
- - Ref: ServiceSecurityGroup
125
- UserData:
126
- Fn::Base64: !Sub | # No more Fn::Join needed
127
- <%= partial("user_data/bootstrap.sh", {}, indent: 10) %>
128
- Type: AWS::AutoScaling::LaunchConfiguration
129
- ServiceSecurityGroup:
130
- Properties:
131
- GroupDescription: Enable SSH access and HTTP from the load balancer only
132
- SecurityGroupIngress:
133
- - CidrIp: 0.0.0.0/0
134
- FromPort: '22'
135
- IpProtocol: tcp
136
- ToPort: '22'
137
- - FromPort:
138
- Ref: WebServerPort
139
- IpProtocol: tcp
140
- SourceSecurityGroupName:
141
- Fn::GetAtt:
142
- - elb
143
- - SourceSecurityGroup.GroupName
144
- SourceSecurityGroupOwnerId:
145
- Fn::GetAtt:
146
- - elb
147
- - SourceSecurityGroup.OwnerAlias
148
- ToPort:
149
- Ref: WebServerPort
150
- Type: AWS::EC2::SecurityGroup
151
- WebServerGroup:
152
- Properties:
153
- AvailabilityZones: !GetAZs ""
154
- HealthCheckGracePeriod: '300'
155
- HealthCheckType: ELB
156
- LaunchConfigurationName:
157
- Ref: LaunchConfig
158
- LoadBalancerNames:
159
- - Ref: elb
160
- MaxSize: '<%= @max_size %>'
161
- MinSize: '<%= @min_size %>'
162
- Type: AWS::AutoScaling::AutoScalingGroup
163
- WebServerScaleDownPolicy:
164
- Properties:
165
- AdjustmentType: ChangeInCapacity
166
- AutoScalingGroupName:
167
- Ref: WebServerGroup
168
- Cooldown: '120'
169
- ScalingAdjustment: "<%= @down_adjustment %>"
170
- Type: AWS::AutoScaling::ScalingPolicy
171
- WebServerScaleUpPolicy:
172
- Properties:
173
- AdjustmentType: ChangeInCapacity
174
- AutoScalingGroupName:
175
- Ref: WebServerGroup
176
- Cooldown: '120'
177
- ScalingAdjustment: '<%= @up_adjustment %>'
178
- Type: AWS::AutoScaling::ScalingPolicy
179
- elb:
180
- Properties:
181
- AvailabilityZones: !GetAZs ""
182
- HealthCheck:
183
- HealthyThreshold: '3'
184
- Interval: '6'
185
- Target:
186
- Fn::Join:
187
- - ''
188
- - - 'HTTP:'
189
- - Ref: WebServerPort
190
- - "/up/elb"
191
- Timeout: '5'
192
- UnhealthyThreshold: '5'
193
- Listeners:
194
- - InstancePort:
195
- Ref: WebServerPort
196
- LoadBalancerPort: '80'
197
- Protocol: HTTP
198
- <% if @ssl_cert %>
199
- - InstancePort:
200
- Ref: WebServerPort
201
- LoadBalancerPort: '443'
202
- PolicyNames: []
203
- Protocol: HTTPS
204
- SSLCertificateId: '<%= @ssl_cert %>'
205
- <% end %>
206
- Type: AWS::ElasticLoadBalancing::LoadBalancer