AWS Lambda: Comment accéder au compartiment S3 à partir de la fonction Lambda à l'aide de Java
J'ai écrit une fonction Lambda.
Cette fonction est téléchargé dans s3Bucket = "mon-lambda", qui est mappé sur le rôle de bonjour-lambda-rôle et le regionName = "us-ouest-2".
Maintenant, je voulais accès s3Bucket="some-autres" où nous avons cartographié la Politique avec "bonjour-lambda-rôle" et c'est dans la région "eu-west-1".
Ici est la classe de l'API, je suis en utilisant AmazonS3Client. Mon intention est d'obtenir des fichiers dans le seau "de certains autres". Mais avant cela, j'ai besoin de faire la connexion.
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);
}
}
Ici est la classe qui liste le seau.
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;
}
}
source d'informationauteur
Vous devez vous connecter pour publier un commentaire.
Utiliser le même code que vous le feriez dans votre test, sauf que vous n'avez pas besoin de fournir des informations d'identification lorsque vous créez le
AmazonS3Client
. Noter que le rôle de votre lambda utilise des besoins de l'autorité pour accéder à votre compartiment S3. La région de la S3 seau ne devrait pas d'importance; le seau nom identifie de manière unique le seau indépendamment de la région.Lambdas sont généralement déclenché par un événement, mais vous pouvez l'appeler
AWSLambdaClient.invoke()
de l'exécuter manuellement.Par exemple:
Déployer à AWS comme "mylambda", et ensuite invoquer à distance avec: