Ho scritto una funzione Lambda. Questa funzione è caricata in s3Bucket = "my-lambda", che è mappato al ruolo hello-lambda-role e regionName = "us-west-2".AWS Lambda: come accedere al bucket S3 dalla funzione Lambda utilizzando java
Ora volevo accedere a s3Bucket = "some-other" dove abbiamo mappato Policy con 'hello-lambda-role' ed è nella regione "eu-west-1".
Ecco la classe API che sto usando AmazonS3Client. La mia intenzione è di ottenere un file dal secchio "un altro". Ma prima devo stabilire la connessione.
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);
}
}
Ecco la classe che elenca il 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;
}
}
Qual è il problema che stanno avendo? –
Inserire la chiave di accesso e la chiave segreta nel codice è un anti-pattern. Dovresti inserirlo in un file '~/.aws/credentials' quando si esegue il codice all'esterno di AWS e utilizzare i ruoli IAM quando si esegue su EC2 o Lambda. –