ecs_deployer 2.2.2 → 2.3.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.
- checksums.yaml +5 -5
- data/.circleci/config.yml +30 -0
- data/.dockerignore +1 -0
- data/.env.default +9 -0
- data/.gitignore +5 -5
- data/.rubocop.yml +1 -1
- data/Dockerfile +7 -0
- data/README.md +19 -17
- data/docker-compose.yml +10 -0
- data/ecs_deployer.gemspec +9 -11
- data/example/register_task.rb +1 -7
- data/example/update_scheduled_task.rb +5 -9
- data/example/update_service.rb +3 -8
- data/lib/ecs_deployer/client.rb +1 -1
- data/lib/ecs_deployer/scheduled_task/target.rb +1 -1
- data/lib/ecs_deployer/service/client.rb +2 -1
- data/lib/ecs_deployer/task/client.rb +3 -2
- data/lib/ecs_deployer/util/cipher.rb +1 -1
- data/lib/ecs_deployer/version.rb +1 -1
- metadata +24 -48
- data/circle.yml +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: bd00fa1ac3cc92c3a9a53e46415a3ce7d14786b9
|
4
|
+
data.tar.gz: 5829d3e3415defebd527a82e4a1e27dd375b6a57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a0421a84b469e591fe1cb8e5041b5f1b834622a2ac46338cf3fef7b1399561d043e13800ac8095c943b4c4b9128e76419a1f3ee78bad7a237c3511688569395a
|
7
|
+
data.tar.gz: 352529a94b8724e550d5cb6e797bf88f33e8edd90ee609e85ed3248e058f04230dcd44e8e14fe10c58a08e473d5741ed957a0c2c4cd50963e98c39ecb5724219
|
@@ -0,0 +1,30 @@
|
|
1
|
+
version: 2
|
2
|
+
jobs:
|
3
|
+
build:
|
4
|
+
docker:
|
5
|
+
- image: circleci/ruby:2.6.2
|
6
|
+
environment:
|
7
|
+
CC_TEST_REPORTER_ID: 1cb1989f71aaacc808297279555f70439ed7dcfe5fcf90248b8462c494d2cb1e
|
8
|
+
working_directory: ~/ecs_deployer
|
9
|
+
steps:
|
10
|
+
- checkout
|
11
|
+
- restore_cache:
|
12
|
+
key: bundle-{{ checksum "Gemfile.lock" }}
|
13
|
+
- run:
|
14
|
+
name: bundle install
|
15
|
+
command: bundle install --jobs=4
|
16
|
+
- save_cache:
|
17
|
+
key: bundle-{{ checksum "Gemfile.lock" }}
|
18
|
+
paths:
|
19
|
+
- vendor/bundle
|
20
|
+
- run:
|
21
|
+
name: Setup Code Climate
|
22
|
+
command: |
|
23
|
+
curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
|
24
|
+
chmod +x ./cc-test-reporter
|
25
|
+
- run:
|
26
|
+
name: rspec test
|
27
|
+
command: |
|
28
|
+
./cc-test-reporter before-build
|
29
|
+
bundle exec rspec
|
30
|
+
./cc-test-reporter after-build --coverage-input-type simplecov --exit-code $?
|
data/.dockerignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
.git
|
data/.env.default
ADDED
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/Dockerfile
ADDED
data/README.md
CHANGED
@@ -73,40 +73,30 @@ Values are decrypted when task is created.
|
|
73
73
|
|
74
74
|
## Usage
|
75
75
|
|
76
|
-
###
|
76
|
+
### Register new task
|
77
77
|
|
78
|
-
Refer to [sample code](https://github.com/naomichi-y/ecs_deployer/tree/master/example).
|
79
|
-
|
80
|
-
```ruby
|
81
|
-
deployer.register_task('development.yml', tag: 'latest')
|
82
78
|
```
|
83
|
-
|
84
|
-
### CLI
|
85
|
-
|
86
|
-
#### Register new task
|
87
|
-
|
88
|
-
```bash
|
89
79
|
$ bundle exec ecs_deployer task-register --path=spec/fixtures/task.yml --replace-variables=tag:latest
|
90
80
|
Registered task: arn:aws:ecs:ap-northeast-1:xxx:task-definition/nginx:latest
|
91
81
|
```
|
92
82
|
|
93
|
-
|
83
|
+
### Encrypt environment value
|
94
84
|
|
95
|
-
```
|
85
|
+
```
|
96
86
|
$ bundle exec ecs_deployer encrypt --master-key=master --value='test'
|
97
87
|
Encrypted value: ${xxx}
|
98
88
|
```
|
99
89
|
|
100
|
-
|
90
|
+
### Decrypt environment value
|
101
91
|
|
102
|
-
```
|
92
|
+
```
|
103
93
|
$ bundle exec ecs_deployer decrypt --value='${xxx}'
|
104
94
|
Decrypted value: xxx
|
105
95
|
```
|
106
96
|
|
107
|
-
|
97
|
+
### Update service
|
108
98
|
|
109
|
-
```
|
99
|
+
```
|
110
100
|
$ bundle exec ecs_deployer update-service --cluster=xxx --service=xxx --wait --wait-timeout=600
|
111
101
|
Start deploying...
|
112
102
|
Deploying... [0/1] (20 seconds elapsed)
|
@@ -129,6 +119,18 @@ New task definition: arn:aws:ecs:ap-northeast-1:xxxx:task-definition/sandbox-dev
|
|
129
119
|
Update service: arn:aws:ecs:ap-northeast-1:xxxx:service/development
|
130
120
|
```
|
131
121
|
|
122
|
+
## SDK
|
123
|
+
|
124
|
+
### Example
|
125
|
+
```
|
126
|
+
$ cp .env.default .env
|
127
|
+
$ docker-compose-build
|
128
|
+
|
129
|
+
$ docker-compose run --rm ruby bundle exec ruby example/register_task.rb
|
130
|
+
$ docker-compose run --rm ruby bundle exec ruby example/update_service.rb
|
131
|
+
$ docker-compose run --rm ruby bundle exec ruby example/update_scheduled_task.rb
|
132
|
+
```
|
133
|
+
|
132
134
|
## License
|
133
135
|
|
134
136
|
MIT
|
data/docker-compose.yml
ADDED
data/ecs_deployer.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
lib = File.expand_path('
|
1
|
+
lib = File.expand_path('lib', __dir__)
|
2
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
3
|
require 'ecs_deployer/version'
|
4
4
|
|
@@ -29,15 +29,13 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
30
30
|
spec.require_paths = ['lib']
|
31
31
|
|
32
|
-
spec.add_dependency 'aws-sdk', '>=
|
33
|
-
spec.add_dependency '
|
34
|
-
spec.add_dependency '
|
35
|
-
spec.
|
36
|
-
spec.add_development_dependency 'bundler', '~> 1.13'
|
32
|
+
spec.add_dependency 'aws-sdk', '>= 3.0.1'
|
33
|
+
spec.add_dependency 'oj', '~> 3.8.1'
|
34
|
+
spec.add_dependency 'thor', '~> 0.20.3'
|
35
|
+
spec.add_development_dependency 'bundler', '~> 1.17.2'
|
37
36
|
spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0'
|
38
|
-
spec.add_development_dependency '
|
39
|
-
spec.add_development_dependency '
|
40
|
-
spec.add_development_dependency '
|
41
|
-
spec.add_development_dependency '
|
42
|
-
spec.add_development_dependency 'simplecov', '~> 0.14'
|
37
|
+
spec.add_development_dependency 'rake', '~> 12.3.3'
|
38
|
+
spec.add_development_dependency 'rspec', '~> 3.8.0'
|
39
|
+
spec.add_development_dependency 'rubocop', '~> 0.74.0'
|
40
|
+
spec.add_development_dependency 'simplecov', '~> 0.17.0'
|
43
41
|
end
|
data/example/register_task.rb
CHANGED
@@ -1,11 +1,5 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
require 'ecs_deployer'
|
3
|
-
require 'config'
|
4
|
-
|
5
|
-
Config.load_and_set_settings('config.yml', 'config.local.yml')
|
6
|
-
|
7
|
-
task_path = File.expand_path(Settings.task_path)
|
8
|
-
deployer = EcsDeployer::Client.new(Settings.cluster)
|
9
|
-
task_definition = deployer.task.register(task_path, tag: 'latest')
|
10
3
|
|
4
|
+
task_definition = EcsDeployer::Task::Client.new.register(File.expand_path('example/conf/task.yml'), tag: 'latest')
|
11
5
|
puts task_definition.task_definition_arn
|
@@ -1,20 +1,16 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
require 'ecs_deployer'
|
3
|
-
require 'config'
|
4
3
|
|
5
|
-
|
6
|
-
task_path = File.expand_path(Settings.scheduled_task_path)
|
4
|
+
task_definition = EcsDeployer::Task::Client.new.register(File.expand_path('example/conf/task.yml'), tag: 'latest')
|
7
5
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
scheduled_task = deployer.scheduled_task
|
12
|
-
target_builder = scheduled_task.target_builder(Settings.scheduled_task_target_id)
|
6
|
+
scheduled_task = EcsDeployer::Client.new(ENV['ECS_CLUSTER']).scheduled_task
|
7
|
+
target_builder = scheduled_task.target_builder(ENV['ECS_SCHEDULED_TASK_TARGET_ID'])
|
13
8
|
target_builder.task_definition_arn = task_definition.task_definition_arn
|
14
9
|
target_builder.override_container('rails', ['curl', 'http://153.122.13.159/'])
|
10
|
+
target_builder.cloudwatch_event_role_arn = ENV['CLOUDWATCH_EVENT_ARN']
|
15
11
|
|
16
12
|
task_definition = scheduled_task.update(
|
17
|
-
|
13
|
+
ENV['ECS_SCHEDULED_TASK_RULE_ID'],
|
18
14
|
'cron(* * * * ? *)',
|
19
15
|
[target_builder.to_hash],
|
20
16
|
description: 'Test task'
|
data/example/update_service.rb
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
require 'bundler/setup'
|
2
2
|
require 'ecs_deployer'
|
3
|
-
require 'config'
|
4
3
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
deployer = EcsDeployer::Client.new(Settings.cluster)
|
10
|
-
task_definition = deployer.task.register(task_path, tag: 'latest')
|
11
|
-
service = deployer.service.update(Settings.service, task_definition)
|
4
|
+
client = EcsDeployer::Client.new(ENV['ECS_CLUSTER'])
|
5
|
+
task_definition = EcsDeployer::Task::Client.new.register(File.expand_path('example/conf/task.yml'), tag: 'latest')
|
6
|
+
service = client.service.update(ENV['ECS_SERVICE'], task_definition)
|
12
7
|
|
13
8
|
puts service.service_arn
|
data/lib/ecs_deployer/client.rb
CHANGED
@@ -8,7 +8,7 @@ module EcsDeployer
|
|
8
8
|
# @return [EcsDeployer::Client]
|
9
9
|
def initialize(cluster, logger = nil, aws_options = {})
|
10
10
|
@cluster = cluster
|
11
|
-
@logger = logger.nil? ? Logger.new(
|
11
|
+
@logger = logger.nil? ? Logger.new(STDOUT) : logger
|
12
12
|
@aws_options = aws_options
|
13
13
|
end
|
14
14
|
|
@@ -37,7 +37,7 @@ module EcsDeployer
|
|
37
37
|
name: name,
|
38
38
|
command: command
|
39
39
|
}
|
40
|
-
container_override[:environment] = override_environments if override_environments.count
|
40
|
+
container_override[:environment] = override_environments if override_environments.count.positive?
|
41
41
|
|
42
42
|
@container_overrides << container_override
|
43
43
|
end
|
@@ -47,6 +47,7 @@ module EcsDeployer
|
|
47
47
|
)
|
48
48
|
result[:services].each do |svc|
|
49
49
|
next unless svc[:service_name] == service && svc[:status] == 'ACTIVE'
|
50
|
+
|
50
51
|
status = svc
|
51
52
|
break
|
52
53
|
end
|
@@ -148,7 +149,7 @@ module EcsDeployer
|
|
148
149
|
@logger.info LOG_SEPARATOR
|
149
150
|
end
|
150
151
|
|
151
|
-
if result[:new_registerd_task_count] == desired_count && result[:current_task_count]
|
152
|
+
if result[:new_registerd_task_count] == desired_count && result[:current_task_count].zero?
|
152
153
|
@logger.info "Service update succeeded. [#{result[:new_registerd_task_count]}/#{desired_count}]"
|
153
154
|
@logger.info "New task definition: #{task_definition_arn}"
|
154
155
|
|
@@ -52,7 +52,7 @@ module EcsDeployer
|
|
52
52
|
|
53
53
|
task_definition = result[:task_definition].to_hash
|
54
54
|
|
55
|
-
delete_keys = [
|
55
|
+
delete_keys = %i[task_definition_arn revision status requires_attributes compatibilities]
|
56
56
|
delete_keys.each do |delete_key|
|
57
57
|
task_definition.delete(delete_key)
|
58
58
|
end
|
@@ -68,7 +68,7 @@ module EcsDeployer
|
|
68
68
|
# @param [Array, Hash] variables
|
69
69
|
# @param [Hash] replace_variables
|
70
70
|
def replace_parameter_variables!(variables, replace_variables = {})
|
71
|
-
|
71
|
+
variables.each do |variable|
|
72
72
|
if variable.class == Array || variable.class == Hash
|
73
73
|
replace_parameter_variables!(variable, replace_variables)
|
74
74
|
elsif variable.class == String
|
@@ -82,6 +82,7 @@ module EcsDeployer
|
|
82
82
|
# @param [Hash] task_definition
|
83
83
|
def decrypt_environment_variables!(task_definition)
|
84
84
|
raise TaskDefinitionValidateError, '\'container_definition\' is undefined.' unless task_definition.key?(:container_definitions)
|
85
|
+
|
85
86
|
task_definition[:container_definitions].each do |container_definition|
|
86
87
|
next unless container_definition.key?(:environment)
|
87
88
|
|
data/lib/ecs_deployer/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ecs_deployer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- naomichi-y
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-08-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk
|
@@ -16,70 +16,56 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 3.0.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: aws_config
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - "~>"
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0.1'
|
34
|
-
type: :runtime
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - "~>"
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0.1'
|
26
|
+
version: 3.0.1
|
41
27
|
- !ruby/object:Gem::Dependency
|
42
28
|
name: oj
|
43
29
|
requirement: !ruby/object:Gem::Requirement
|
44
30
|
requirements:
|
45
31
|
- - "~>"
|
46
32
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
33
|
+
version: 3.8.1
|
48
34
|
type: :runtime
|
49
35
|
prerelease: false
|
50
36
|
version_requirements: !ruby/object:Gem::Requirement
|
51
37
|
requirements:
|
52
38
|
- - "~>"
|
53
39
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
40
|
+
version: 3.8.1
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: thor
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
58
44
|
requirements:
|
59
45
|
- - "~>"
|
60
46
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
47
|
+
version: 0.20.3
|
62
48
|
type: :runtime
|
63
49
|
prerelease: false
|
64
50
|
version_requirements: !ruby/object:Gem::Requirement
|
65
51
|
requirements:
|
66
52
|
- - "~>"
|
67
53
|
- !ruby/object:Gem::Version
|
68
|
-
version:
|
54
|
+
version: 0.20.3
|
69
55
|
- !ruby/object:Gem::Dependency
|
70
56
|
name: bundler
|
71
57
|
requirement: !ruby/object:Gem::Requirement
|
72
58
|
requirements:
|
73
59
|
- - "~>"
|
74
60
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
61
|
+
version: 1.17.2
|
76
62
|
type: :development
|
77
63
|
prerelease: false
|
78
64
|
version_requirements: !ruby/object:Gem::Requirement
|
79
65
|
requirements:
|
80
66
|
- - "~>"
|
81
67
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
68
|
+
version: 1.17.2
|
83
69
|
- !ruby/object:Gem::Dependency
|
84
70
|
name: codeclimate-test-reporter
|
85
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -94,76 +80,62 @@ dependencies:
|
|
94
80
|
- - "~>"
|
95
81
|
- !ruby/object:Gem::Version
|
96
82
|
version: '1.0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: config
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - "~>"
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: 1.5.1
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - "~>"
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: 1.5.1
|
111
83
|
- !ruby/object:Gem::Dependency
|
112
84
|
name: rake
|
113
85
|
requirement: !ruby/object:Gem::Requirement
|
114
86
|
requirements:
|
115
87
|
- - "~>"
|
116
88
|
- !ruby/object:Gem::Version
|
117
|
-
version:
|
89
|
+
version: 12.3.3
|
118
90
|
type: :development
|
119
91
|
prerelease: false
|
120
92
|
version_requirements: !ruby/object:Gem::Requirement
|
121
93
|
requirements:
|
122
94
|
- - "~>"
|
123
95
|
- !ruby/object:Gem::Version
|
124
|
-
version:
|
96
|
+
version: 12.3.3
|
125
97
|
- !ruby/object:Gem::Dependency
|
126
98
|
name: rspec
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
128
100
|
requirements:
|
129
101
|
- - "~>"
|
130
102
|
- !ruby/object:Gem::Version
|
131
|
-
version:
|
103
|
+
version: 3.8.0
|
132
104
|
type: :development
|
133
105
|
prerelease: false
|
134
106
|
version_requirements: !ruby/object:Gem::Requirement
|
135
107
|
requirements:
|
136
108
|
- - "~>"
|
137
109
|
- !ruby/object:Gem::Version
|
138
|
-
version:
|
110
|
+
version: 3.8.0
|
139
111
|
- !ruby/object:Gem::Dependency
|
140
112
|
name: rubocop
|
141
113
|
requirement: !ruby/object:Gem::Requirement
|
142
114
|
requirements:
|
143
115
|
- - "~>"
|
144
116
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
117
|
+
version: 0.74.0
|
146
118
|
type: :development
|
147
119
|
prerelease: false
|
148
120
|
version_requirements: !ruby/object:Gem::Requirement
|
149
121
|
requirements:
|
150
122
|
- - "~>"
|
151
123
|
- !ruby/object:Gem::Version
|
152
|
-
version:
|
124
|
+
version: 0.74.0
|
153
125
|
- !ruby/object:Gem::Dependency
|
154
126
|
name: simplecov
|
155
127
|
requirement: !ruby/object:Gem::Requirement
|
156
128
|
requirements:
|
157
129
|
- - "~>"
|
158
130
|
- !ruby/object:Gem::Version
|
159
|
-
version:
|
131
|
+
version: 0.17.0
|
160
132
|
type: :development
|
161
133
|
prerelease: false
|
162
134
|
version_requirements: !ruby/object:Gem::Requirement
|
163
135
|
requirements:
|
164
136
|
- - "~>"
|
165
137
|
- !ruby/object:Gem::Version
|
166
|
-
version:
|
138
|
+
version: 0.17.0
|
167
139
|
description: Deploy Docker container on AWS ECS.
|
168
140
|
email:
|
169
141
|
- n.yamakita@gmail.com
|
@@ -172,17 +144,21 @@ executables:
|
|
172
144
|
extensions: []
|
173
145
|
extra_rdoc_files: []
|
174
146
|
files:
|
147
|
+
- ".circleci/config.yml"
|
148
|
+
- ".dockerignore"
|
149
|
+
- ".env.default"
|
175
150
|
- ".gitignore"
|
176
151
|
- ".rspec"
|
177
152
|
- ".rubocop.yml"
|
153
|
+
- Dockerfile
|
178
154
|
- Gemfile
|
179
155
|
- LICENSE.txt
|
180
156
|
- README.md
|
181
157
|
- Rakefile
|
182
158
|
- bin/console
|
183
159
|
- bin/setup
|
184
|
-
- circle.yml
|
185
160
|
- config.yml
|
161
|
+
- docker-compose.yml
|
186
162
|
- ecs_deployer.gemspec
|
187
163
|
- example/register_task.rb
|
188
164
|
- example/update_scheduled_task.rb
|
@@ -218,7 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
218
194
|
version: '0'
|
219
195
|
requirements: []
|
220
196
|
rubyforge_project:
|
221
|
-
rubygems_version: 2.
|
197
|
+
rubygems_version: 2.5.2.3
|
222
198
|
signing_key:
|
223
199
|
specification_version: 4
|
224
200
|
summary: Deploy application to ECS.
|