簡體   English   中英

AWS Lambda:如何使用java從Lambda函數訪問S3存儲桶

[英]AWS Lambda : How to access S3 bucket from Lambda function using java

我寫了一個Lambda函數。 此函數上傳到s3Bucket =“my-lambda”,映射到角色hello-lambda-role和regionName =“us-west-2”。

現在我想訪問s3Bucket =“some-other”,我們用'hello-lambda-role'映射了Policy,它位於“eu-west-1”區域。

這是我使用AmazonS3Client的API類。 我的目的是從桶中獲取一些文件“some-other”。 但在此之前,我需要建立連接。

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);
    }

}

這是列出存儲桶的類。

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;
    }
}

使用與測試中相同的代碼,但在創建AmazonS3Client時不需要提供憑據。 請注意,lambda使用的角色需要權限才能訪問S3存儲桶。 S3桶的區域無關緊要; 存儲桶名稱唯一標識存儲桶,與區域無關。

Lambda通常由事件觸發,但您可以調用AWSLambdaClient.invoke()來手動運行它。

例如:

public Response handleRequest(Request request, Context context) {
    AmazonS3Client s3Client = new AmazonS3Client();
    S3Object = s3Client.getObject("some-other", request.getFilename());
    ....
    return new Response(result);
}

將其作為“mylambda”部署到AWS,然后使用以下命令遠程調用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM