添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

I have written a Lambda function. This function is uploaded in s3Bucket = "my-lambda", which is mapped to the role hello-lambda-role and the regionName = "us-west-2".

Now I wanted to access s3Bucket="some-other" where we have mapped Policy with 'hello-lambda-role' and it is in the region "eu-west-1".

Here is the API class I am using AmazonS3Client . My intention is to get some file from the bucket "some-other". But before that, I need to make the connection.

import com.amazonaws.services.lambda.runtime.Context;

import com.amazonaws.services.lambda.runtime.RequestHandler;

public class LambdaFunctionHandler implements RequestHandler<Request, Response> {

public Response handleRequest(Request request, Context context) {

String greetingString = String.format("Hello %s %s.",

request.firstName, request.lastName);

return new Response(greetingString);

}

}

Here is the class which list the bucket.

public class Test{

private static final Log logger = LogFactory.getLog(InvokeLambda.class);

private static final String awsAccessKeyId = "XXXXX";

private static final String awsSecretAccessKey = "XXXXX";

private static final String regionName = "eu-west-1";

private static Region region;

private static AWSCredentials credentials;

private static AWSLambdaClient lambdaClient;

private static AmazonS3Client s3Client;

private static void init() {

credentials = new BasicAWSCredentials(awsAccessKeyId,

awsSecretAccessKey);

s3Client = (credentials == null) ? new AmazonS3Client()

: new AmazonS3Client(credentials);

region = Region.getRegion(Regions.fromName(regionName));

s3Client.setRegion(region);

lambdaClient = (credentials == null) ? new AWSLambdaClient()

: new AWSLambdaClient(credentials);

lambdaClient.setRegion(region);

// lambdaClient.configureRegion(Regions.US_WEST_2);

}

/**

* The entry point into the AWS lambda function.

*/

public static void main(String... args) {

init();

getExistingBucket();

}

private static Bucket getExistingBucket() {

List<Bucket> buckets = s3Client.listBuckets();

for (Bucket bucket : buckets) {

logger.error(bucket.getName());

}

return null;

}

}

  • Use same code as you'd in your test, except you do not need to give credentials when you create the AmazonS3Client . Note that the role your lambda uses wants the authority to access your S3 bucket. The region of the S3 bucket shouldn't matter; the bucket name uniquely identifies the bucket regardless of region.

    Lambdas are generally triggered by an event, however, you'll call AWSLambdaClient.invoke() to run it manually.

    For example:

    public Response handleRequest(Request request, Context context) {

    AmazonS3Client s3Client = new AmazonS3Client();

    S3Object = s3Client.getObject("some-other", request.getFilename());

    ....

    return new Response(result);

    }

    Deploy that to AWS as " mylambda ", and then invoke remotely with:

    lambdaClient.invoke(new InvokeRequest().withFunctionName("mylambda").withPayload("input"));

    Data Science Interview Questions | Devops Interview Questions | Salesforce Interview Questions | Java Interview Questions | Selenium Interview Questions | Cyber Security Interview Questions | Azure Interview Questions | Power Bi Interview Questions | Software Testing Interview Questions | Data Analyst Interview Questions