Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.amazonaws.samples;
- import java.io.Console;
- import java.io.IOException;
- import java.net.ConnectException;
- import java.net.SocketTimeoutException;
- import java.nio.file.Files;
- import java.nio.file.Paths;
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Scanner;
- import java.util.concurrent.TimeUnit;
- import com.jcraft.jsch.*;
- import net.schmizz.sshj.SSHClient;
- import net.schmizz.sshj.common.IOUtils;
- import net.schmizz.sshj.connection.channel.direct.Session;
- import net.schmizz.sshj.connection.channel.direct.Session.Command;
- import software.amazon.awssdk.services.ec2.Ec2Client;
- import software.amazon.awssdk.services.ec2.model.AuthorizeSecurityGroupIngressRequest;
- import software.amazon.awssdk.services.ec2.model.AuthorizeSecurityGroupIngressResponse;
- import software.amazon.awssdk.services.ec2.model.CreateKeyPairRequest;
- import software.amazon.awssdk.services.ec2.model.CreateKeyPairResponse;
- import software.amazon.awssdk.services.ec2.model.CreateSecurityGroupRequest;
- import software.amazon.awssdk.services.ec2.model.CreateSecurityGroupResponse;
- import software.amazon.awssdk.services.ec2.model.DeleteKeyPairRequest;
- import software.amazon.awssdk.services.ec2.model.DeleteKeyPairResponse;
- import software.amazon.awssdk.services.ec2.model.DeleteSecurityGroupRequest;
- import software.amazon.awssdk.services.ec2.model.DeleteSecurityGroupResponse;
- import software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest;
- import software.amazon.awssdk.services.ec2.model.DescribeInstancesResponse;
- import software.amazon.awssdk.services.ec2.model.Instance;
- import software.amazon.awssdk.services.ec2.model.InstanceType;
- import software.amazon.awssdk.services.ec2.model.IpPermission;
- import software.amazon.awssdk.services.ec2.model.IpRange;
- import software.amazon.awssdk.services.ec2.model.Reservation;
- import software.amazon.awssdk.services.ec2.model.RunInstancesRequest;
- import software.amazon.awssdk.services.ec2.model.RunInstancesResponse;
- import software.amazon.awssdk.services.ec2.model.StartInstancesRequest;
- import software.amazon.awssdk.services.ec2.model.StartInstancesResponse;
- import software.amazon.awssdk.services.ec2.model.StopInstancesRequest;
- import software.amazon.awssdk.services.ec2.model.TerminateInstancesRequest;
- import software.amazon.awssdk.services.ec2.model.TerminateInstancesResponse;
- public class StartVM {
- static final String vpc_id ="vpc-7120680b";
- public static void CreateSecurityGroup(String name, String desc, Ec2Client ec2){
- CreateSecurityGroupResponse createResponse = ec2.createSecurityGroup(CreateSecurityGroupRequest.builder().groupName(name).description(desc).vpcId(vpc_id).build());
- }
- public static void IpRangePermissionAndSecurityGroupIngressAuthorization (Ec2Client ec2, String securityGroupName) {
- IpRange ip_range = IpRange.builder().cidrIp("0.0.0.0/0").build();
- IpPermission ip_perm = IpPermission.builder().ipProtocol("tcp").toPort(80).fromPort(80).ipRanges(ip_range).build();
- IpPermission ip_perm2 = IpPermission.builder().ipProtocol("tcp").toPort(22).fromPort(22).ipRanges(ip_range).build();
- AuthorizeSecurityGroupIngressRequest auth_request = AuthorizeSecurityGroupIngressRequest.builder().groupName(securityGroupName).ipPermissions(ip_perm, ip_perm2).build();
- ec2.authorizeSecurityGroupIngress(auth_request);
- }
- public static String createSshSecurityGroup(Ec2Client ec2, String name) {
- CreateSecurityGroupResponse createResponse = ec2.createSecurityGroup(CreateSecurityGroupRequest.builder().groupName(name).description(name).vpcId(vpc_id).build());
- IpRange anyIpv4 = IpRange.builder().cidrIp("0.0.0.0/0").build();
- IpPermission allowSsh = IpPermission.builder()
- .ipProtocol("tcp")
- .fromPort(22)
- .toPort(22)
- .ipRanges(anyIpv4)
- .build();
- ec2.authorizeSecurityGroupIngress(AuthorizeSecurityGroupIngressRequest.builder().groupId(createResponse.groupId()).ipPermissions(allowSsh).build());
- return createResponse.groupId();
- }
- public static String CreateKeyPair (String kpname, Ec2Client ec2) throws IOException {
- CreateKeyPairResponse response = ec2.createKeyPair(CreateKeyPairRequest.builder().keyName(kpname).build());
- return Files.write(Paths.get(kpname + ".pem"), response.keyMaterial().getBytes()).toString();
- }
- public static void deleteKeyPair (Ec2Client ec2, String kpname) throws IOException {
- DeleteKeyPairResponse response = ec2.deleteKeyPair(DeleteKeyPairRequest.builder().keyName(kpname).build());
- Files.delete(Paths.get(kpname + ".pem"));
- }
- public static RunInstancesResponse RunInstances (Ec2Client ec2, String ami_id, String kpname) {
- RunInstancesRequest request = RunInstancesRequest.builder().imageId(ami_id).keyName(kpname).instanceType(InstanceType.T2_MICRO).maxCount(1).minCount(1).build();
- RunInstancesResponse response = ec2.runInstances(request);
- return response;
- }
- public static void startInstances (Ec2Client ec2, String instance_id) {
- StartInstancesRequest StartRequest = StartInstancesRequest.builder().instanceIds(instance_id).build();
- StartInstancesResponse response = ec2.startInstances(StartRequest);
- }
- public static void deleteSecurityGroup (Ec2Client ec2, String SecurityGroupName) {
- DeleteSecurityGroupRequest delSecGroupRequest = DeleteSecurityGroupRequest.builder().groupName(SecurityGroupName).build();
- DeleteSecurityGroupResponse delSGResponse = ec2.deleteSecurityGroup(delSecGroupRequest);
- }
- public static void terminateInstance (Ec2Client ec2, String instance_id) {
- ec2.terminateInstances(TerminateInstancesRequest.builder().instanceIds(instance_id).build());
- }
- public static List<Instance> instanceIpv4Address (Ec2Client ec2, String instance_id) {
- List<Instance> instances = new ArrayList<>();
- DescribeInstancesRequest request = DescribeInstancesRequest.builder().instanceIds(instance_id).build();
- for (Reservation r : ec2.describeInstances(request).reservations()) {
- for (Instance instance : r.instances()) {
- instances.add(instance);
- }
- }
- return instances;
- }
- private static final Console con = System.console();
- public static void main(String[] args) throws IOException {
- Scanner scanner = new Scanner(System.in);
- String ami_id = "ami-00eb20669e0990cb4";
- String kpname = "Key Paair Namennh";
- String name = "nameatestnnh";
- String desc = "SecurityGroupDesc";
- String user = "ec2-user";
- Ec2Client ec2 = Ec2Client.create();
- CreateSecurityGroup(name, desc, ec2);
- IpRangePermissionAndSecurityGroupIngressAuthorization(ec2, name);
- String keyFilePath = CreateKeyPair(kpname, ec2);
- RunInstancesResponse riresponse = RunInstances(ec2, ami_id, kpname);
- String instance_id = riresponse.instances().get(0).instanceId();
- try {
- System.out.println("wait 40 seconds till instance has started, then enter a new line");
- scanner.nextLine();
- List<Instance> instances;
- while(true) {
- instances = instanceIpv4Address(ec2, instance_id);
- if(instances.get(0).publicIpAddress() != null) {
- break;
- } else {
- try { Thread.sleep(10000);
- } catch (InterruptedException e) {}
- }
- }
- //ssh
- final SSHClient ssh = new SSHClient();
- ssh.loadKnownHosts();
- ssh.connect(instances.get(0).publicIpAddress());
- Session session = null;
- try {
- ssh.authPublickey(user, keyFilePath);
- session = ssh.startSession();
- final Command cmd = session.exec("sudo apt-get install openjdk-8-jre openjfx");
- con.writer().print(IOUtils.readFully(cmd.getInputStream()).toString());
- cmd.join(5, TimeUnit.SECONDS);
- con.writer().print("\n** exit status: " + cmd.getExitStatus());
- } finally {
- try {
- if (session != null) {
- session.close();
- }
- } catch (IOException e) {
- // Do Nothing
- }
- ssh.disconnect();
- ssh.close();
- }
- System.out.println("waiting for newline to terminate the instance.");
- scanner.nextLine();
- }
- finally {
- terminateInstance (ec2, instance_id);
- deleteKeyPair(ec2, kpname);
- deleteSecurityGroup(ec2, name);
- }
- System.out.println("Instance shutdown initiated.");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement