Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2019
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.63 KB | None | 0 0
  1. package com.amazonaws.samples;
  2.  
  3. import java.io.Console;
  4. import java.io.IOException;
  5. import java.net.ConnectException;
  6. import java.net.SocketTimeoutException;
  7. import java.nio.file.Files;
  8. import java.nio.file.Paths;
  9. import java.util.ArrayList;
  10. import java.util.List;
  11. import java.util.Scanner;
  12. import java.util.concurrent.TimeUnit;
  13.  
  14. import com.jcraft.jsch.*;
  15.  
  16. import net.schmizz.sshj.SSHClient;
  17. import net.schmizz.sshj.common.IOUtils;
  18. import net.schmizz.sshj.connection.channel.direct.Session;
  19. import net.schmizz.sshj.connection.channel.direct.Session.Command;
  20. import software.amazon.awssdk.services.ec2.Ec2Client;
  21. import software.amazon.awssdk.services.ec2.model.AuthorizeSecurityGroupIngressRequest;
  22. import software.amazon.awssdk.services.ec2.model.AuthorizeSecurityGroupIngressResponse;
  23. import software.amazon.awssdk.services.ec2.model.CreateKeyPairRequest;
  24. import software.amazon.awssdk.services.ec2.model.CreateKeyPairResponse;
  25. import software.amazon.awssdk.services.ec2.model.CreateSecurityGroupRequest;
  26. import software.amazon.awssdk.services.ec2.model.CreateSecurityGroupResponse;
  27. import software.amazon.awssdk.services.ec2.model.DeleteKeyPairRequest;
  28. import software.amazon.awssdk.services.ec2.model.DeleteKeyPairResponse;
  29. import software.amazon.awssdk.services.ec2.model.DeleteSecurityGroupRequest;
  30. import software.amazon.awssdk.services.ec2.model.DeleteSecurityGroupResponse;
  31. import software.amazon.awssdk.services.ec2.model.DescribeInstancesRequest;
  32. import software.amazon.awssdk.services.ec2.model.DescribeInstancesResponse;
  33. import software.amazon.awssdk.services.ec2.model.Instance;
  34. import software.amazon.awssdk.services.ec2.model.InstanceType;
  35. import software.amazon.awssdk.services.ec2.model.IpPermission;
  36. import software.amazon.awssdk.services.ec2.model.IpRange;
  37. import software.amazon.awssdk.services.ec2.model.Reservation;
  38. import software.amazon.awssdk.services.ec2.model.RunInstancesRequest;
  39. import software.amazon.awssdk.services.ec2.model.RunInstancesResponse;
  40. import software.amazon.awssdk.services.ec2.model.StartInstancesRequest;
  41. import software.amazon.awssdk.services.ec2.model.StartInstancesResponse;
  42. import software.amazon.awssdk.services.ec2.model.StopInstancesRequest;
  43. import software.amazon.awssdk.services.ec2.model.TerminateInstancesRequest;
  44. import software.amazon.awssdk.services.ec2.model.TerminateInstancesResponse;
  45.  
  46.  
  47.  
  48. public class StartVM {
  49.     static final String vpc_id ="vpc-7120680b";
  50.  
  51.     public static void CreateSecurityGroup(String name, String desc, Ec2Client ec2){
  52.         CreateSecurityGroupResponse createResponse = ec2.createSecurityGroup(CreateSecurityGroupRequest.builder().groupName(name).description(desc).vpcId(vpc_id).build());
  53.     }
  54.    
  55.     public static void IpRangePermissionAndSecurityGroupIngressAuthorization (Ec2Client ec2, String securityGroupName) {
  56.         IpRange ip_range = IpRange.builder().cidrIp("0.0.0.0/0").build();
  57.         IpPermission ip_perm = IpPermission.builder().ipProtocol("tcp").toPort(80).fromPort(80).ipRanges(ip_range).build();
  58.         IpPermission ip_perm2 = IpPermission.builder().ipProtocol("tcp").toPort(22).fromPort(22).ipRanges(ip_range).build();
  59.  
  60.         AuthorizeSecurityGroupIngressRequest auth_request = AuthorizeSecurityGroupIngressRequest.builder().groupName(securityGroupName).ipPermissions(ip_perm, ip_perm2).build();                
  61.         ec2.authorizeSecurityGroupIngress(auth_request);
  62.     }
  63.    
  64.     public static String createSshSecurityGroup(Ec2Client ec2, String name) {
  65.         CreateSecurityGroupResponse createResponse = ec2.createSecurityGroup(CreateSecurityGroupRequest.builder().groupName(name).description(name).vpcId(vpc_id).build());
  66.        
  67.         IpRange anyIpv4 = IpRange.builder().cidrIp("0.0.0.0/0").build();
  68.        
  69.         IpPermission allowSsh = IpPermission.builder()
  70.             .ipProtocol("tcp")
  71.             .fromPort(22)
  72.             .toPort(22)
  73.             .ipRanges(anyIpv4)
  74.             .build();
  75.        
  76.         ec2.authorizeSecurityGroupIngress(AuthorizeSecurityGroupIngressRequest.builder().groupId(createResponse.groupId()).ipPermissions(allowSsh).build());
  77.        
  78.         return createResponse.groupId();
  79.     }
  80.            
  81.     public static String CreateKeyPair (String kpname, Ec2Client ec2) throws IOException {
  82.         CreateKeyPairResponse response = ec2.createKeyPair(CreateKeyPairRequest.builder().keyName(kpname).build());
  83.         return Files.write(Paths.get(kpname + ".pem"), response.keyMaterial().getBytes()).toString();
  84.     }
  85.    
  86.     public static void deleteKeyPair (Ec2Client ec2, String kpname) throws IOException {      
  87.         DeleteKeyPairResponse response = ec2.deleteKeyPair(DeleteKeyPairRequest.builder().keyName(kpname).build());
  88.         Files.delete(Paths.get(kpname + ".pem"));
  89.     }
  90.    
  91.     public static RunInstancesResponse RunInstances (Ec2Client ec2, String ami_id, String kpname) {
  92.         RunInstancesRequest request = RunInstancesRequest.builder().imageId(ami_id).keyName(kpname).instanceType(InstanceType.T2_MICRO).maxCount(1).minCount(1).build();
  93.         RunInstancesResponse response = ec2.runInstances(request);
  94.         return response;
  95.     }
  96.    
  97.     public static void startInstances (Ec2Client ec2, String instance_id) {
  98.         StartInstancesRequest StartRequest = StartInstancesRequest.builder().instanceIds(instance_id).build();        
  99.         StartInstancesResponse response = ec2.startInstances(StartRequest);
  100.     }
  101.    
  102.     public static void deleteSecurityGroup (Ec2Client ec2, String SecurityGroupName) {
  103.         DeleteSecurityGroupRequest delSecGroupRequest = DeleteSecurityGroupRequest.builder().groupName(SecurityGroupName).build();        
  104.         DeleteSecurityGroupResponse delSGResponse = ec2.deleteSecurityGroup(delSecGroupRequest);
  105.     }
  106.    
  107.     public static void terminateInstance (Ec2Client ec2, String instance_id) {              
  108.         ec2.terminateInstances(TerminateInstancesRequest.builder().instanceIds(instance_id).build());
  109.     }
  110.    
  111.    
  112.     public static List<Instance> instanceIpv4Address (Ec2Client ec2, String instance_id) {
  113.         List<Instance> instances = new ArrayList<>();
  114.        
  115.         DescribeInstancesRequest request = DescribeInstancesRequest.builder().instanceIds(instance_id).build();
  116.         for (Reservation r : ec2.describeInstances(request).reservations()) {
  117.             for (Instance instance : r.instances()) {
  118.                 instances.add(instance);
  119.             }
  120.         }
  121.         return instances;
  122.     }
  123.        
  124.     private static final Console con = System.console();
  125.    
  126.     public static void main(String[] args) throws IOException {
  127.         Scanner scanner = new Scanner(System.in);
  128.         String ami_id = "ami-00eb20669e0990cb4";
  129.         String kpname = "Key Paair Namennh";
  130.         String name = "nameatestnnh";
  131.         String desc = "SecurityGroupDesc";
  132.         String user = "ec2-user";
  133.        
  134.         Ec2Client ec2 = Ec2Client.create();
  135.        
  136.        
  137.         CreateSecurityGroup(name, desc, ec2);
  138.         IpRangePermissionAndSecurityGroupIngressAuthorization(ec2, name);
  139.         String keyFilePath = CreateKeyPair(kpname, ec2);
  140.         RunInstancesResponse riresponse = RunInstances(ec2, ami_id, kpname);
  141.         String instance_id = riresponse.instances().get(0).instanceId();    
  142.         try {
  143.         System.out.println("wait 40 seconds till instance has started, then enter a new line");
  144.         scanner.nextLine();
  145.        
  146.         List<Instance> instances;
  147.         while(true) {
  148.             instances = instanceIpv4Address(ec2, instance_id);
  149.             if(instances.get(0).publicIpAddress() != null) {
  150.                 break;
  151.             } else {
  152.                     try { Thread.sleep(10000);
  153.                     } catch (InterruptedException e) {}
  154.               }
  155.         }
  156.  
  157.        
  158.        
  159.         //ssh
  160.         final SSHClient ssh = new SSHClient();
  161.         ssh.loadKnownHosts();
  162.         ssh.connect(instances.get(0).publicIpAddress());
  163.         Session session = null;
  164.         try {
  165.             ssh.authPublickey(user, keyFilePath);
  166.             session = ssh.startSession();
  167.             final Command cmd = session.exec("sudo apt-get install openjdk-8-jre openjfx");
  168.             con.writer().print(IOUtils.readFully(cmd.getInputStream()).toString());
  169.             cmd.join(5, TimeUnit.SECONDS);
  170.             con.writer().print("\n** exit status: " + cmd.getExitStatus());
  171.         } finally {
  172.             try {
  173.                 if (session != null) {
  174.                     session.close();
  175.                 }
  176.             } catch (IOException e) {
  177.                 // Do Nothing  
  178.             }
  179.            
  180.             ssh.disconnect();
  181.             ssh.close();
  182.         }            
  183.        
  184.         System.out.println("waiting for newline to terminate the instance.");        
  185.         scanner.nextLine();
  186.         }
  187.         finally {
  188.             terminateInstance (ec2, instance_id);
  189.             deleteKeyPair(ec2, kpname);
  190.             deleteSecurityGroup(ec2, name);
  191.         }
  192.        
  193.         System.out.println("Instance shutdown initiated.");
  194.                        
  195.     }  
  196. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement