Как передать регион в качестве параметра запроса для лямбда-функции Java AWS - PullRequest
0 голосов
/ 17 июня 2019

Я новичок в AWS лямбда. Я создаю экземпляр ec2, используя функцию AWS Java Lambda, в которой я пытаюсь передать регион динамически, используя шлюз API.

Я передаю регион в виде строки запроса. Я не уверен, как получить queryparam внутри лямбда-функции. Я прошел через вопросы, подобные этим, но не мог понять, как это реализовать.

Пожалуйста, найдите ниже лямбда-функцию Java:

package com.amazonaws.lambda.demo;

    import java.util.List;

    import org.json.simple.JSONObject;

    import com.amazonaws.auth.AWSCredentials;
    import com.amazonaws.auth.AWSStaticCredentialsProvider;
    import com.amazonaws.auth.BasicAWSCredentials;
    import com.amazonaws.regions.Regions;
    import com.amazonaws.services.ec2.AmazonEC2;
    import com.amazonaws.services.ec2.AmazonEC2ClientBuilder;
    import com.amazonaws.services.ec2.model.CreateTagsRequest;
    import com.amazonaws.services.ec2.model.DescribeInstanceStatusRequest;
    import com.amazonaws.services.ec2.model.DescribeInstanceStatusResult;
    import com.amazonaws.services.ec2.model.Instance;
    import com.amazonaws.services.ec2.model.InstanceNetworkInterfaceSpecification;
    import com.amazonaws.services.ec2.model.InstanceStatus;
    import com.amazonaws.services.ec2.model.RunInstancesRequest;
    import com.amazonaws.services.ec2.model.RunInstancesResult;
    import com.amazonaws.services.ec2.model.StartInstancesRequest;
    import com.amazonaws.services.ec2.model.Tag;
    import com.amazonaws.services.lambda.runtime.Context;
    import com.amazonaws.services.lambda.runtime.RequestHandler;
    import com.amazonaws.services.lambda.runtime.events.S3Event;
    import com.amazonaws.services.s3.AmazonS3;
    import com.amazonaws.services.s3.AmazonS3ClientBuilder;


    public class LambdaFunctionHandler implements RequestHandler<S3Event, String> {
         private static final AWSCredentials AWS_CREDENTIALS;
            static String ACCESS_KEY="XXXXXXXXXX";
            static String SECRET_KEY="XXXXXXXXXXXXXXXX";

            static {
                // Your accesskey and secretkey
                AWS_CREDENTIALS = new BasicAWSCredentials(
                        ACCESS_KEY,
                        SECRET_KEY
                );
            }
        private AmazonS3 s3 = AmazonS3ClientBuilder.standard().build();

        public LambdaFunctionHandler() {}

        // Test purpose only.
        LambdaFunctionHandler(AmazonS3 s3) {
            this.s3 = s3;
        }


        @Override
        public String handleRequest(S3Event event, Context context) {
            context.getLogger().log("Received event: " + event);


            // Set up the amazon ec2 client
            AmazonEC2 ec2Client = AmazonEC2ClientBuilder.standard()
                    .withCredentials(new AWSStaticCredentialsProvider(AWS_CREDENTIALS))
                    .withRegion(Regions.EU_CENTRAL_1)
                    .build();

            // Launch an Amazon EC2 Instance
            RunInstancesRequest runInstancesRequest = new RunInstancesRequest().withImageId("ami-XXXX")
                    .withInstanceType("t2.micro") // https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html
                    .withMinCount(1)
                    .withMaxCount(1)
                    .withKeyName("KEY")
                    .withNetworkInterfaces(new InstanceNetworkInterfaceSpecification()
                            .withAssociatePublicIpAddress(true)
                            .withDeviceIndex(0)
                            .withSubnetId("subnet-XXX")
                            .withGroups("sg-XXXX"));

            RunInstancesResult runInstancesResult = ec2Client.runInstances(runInstancesRequest);

            Instance instance = runInstancesResult.getReservation().getInstances().get(0);
            String instanceId = instance.getInstanceId();
            String instanceip=instance.getPublicIpAddress();

            System.out.println("EC2 Instance Id: " + instanceId);

            // Setting up the tags for the instance
            CreateTagsRequest createTagsRequest = new CreateTagsRequest()
                    .withResources(instance.getInstanceId())
                    .withTags(new Tag("Name", "SampleLambdaEc2"));
            ec2Client.createTags(createTagsRequest);

            // Starting the Instance
            StartInstancesRequest startInstancesRequest = new StartInstancesRequest().withInstanceIds(instanceId);

            ec2Client.startInstances(startInstancesRequest);




        /*// Stopping the Instance

            StopInstancesRequest stopInstancesRequest = new StopInstancesRequest()
                      .withInstanceIds(instanceId);

                    ec2Client.stopInstances(stopInstancesRequest);*/

            //describing the instance
            DescribeInstanceStatusRequest describeInstanceRequest = new DescribeInstanceStatusRequest().withInstanceIds(instanceId);
            DescribeInstanceStatusResult describeInstanceResult = ec2Client.describeInstanceStatus(describeInstanceRequest);




           List<InstanceStatus> state = describeInstanceResult.getInstanceStatuses();
           while (state.size() < 1) { 
               // Do nothing, just wait, have thread sleep if needed
               describeInstanceResult = ec2Client.describeInstanceStatus(describeInstanceRequest);
               state = describeInstanceResult.getInstanceStatuses();
           }
           String status = state.get(0).getInstanceState().getName();

           System.out.println("status"+status);
           JSONObject response=new JSONObject();

           response.put("instanceip", instanceip);
           response.put("instancestatus", status);

           System.out.println("response=>"+response);


        return response.toString();
        }
    }

Я хотел бы передать параметр запроса вместо Regions.EU_CENTRAL_1

// Set up the amazon ec2 client
            AmazonEC2 ec2Client = AmazonEC2ClientBuilder.standard()
                    .withCredentials(new AWSStaticCredentialsProvider(AWS_CREDENTIALS))
                    .withRegion(Regions.EU_CENTRAL_1)
                    .build();

Пожалуйста, найдите конфигурацию API ниже:

enter image description here

Любые советы о том, как этого добиться, были бы действительно полезны. Заранее спасибо.

...