मैं इस प्रकार AWSSimpleSystemsManagementAsync का उपयोग करके एक सत्र प्रारंभ कर रहा हूं:

Map<String, List<String>> parameters = new HashMap<>();
parameters.put("portNumber", Arrays.asList("80"));
parameters.put("localPortNumber", Arrays.asList("8080"));

StartSessionResult result =
    getSsmClient()
        .startSession(
            new StartSessionRequest()
                .withTarget(sb.toString())
                .withDocumentName("AWS-StartPortForwardingSession")
                .withParameters(parameters));

sessionId = result.getSessionId();

ऐसा लगता है कि यह काम करता है और नकल करता है कि मैं मैन्युअल रूप से क्या कर सकता हूं:

aws ssm start-session --target "Your Instance ID" --document-name AWS-StartPortForwardingSession --parameters "portNumber"=["80"],"localPortNumber"=["8080"]

जब मैं मैन्युअल रूप से चलाता हूं तो मैं अपने ब्राउज़र को लोकलहोस्ट पर खोलता हूं: 8080 मेरे एप्लिकेशन के साथ बातचीत करने के लिए जैसा कि मुझे चाहिए, लेकिन मैं एसडीके के माध्यम से इस प्रकार की चीज करने के लिए संघर्ष कर रहा हूं क्योंकि सत्र शुरू करने के बाद ब्राउज़र खोलना काम नहीं कर रहा है जैसा कि यह मैन्युअल रूप से करता है।

उम्मीद है, मुझे बस कुछ याद आ रहा है।

2
javydreamercsw 12 मार्च 2020, 19:17

1 उत्तर

सबसे बढ़िया उत्तर

मान लें कि आपने https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html

अगला चरण इस तरह से एक नया सत्र-प्रबंधक-प्लगइन प्रक्रिया उत्पन्न करके इसे आपके नए बनाए गए सत्र से जोड़ना होगा।

...
StartSessionResult result = ssmClient.startSession(ssRequest);

StringBuilder responseJson = new StringBuilder("{");
responseJson.append("\"SessionId\":");
responseJson.append("\"");
responseJson.append(result.getSessionId());
responseJson.append("\"");
responseJson.append(",\"TokenValue\":");
responseJson.append("\"");
responseJson.append(result.getTokenValue());
responseJson.append("\"");
responseJson.append(",\"StreamUrl\":");
responseJson.append("\"");
responseJson.append(result.getStreamUrl());
responseJson.append("\"");
responseJson.append("}");

List<String> arguments = new ArrayList<>();
arguments.add("session-manager-plugin");
arguments.add(responseJson.toString());
arguments.add(AWS_REGION); // Whatever region you use
arguments.add("StartSession");
arguments.add(AWS_PROFILE_NAME); // Whatever profile you use
arguments.add("{\"Target\":\"i-xxxx\",\"DocumentName\":\"AWS-StartPortForwardingSession\",\"Parameters\":{\"portNumber\":[\"xx\"],\"localPortNumber\":[\"yyyy\"]}}");
arguments.add("https://ssm.us-east-1.amazonaws.com/"); // SSM regional endpoint

try {
    ProcessBuilder pb = new ProcessBuilder(arguments.toArray(new String[] {}));
    pb.redirectErrorStream(true);
    Process p = pb.start();
    BufferedReader r = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String line;
    while (true) {
        line = r.readLine();
        if (line == null) { break; }
        System.out.println(line);
    }
} catch (IOException e) {
    e.printStackTrace();
}

टुकड़ा आपके कंसोल में निम्नलिखित उत्पन्न करना चाहिए

Starting session with SessionId: aws-sdk-java-zzzz
Port yyyy opened for sessionId aws-sdk-java-zzzz.
2
Slavek Tecl 25 अप्रैल 2020, 21:49