Advertisement
Guest User

Untitled

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