putpaws 0.0.7 → 0.0.8
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 +4 -4
- data/lib/putpaws/ecs/task_command.rb +42 -8
- data/lib/putpaws/ecs/tasks/ecs_task.rake +22 -1
- data/lib/putpaws/version.rb +1 -1
- metadata +16 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5383c31d8b2b94dcb948e565f9ab5784137a0b946aa53e2ade93fc5e1bf3152
|
4
|
+
data.tar.gz: 30babace1c15c9675752567795e4c43414be155cc0f9affccfdb8bd8907a215d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f506cafed6700e2fc5bff6334e7e3374e528652740de99c03a36e89a031603b891b77133b5264fff51f8d1d3bc7db22f8549c88a32658f87883249c8cfe9d331
|
7
|
+
data.tar.gz: 941ceaa13526fd71c3a37d5d6541490950472dea6bff75aff2b495acc10adb41f46b270e14a6c279d542863792594896443aeca882655321b856a745c38306e0
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'aws-sdk-ecs'
|
2
|
+
require 'aws-sdk-ssm'
|
2
3
|
|
3
4
|
module Putpaws::Ecs
|
4
5
|
class TaskCommand
|
@@ -27,11 +28,35 @@ module Putpaws::Ecs
|
|
27
28
|
}
|
28
29
|
end
|
29
30
|
|
30
|
-
def
|
31
|
+
def get_session_target(container: 'app')
|
31
32
|
raise "ECS Task Not Set" unless ecs_task
|
32
33
|
ctn = ecs_task.containers.detect{|c| c.name == container}
|
33
34
|
task_id = ecs_task.task_arn.split('/').last
|
34
35
|
raise "Container: #{container} not found" unless ctn
|
36
|
+
"ecs:#{cluster}_#{task_id}_#{ctn.runtime_id}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def get_port_forwarding_command(container: nil, remote_port:, remote_host:, local_port: nil)
|
40
|
+
container ||= 'app'
|
41
|
+
target = get_session_target(container: container)
|
42
|
+
ssm_client = Aws::SSM::Client.new({region: region})
|
43
|
+
local_port ||= (1050..1079).map(&:to_s).shuffle.first
|
44
|
+
puts "Starting to use local port: #{local_port}"
|
45
|
+
res = ssm_client.start_session({
|
46
|
+
target: target,
|
47
|
+
document_name: "AWS-StartPortForwardingSessionToRemoteHost",
|
48
|
+
parameters: {
|
49
|
+
portNumber: [remote_port],
|
50
|
+
localPortNumber: [local_port],
|
51
|
+
host: [remote_host]
|
52
|
+
}
|
53
|
+
})
|
54
|
+
build_session_manager_plugin_command(session: res, target: target)
|
55
|
+
end
|
56
|
+
|
57
|
+
def get_attach_command(container: nil)
|
58
|
+
container ||= 'app'
|
59
|
+
target = get_session_target(container: container)
|
35
60
|
res = ecs_client.execute_command({
|
36
61
|
cluster: cluster,
|
37
62
|
container: container,
|
@@ -39,17 +64,26 @@ module Putpaws::Ecs
|
|
39
64
|
interactive: true,
|
40
65
|
task: ecs_task.task_arn,
|
41
66
|
})
|
67
|
+
build_session_manager_plugin_command(session: res.session, target: target)
|
68
|
+
end
|
42
69
|
|
70
|
+
def build_session_manager_plugin_command(session:, target:)
|
43
71
|
ssm_region = ENV['AWS_REGION_SSM'] || @region
|
44
|
-
|
72
|
+
|
45
73
|
# https://github.com/aws/aws-cli/blob/2a6136010d8656a605d41d1e7b5fdab3c2930cad/awscli/customizations/ecs/executecommand.py#L105
|
46
|
-
session_json =
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
74
|
+
session_json = if session.respond_to?(:session_id)
|
75
|
+
{
|
76
|
+
"SessionId" => session.session_id,
|
77
|
+
"StreamUrl" => session.stream_url,
|
78
|
+
"TokenValue" => session.token_value,
|
79
|
+
}.to_json
|
80
|
+
elsif session.is_a?(Hash)
|
81
|
+
session.to_json
|
82
|
+
else
|
83
|
+
session
|
84
|
+
end
|
51
85
|
target_json = {
|
52
|
-
"Target" =>
|
86
|
+
"Target" => target
|
53
87
|
}.to_json
|
54
88
|
cmd = [
|
55
89
|
"session-manager-plugin",
|
@@ -22,7 +22,28 @@ namespace :ecs do
|
|
22
22
|
ecs_task = fetch(:ecs_task)
|
23
23
|
aws = Putpaws::Ecs::TaskCommand.config(fetch(:app))
|
24
24
|
aws.ecs_task = ecs_task
|
25
|
-
cmd = aws.get_attach_command
|
25
|
+
cmd = aws.get_attach_command(container: ENV['container'])
|
26
|
+
puts cmd
|
27
|
+
system(cmd)
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "Run port forwarding session. You need to enable ECS Exec on a specified task and also install session-manager-plugin."
|
31
|
+
task forward: :set_task do
|
32
|
+
ecs_task = fetch(:ecs_task)
|
33
|
+
aws = Putpaws::Ecs::TaskCommand.config(fetch(:app))
|
34
|
+
aws.ecs_task = ecs_task
|
35
|
+
|
36
|
+
remote_host, remote_port = (ENV['remote'] || '').split(':').map(&:strip)
|
37
|
+
_, local_port = (ENV['local'] || '').split(':').map(&:strip)
|
38
|
+
if remote_host.nil? or remote_port.nil?
|
39
|
+
raise "Remote Host, Port is required: (Ex) remote=192.168.1.1:80"
|
40
|
+
end
|
41
|
+
cmd = aws.get_port_forwarding_command(
|
42
|
+
container: ENV['container'],
|
43
|
+
remote_host: remote_host,
|
44
|
+
remote_port: remote_port,
|
45
|
+
local_port: local_port
|
46
|
+
)
|
26
47
|
puts cmd
|
27
48
|
system(cmd)
|
28
49
|
end
|
data/lib/putpaws/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: putpaws
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- metheglin
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-04-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: aws-sdk-ssm
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: aws-sdk-ecs
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|