ecs_deploy 0.2.0 → 1.0.1
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.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.travis.yml +5 -0
- data/CHANGELOG.md +132 -0
- data/README.md +291 -28
- data/Rakefile +4 -0
- data/ecs_deploy.gemspec +9 -3
- data/lib/ecs_deploy.rb +2 -1
- data/lib/ecs_deploy/auto_scaler.rb +107 -358
- data/lib/ecs_deploy/auto_scaler/auto_scaling_group_config.rb +209 -0
- data/lib/ecs_deploy/auto_scaler/cluster_resource_manager.rb +149 -0
- data/lib/ecs_deploy/auto_scaler/config_base.rb +16 -0
- data/lib/ecs_deploy/auto_scaler/instance_drainer.rb +134 -0
- data/lib/ecs_deploy/auto_scaler/service_config.rb +223 -0
- data/lib/ecs_deploy/auto_scaler/spot_fleet_request_config.rb +102 -0
- data/lib/ecs_deploy/auto_scaler/trigger_config.rb +42 -0
- data/lib/ecs_deploy/capistrano.rb +108 -11
- data/lib/ecs_deploy/configuration.rb +6 -2
- data/lib/ecs_deploy/instance_fluctuation_manager.rb +195 -0
- data/lib/ecs_deploy/scheduled_task.rb +101 -0
- data/lib/ecs_deploy/service.rb +99 -20
- data/lib/ecs_deploy/task_definition.rb +37 -47
- data/lib/ecs_deploy/version.rb +1 -1
- metadata +114 -14
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 6b008d513950d8b8e5abab3400d9c123dfe22fa7ab0bce2db9fc13d398359ccf
|
4
|
+
data.tar.gz: 8b3096d4cbe25b0febf667b560a0202e915ab9eee2a511b50dc50d61938805b3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1822d8b4ef6bf0392565918ee6bfe1df2d04e0ad376cb895497fbdd4029523f1db00452dd11f00c3c5acdedafa17039bfd49aebd8b16b4261cffb03a605a5fe9
|
7
|
+
data.tar.gz: 7a395b568354d77868bcd7b9c3d469550f8905fde2640bdace1e014d0639d5ab0a7f6f7b0f94fa6c2928c770a05837783c5994ce702c7fc31c744bc58ee46648
|
data/.gitignore
CHANGED
data/.travis.yml
ADDED
data/CHANGELOG.md
ADDED
@@ -0,0 +1,132 @@
|
|
1
|
+
# v1.0
|
2
|
+
|
3
|
+
## Release v1.0.1 - 2021/05/19
|
4
|
+
|
5
|
+
### Enhancement
|
6
|
+
|
7
|
+
* retry register_task_definition by AWS SDK feature
|
8
|
+
https://github.com/reproio/ecs_deploy/pull/67
|
9
|
+
* Support Ruby 3.0
|
10
|
+
https://github.com/reproio/ecs_deploy/pull/66
|
11
|
+
* Wait until stop old tasks
|
12
|
+
https://github.com/reproio/ecs_deploy/pull/65
|
13
|
+
* Add prioritized_over_upscale_triggers option to triggers
|
14
|
+
https://github.com/reproio/ecs_deploy/pull/62
|
15
|
+
* Display only unstable services in EcsDeploy::Service#wait_all_running
|
16
|
+
https://github.com/reproio/ecs_deploy/pull/61
|
17
|
+
|
18
|
+
## Release v1.0.0 - 2019/12/24
|
19
|
+
|
20
|
+
### New feature
|
21
|
+
|
22
|
+
* Add tasks to deploy the application faster
|
23
|
+
https://github.com/reproio/ecs_deploy/pull/57
|
24
|
+
|
25
|
+
### Enhancement
|
26
|
+
|
27
|
+
* Add parameters `ecs_wait_until_services_stable_max_attempts` and `ecs_wait_until_services_stable_delay`
|
28
|
+
https://github.com/reproio/ecs_deploy/pull/30
|
29
|
+
* Detect region automatically according to AWS SDK
|
30
|
+
https://github.com/reproio/ecs_deploy/pull/31
|
31
|
+
* Support new features of ECS to support Fargate
|
32
|
+
https://github.com/reproio/ecs_deploy/pull/32
|
33
|
+
* Ignore running tasks which don't belong to the ECS services on deregistering container instances
|
34
|
+
https://github.com/reproio/ecs_deploy/pull/33
|
35
|
+
* Drop AWS SDK 2 support
|
36
|
+
https://github.com/reproio/ecs_deploy/pull/34
|
37
|
+
* Support scheduling_strategy option
|
38
|
+
https://github.com/reproio/ecs_deploy/pull/35
|
39
|
+
* Support execution_role_arn on task_definition
|
40
|
+
https://github.com/reproio/ecs_deploy/pull/36
|
41
|
+
* Support spot fleet requests and container instance draining
|
42
|
+
https://github.com/reproio/ecs_deploy/pull/40
|
43
|
+
* Add network_configuration paramters to ScheduledTask
|
44
|
+
https://github.com/reproio/ecs_deploy/pull/46
|
45
|
+
* Support tagging ECS resources
|
46
|
+
https://github.com/reproio/ecs_deploy/pull/48
|
47
|
+
https://github.com/reproio/ecs_deploy/pull/49
|
48
|
+
* Wait for stopping tasks until tasks stop
|
49
|
+
https://github.com/reproio/ecs_deploy/pull/50
|
50
|
+
* Improve performance when start tasks
|
51
|
+
https://github.com/reproio/ecs_deploy/pull/53
|
52
|
+
* Improve stability of auto scaling groups managed by ecs_auto_scaler
|
53
|
+
https://github.com/reproio/ecs_deploy/pull/55
|
54
|
+
|
55
|
+
### Bug fixes
|
56
|
+
|
57
|
+
* Fix infinite loop that occurs when there are more than 100 container instances
|
58
|
+
https://github.com/reproio/ecs_deploy/pull/38
|
59
|
+
* Fix errors that occur on decreasing more than 20 container instances
|
60
|
+
https://github.com/reproio/ecs_deploy/pull/39
|
61
|
+
|
62
|
+
# Ancient releases
|
63
|
+
|
64
|
+
## Release v0.3.2 - 2017/23/10
|
65
|
+
|
66
|
+
### Enhancement
|
67
|
+
|
68
|
+
* Remove execution feature
|
69
|
+
https://github.com/reproio/ecs_deploy/pull/24
|
70
|
+
* Support container overrides in scheduled tasks
|
71
|
+
https://github.com/reproio/ecs_deploy/pull/26
|
72
|
+
|
73
|
+
### Bug fixes
|
74
|
+
|
75
|
+
* Fix deployment errors that occur when `ecs_scheduled_tasks` is not set
|
76
|
+
https://github.com/reproio/ecs_deploy/pull/27
|
77
|
+
|
78
|
+
## Release v0.3.1 - 2017/04/08
|
79
|
+
|
80
|
+
### Bug fixes
|
81
|
+
|
82
|
+
* Fix block parameter name
|
83
|
+
|
84
|
+
## Release v0.3.0 - 2017/03/08
|
85
|
+
|
86
|
+
### New feature
|
87
|
+
|
88
|
+
* Support ScheduledTask deployment
|
89
|
+
https://github.com/reproio/ecs_deploy/pull/22
|
90
|
+
|
91
|
+
### Enhancement
|
92
|
+
|
93
|
+
* Support network_mode and placement_constraints
|
94
|
+
* Introduce `ecs_registered_tasks` capistrano variable
|
95
|
+
https://github.com/reproio/ecs_deploy/pull/23
|
96
|
+
|
97
|
+
### Bug fixes
|
98
|
+
|
99
|
+
* Filter inactive services
|
100
|
+
https://github.com/reproio/ecs_deploy/pull/19
|
101
|
+
* Wait 10 services at once
|
102
|
+
https://github.com/reproio/ecs_deploy/pull/20
|
103
|
+
https://github.com/reproio/ecs_deploy/pull/21
|
104
|
+
|
105
|
+
## Release v0.2.0 - 2016/31/10
|
106
|
+
|
107
|
+
### Enhancement
|
108
|
+
|
109
|
+
* Support task role arn
|
110
|
+
https://github.com/reproio/ecs_deploy/pull/13
|
111
|
+
* Make the scale-in process safe
|
112
|
+
https://github.com/reproio/ecs_deploy/pull/14
|
113
|
+
* Support ALB
|
114
|
+
https://github.com/reproio/ecs_deploy/pull/15
|
115
|
+
|
116
|
+
## Release v0.1.2 - 2016/28/07
|
117
|
+
|
118
|
+
### Bug fixes
|
119
|
+
|
120
|
+
* Fix rollback bug
|
121
|
+
https://github.com/reproio/ecs_deploy/pull/11
|
122
|
+
|
123
|
+
## Release v0.1.1 - 2016/03/07
|
124
|
+
|
125
|
+
### Bug fixes
|
126
|
+
|
127
|
+
* Add missing desired_count for backend services
|
128
|
+
https://github.com/reproio/ecs_deploy/pull/9
|
129
|
+
|
130
|
+
## Release v0.1.0 - 2016/27/06
|
131
|
+
|
132
|
+
Initial release.
|
data/README.md
CHANGED
@@ -28,11 +28,11 @@ require 'ecs_deploy/capistrano'
|
|
28
28
|
|
29
29
|
# deploy.rb
|
30
30
|
set :ecs_default_cluster, "ecs-cluster-name"
|
31
|
-
set :ecs_access_key_id, "dummy" # optional, if nil, use environment variable
|
32
|
-
set :ecs_secret_access_key, "dummy" # optional, if nil, use environment variable
|
33
31
|
set :ecs_region, %w(ap-northeast-1) # optional, if nil, use environment variable
|
34
32
|
set :ecs_service_role, "customEcsServiceRole" # default: ecsServiceRole
|
35
33
|
set :ecs_deploy_wait_timeout, 600 # default: 300
|
34
|
+
set :ecs_wait_until_services_stable_max_attempts, 40 # optional
|
35
|
+
set :ecs_wait_until_services_stable_delay, 15 # optional
|
36
36
|
|
37
37
|
set :ecs_tasks, [
|
38
38
|
{
|
@@ -87,12 +87,27 @@ set :ecs_tasks, [
|
|
87
87
|
}
|
88
88
|
],
|
89
89
|
volumes: [{name: "sockets_path", host: {}}],
|
90
|
-
executions: [ # execution task on deploy timing
|
91
|
-
{container_overrides: [{name: "myapp", command: ["db_migrate"]}]},
|
92
|
-
]
|
93
90
|
},
|
94
91
|
]
|
95
92
|
|
93
|
+
set :ecs_scheduled_tasks, [
|
94
|
+
{
|
95
|
+
cluster: "default", # Unless this key, use fetch(:ecs_default_cluster)
|
96
|
+
rule_name: "schedule_name",
|
97
|
+
schedule_expression: "cron(0 12 * * ? *)",
|
98
|
+
description: "schedule_description", # Optional
|
99
|
+
target_id: "task_name", # Unless this key, use task_definition_name
|
100
|
+
task_definition_name: "myapp-#{fetch(:rails_env)}",
|
101
|
+
task_count: 2, # Default 1
|
102
|
+
revision: 12, # Optional
|
103
|
+
role_arn: "TaskRoleArn", # Optional
|
104
|
+
container_overrides: [ # Optional
|
105
|
+
name: "myapp-main",
|
106
|
+
command: ["ls"],
|
107
|
+
]
|
108
|
+
}
|
109
|
+
]
|
110
|
+
|
96
111
|
set :ecs_services, [
|
97
112
|
{
|
98
113
|
name: "myapp-#{fetch(:rails_env)}",
|
@@ -116,6 +131,7 @@ set :ecs_services, [
|
|
116
131
|
|
117
132
|
```sh
|
118
133
|
cap <stage> ecs:register_task_definition # register ecs_tasks as TaskDefinition
|
134
|
+
cap <stage> ecs:deploy_scheduled_task # register ecs_scheduled_tasks to CloudWatchEvent
|
119
135
|
cap <stage> ecs:deploy # create or update Service by ecs_services info
|
120
136
|
|
121
137
|
cap <stage> ecs:rollback # deregister current task definition and update Service by previous revision of current task definition
|
@@ -173,7 +189,16 @@ And rollback
|
|
173
189
|
|
174
190
|
## Autoscaler
|
175
191
|
|
176
|
-
|
192
|
+
The autoscaler of `ecs_deploy` supports auto scaling of ECS services and clusters.
|
193
|
+
|
194
|
+
### Prerequisits
|
195
|
+
|
196
|
+
* You use a ECS cluster whose instances belong to either an auto scaling group or a spot fleet request
|
197
|
+
* You have CloudWatch alarms and you want to scale services when their state changes
|
198
|
+
|
199
|
+
### How to use autoscaler
|
200
|
+
|
201
|
+
First, write a configuration file (YAML format) like below:
|
177
202
|
|
178
203
|
```yaml
|
179
204
|
# ポーリング時にupscale_triggersに指定した状態のalarmがあればstep分serviceとinstanceを増やす (max_task_countまで)
|
@@ -186,37 +211,275 @@ polling_interval: 60
|
|
186
211
|
auto_scaling_groups:
|
187
212
|
- name: ecs-cluster-nodes
|
188
213
|
region: ap-northeast-1
|
189
|
-
buffer: 1 # タスク数に対する余剰のインスタンス数
|
190
|
-
|
191
|
-
services:
|
192
|
-
- name: repro-api-production
|
193
214
|
cluster: ecs-cluster
|
215
|
+
# autoscaler will set the capacity to (buffer + desired_tasks * required_capacity).
|
216
|
+
# Adjust this value if it takes much time to prepare ECS instances and launch new tasks.
|
217
|
+
buffer: 1
|
218
|
+
services:
|
219
|
+
- name: repro-api-production
|
220
|
+
step: 1
|
221
|
+
idle_time: 240
|
222
|
+
max_task_count: [10, 25]
|
223
|
+
scheduled_min_task_count:
|
224
|
+
- {from: "1:45", to: "4:30", count: 8}
|
225
|
+
cooldown_time_for_reach_max: 600
|
226
|
+
min_task_count: 0
|
227
|
+
# Required capacity per task (default: 1)
|
228
|
+
# You should specify "binpack" as task placement strategy if the value is less than 1 and you use an auto scaling group.
|
229
|
+
required_capacity: 0.5
|
230
|
+
upscale_triggers:
|
231
|
+
- alarm_name: "ECS [repro-api-production] CPUUtilization"
|
232
|
+
state: ALARM
|
233
|
+
- alarm_name: "ELB repro-api-a HTTPCode_Backend_5XX"
|
234
|
+
state: ALARM
|
235
|
+
step: 2
|
236
|
+
downscale_triggers:
|
237
|
+
- alarm_name: "ECS [repro-api-production] CPUUtilization (low)"
|
238
|
+
state: OK
|
239
|
+
|
240
|
+
spot_fleet_requests:
|
241
|
+
- id: sfr-354de735-2c17-4565-88c9-10ada5b957e5
|
194
242
|
region: ap-northeast-1
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
243
|
+
cluster: ecs-cluster-for-worker
|
244
|
+
buffer: 1
|
245
|
+
services:
|
246
|
+
- name: repro-worker-production
|
247
|
+
step: 1
|
248
|
+
idle_time: 240
|
249
|
+
cooldown_time_for_reach_max: 600
|
250
|
+
min_task_count: 0
|
251
|
+
# Required capacity per task (default: 1)
|
252
|
+
# The capacity assumes that WeightedCapacity is equal to the number of vCPUs.
|
253
|
+
required_capacity: 2
|
254
|
+
upscale_triggers:
|
255
|
+
- alarm_name: "ECS [repro-worker-production] CPUUtilization"
|
256
|
+
state: ALARM
|
257
|
+
downscale_triggers:
|
258
|
+
- alarm_name: "ECS [repro-worker-production] CPUUtilization (low)"
|
259
|
+
state: OK
|
260
|
+
- alarm_name: "Aurora DMLLatency is high"
|
261
|
+
state: ALARM
|
262
|
+
prioritized_over_upscale_triggers: true
|
263
|
+
|
264
|
+
# If you specify `spot_instance_intrp_warns_queue_urls` as SQS queue for spot instance interruption warnings,
|
265
|
+
# autoscaler will polls them and set the state of instances to be intrrupted to "DRAINING".
|
266
|
+
# autoscaler will also waits for the capacity of active instances in the cluster being decreased
|
267
|
+
# when the capacity of spot fleet request is decreased,
|
268
|
+
# so you should specify URLs or set the state of the instances to "DRAINING" manually.
|
269
|
+
spot_instance_intrp_warns_queue_urls:
|
270
|
+
- https://sqs.ap-northeast-1.amazonaws.com/<account-id>/spot-instance-intrp-warns
|
212
271
|
```
|
213
272
|
|
273
|
+
Then, execute the following command:
|
274
|
+
|
214
275
|
```sh
|
215
276
|
ecs_auto_scaler <config yaml>
|
216
277
|
```
|
217
278
|
|
218
279
|
I recommends deploy `ecs_auto_scaler` on ECS too.
|
219
280
|
|
281
|
+
### Signals
|
282
|
+
|
283
|
+
Signal | Description
|
284
|
+
-----------|------------------------------------------------------------
|
285
|
+
TERM, INT | Shutdown gracefully
|
286
|
+
CONT | Resume auto scaling
|
287
|
+
TSTP | Pause auto scaling (Run only container instance draining)
|
288
|
+
|
289
|
+
### IAM policy for autoscaler
|
290
|
+
|
291
|
+
The following permissions are required for the preceding configuration of "repro-api-production" service:
|
292
|
+
|
293
|
+
```
|
294
|
+
{
|
295
|
+
"Version": "2012-10-17",
|
296
|
+
"Statement": [
|
297
|
+
{
|
298
|
+
"Effect": "Allow",
|
299
|
+
"Action": [
|
300
|
+
"autoscaling:DescribeAutoScalingGroups",
|
301
|
+
"cloudwatch:DescribeAlarms",
|
302
|
+
"ec2:DescribeInstances",
|
303
|
+
"ec2:TerminateInstances",
|
304
|
+
"ecs:ListTasks"
|
305
|
+
],
|
306
|
+
"Resource": "*"
|
307
|
+
},
|
308
|
+
{
|
309
|
+
"Effect": "Allow",
|
310
|
+
"Action": [
|
311
|
+
"ecs:DescribeServices",
|
312
|
+
"ecs:UpdateService"
|
313
|
+
],
|
314
|
+
"Resource": [
|
315
|
+
"arn:aws:ecs:ap-northeast-1:<account-id>:service/ecs-cluster/repro-api-production"
|
316
|
+
]
|
317
|
+
},
|
318
|
+
{
|
319
|
+
"Effect": "Allow",
|
320
|
+
"Action": [
|
321
|
+
"ecs:DescribeTasks"
|
322
|
+
],
|
323
|
+
"Resource": [
|
324
|
+
"arn:aws:ecs:ap-northeast-1:<account-id>:task/ecs-cluster/*"
|
325
|
+
]
|
326
|
+
},
|
327
|
+
{
|
328
|
+
"Effect": "Allow",
|
329
|
+
"Action": [
|
330
|
+
"autoscaling:DetachInstances",
|
331
|
+
"autoscaling:UpdateAutoScalingGroup"
|
332
|
+
],
|
333
|
+
"Resource": [
|
334
|
+
"arn:aws:autoscaling:ap-northeast-1:<account-id>:autoScalingGroup:<group-id>:autoScalingGroupName/ecs-cluster-nodes"
|
335
|
+
]
|
336
|
+
},
|
337
|
+
{
|
338
|
+
"Effect": "Allow",
|
339
|
+
"Action": [
|
340
|
+
"ecs:DescribeContainerInstances"
|
341
|
+
],
|
342
|
+
"Resource": [
|
343
|
+
"arn:aws:ecs:ap-northeast-1:<account-id>:container-instance/ecs-cluster/*"
|
344
|
+
]
|
345
|
+
},
|
346
|
+
{
|
347
|
+
"Effect": "Allow",
|
348
|
+
"Action": [
|
349
|
+
"ecs:DeregisterContainerInstance",
|
350
|
+
"ecs:ListContainerInstances"
|
351
|
+
],
|
352
|
+
"Resource": [
|
353
|
+
"arn:aws:ecs:ap-northeast-1:<account-id>:cluster/ecs-cluster"
|
354
|
+
]
|
355
|
+
}
|
356
|
+
]
|
357
|
+
}
|
358
|
+
```
|
359
|
+
|
360
|
+
If you use spot instances, additional permissions are required like below:
|
361
|
+
|
362
|
+
```
|
363
|
+
{
|
364
|
+
"Version": "2012-10-17",
|
365
|
+
"Statement": [
|
366
|
+
{
|
367
|
+
"Effect": "Allow",
|
368
|
+
"Action": "ecs:UpdateContainerInstancesState",
|
369
|
+
"Resource": "arn:aws:ecs:ap-northeast-1:<account-id>:container-instance/ecs-cluster/*"
|
370
|
+
},
|
371
|
+
{
|
372
|
+
"Effect": "Allow",
|
373
|
+
"Action": [
|
374
|
+
"sqs:DeleteMessage",
|
375
|
+
"sqs:DeleteMessageBatch",
|
376
|
+
"sqs:ReceiveMessage"
|
377
|
+
],
|
378
|
+
"Resource": "arn:aws:sqs:ap-northeast-1:<account-id>:spot-instance-intrp-warns"
|
379
|
+
}
|
380
|
+
]
|
381
|
+
}
|
382
|
+
```
|
383
|
+
|
384
|
+
The following permissions are required for the preceding configuration of "repro-worker-production" service:
|
385
|
+
|
386
|
+
```
|
387
|
+
{
|
388
|
+
"Version": "2012-10-17",
|
389
|
+
"Statement": [
|
390
|
+
{
|
391
|
+
"Effect": "Allow",
|
392
|
+
"Action": [
|
393
|
+
"sqs:DeleteMessage",
|
394
|
+
"sqs:DeleteMessageBatch",
|
395
|
+
"sqs:ReceiveMessage"
|
396
|
+
],
|
397
|
+
"Resource": "arn:aws:sqs:ap-northeast-1:<account-id>:spot-instance-intrp-warns"
|
398
|
+
},
|
399
|
+
{
|
400
|
+
"Effect": "Allow",
|
401
|
+
"Action": [
|
402
|
+
"cloudwatch:DescribeAlarms",
|
403
|
+
"ec2:DescribeInstances",
|
404
|
+
"ec2:DescribeSpotFleetInstances",
|
405
|
+
"ec2:DescribeSpotFleetRequests",
|
406
|
+
"ec2:ModifySpotFleetRequest",
|
407
|
+
"ec2:TerminateInstances",
|
408
|
+
"ecs:ListTasks"
|
409
|
+
],
|
410
|
+
"Resource": "*"
|
411
|
+
},
|
412
|
+
{
|
413
|
+
"Effect": "Allow",
|
414
|
+
"Action": [
|
415
|
+
"ecs:DescribeServices",
|
416
|
+
"ecs:UpdateService"
|
417
|
+
],
|
418
|
+
"Resource": [
|
419
|
+
"arn:aws:ecs:ap-northeast-1:<account-id>:service/ecs-cluster-for-worker/repro-worker-production"
|
420
|
+
]
|
421
|
+
},
|
422
|
+
{
|
423
|
+
"Effect": "Allow",
|
424
|
+
"Action": [
|
425
|
+
"ecs:DescribeTasks"
|
426
|
+
],
|
427
|
+
"Resource": [
|
428
|
+
"arn:aws:ecs:ap-northeast-1:<account-id>:task/ecs-cluster-for-worker/*"
|
429
|
+
]
|
430
|
+
},
|
431
|
+
{
|
432
|
+
"Effect": "Allow",
|
433
|
+
"Action": [
|
434
|
+
"ecs:DescribeContainerInstances",
|
435
|
+
"ecs:UpdateContainerInstancesState"
|
436
|
+
],
|
437
|
+
"Resource": [
|
438
|
+
"arn:aws:ecs:ap-northeast-1:<account-id>:container-instance/ecs-cluster-for-worker/*"
|
439
|
+
]
|
440
|
+
},
|
441
|
+
{
|
442
|
+
"Effect": "Allow",
|
443
|
+
"Action": [
|
444
|
+
"ecs:ListContainerInstances"
|
445
|
+
],
|
446
|
+
"Resource": [
|
447
|
+
"arn:aws:ecs:ap-northeast-1:<account-id>:cluster/ecs-cluster-for-worker"
|
448
|
+
]
|
449
|
+
}
|
450
|
+
]
|
451
|
+
}
|
452
|
+
```
|
453
|
+
|
454
|
+
### How to deploy faster with Auto Scaling Group
|
455
|
+
|
456
|
+
Add following configuration to your deploy.rb and hooks if you need.
|
457
|
+
|
458
|
+
```ruby
|
459
|
+
# deploy.rb
|
460
|
+
set :ecs_instance_fluctuation_manager_configs, [
|
461
|
+
{
|
462
|
+
region: "ap-northeast-1",
|
463
|
+
cluster: "CLUSTER_NAME",
|
464
|
+
auto_scaling_group_name: "AUTO_SCALING_GROUP_NAME",
|
465
|
+
desired_capacity: 20, # original capacity of auto scaling group
|
466
|
+
}
|
467
|
+
]
|
468
|
+
```
|
469
|
+
|
470
|
+
This configuration enables tasks `ecs:increase_instances_to_max_size` and `ecs:terminate_redundant_instances`.
|
471
|
+
If this configuration is not set, the above tasks do nothing.
|
472
|
+
The task `ecs:increase_instances_to_max_size` will increase ECS instances.
|
473
|
+
The task `ecs:terminate_redundant_instances` will decrease ECS instances considering AZ balance.
|
474
|
+
|
475
|
+
Hook configuration example:
|
476
|
+
|
477
|
+
```ruby
|
478
|
+
after "deploy:updating", "ecs:increase_instances_to_max_size"
|
479
|
+
after "deploy:finished", "ecs:terminate_redundant_instances"
|
480
|
+
after "deploy:failed", "ecs:terminate_redundant_instances"
|
481
|
+
```
|
482
|
+
|
220
483
|
## Development
|
221
484
|
|
222
485
|
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -225,4 +488,4 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
225
488
|
|
226
489
|
## Contributing
|
227
490
|
|
228
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
491
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/reproio/ecs_deploy.
|