This folder contains an AWS Lambda Function example in Java on AWS (Amazon Web Services).
It handles an AWS Lambda function that moves an object when it appears in a S3 bucket to another S3 bucket.
-
You must have an Amazon Web Services (AWS) account.
-
The code was written for:
- Java 8
- Apache Maven 3
- AWS Java Lambda Support Libraries:
- AWS Lambda Java Core Library
- AWS Lambda Java Events Library
- AWS SDK for Java (SDK V2)
-
You can select the destination bucket name using an AWS Lambda environment variable:
TARGET_BUCKET
-
Access the AWS console.
-
Create a S3 bucket for the source and another S3 bucket for the target.
-
Create an IAM Policy: ex.
Policy-my-buckets
Changing:
sourcebucket
to the name of your source bucket.targetbucket
to the name of your target bucket.
Content of the IAM policy:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:DeleteObject" ], "Resource": [ "arn:aws:s3:::sourcebucket/*" ] }, { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::targetbucket/*" ] }, { "Effect": "Allow", "Action": [ "cloudwatch:*" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "logs:*" ], "Resource": [ "*" ] } ] }
-
Create a role:
Role-my-buckets
.This role uses the policy
Policy-my-buckets
-
Create an AWS lambda function:
- Name:
<LAMBDA_NAME>
- Runtime:
Java 8
- Handler:
example.S3MoveHandler::handleRequest
- Role:
Role-my-buckets
- Runtime Settings for the lambda function:
- Memory (MB):
1024
- Timeout:
10 sec
- Memory (MB):
- The resources that the function's role has access to:
Amazon CloudWatch
Amazon CloudWatch Logs
Amazon S3
- Lambda obtained information from the policy statements:
Managed policy Policy-my-buckets
:s3:GetObject
-->Allow: arn:aws:s3:::sourcebucket/*
s3:DeleteObject
-->Allow: arn:aws:s3:::sourcebucket/*
s3:PutObject
-->Allow: arn:aws:s3:::targetbucket/*
- Lambda obtained information from the policy statements:
- The triggers:
S3
- Bucket:
<SOURCE_BUCKET_NAME>
- Event type:
ObjectCreated
- Enable trigger:
Yes
- Bucket:
- Name:
-
Create the AWS Lambda environment variable
TARGET_BUCKET
and set its value to the name of your target bucket. -
Upload the Java JAR file.
Artifact:
awslambdas3move.jar
-
Save the Lambda function.
It deploys the Lambda function.
-
Test the function:
Copy a file in the source S3 bucket.
The object from the source S3 bucket should be copied to the target S3 bucket and deleted in the source S3 bucket.
You should see the next messages in the log:
"S3Event: <LAMBDA_INPUT>" "Source Bucket: <SOURCE_BUCKET_NAME>" "Source Object: <SOURCE_FILE_NAME>" "Target Bucket: <TARGET_BUCKET_NAME>" "Target Object: <TARGET_FILE_NAME>" "Moving object ..." "Moved"