Monday, 6 March 2017

Upload file to AWS S3 from HTML form, retrieve and store metadata in AWS Dynamodb using AWS Lambda function

Users upload a file from HTML form to AWS S3. As user requirement, details of the file to upload can be stored for security reasons. Details of the file uploaded to AWS S3 bucket using HTML form can be tracked. The metadata of such tracked files are stored in Dynamodb table.

For performing the target operation three AWS services are being used

1. Lambda – For programming (Python)
2. Dynamodb – For storing items in table
3. S3 – For file storage

Along with AWS, HTML form and Python is being used as the environment.
The target operation has been explained in the following steps. The highlighted sections in the screen are intentional for quick information grasp.

Step 1: Log into AWS console. Dynamodb is grouped under the category Database in services section. Fig. 1 illustrates Dynamodb under Database category in AWS console’s services. Click on Dynamodb to create a table.

Fig. 1. AWS Services 

 Step 2: Create a table by clicking on create table.

Fig. 2: Create table

Step 3: Naming the table, primary key and assigning a type to the Primary key can be found here. In the following Fig. 3 a table named “S3meta”, and “Name” as the primary key field of String type has been created.

Fig. 3: Assign name and primary key for table

Step 4: The created table looks as follows. This is the view of our table.

Fig. 4: Table view

 Step 5: Go to AWS Services, create Lambda function. In the following Fig. 5 a function named “Metaupload” and “Python 2.7” as the runtime has been created.

Fig. 5: Lambda function name and runtime

Step 6: As the entry type of my function is In line “Edit code inlinehas been selected
Select your respective region. In the Fig. 6, 'us-west-2' has been selected as the region and “connectionexample” as the S3 bucket name.

Fig. 6: Python code entry type and programming

 For reference here is the python code for lambda function.

from __future__ import print_function
import boto3

def lambda_handler(event, context):
client = boto3.client('s3')
dynamodb = boto3.resource('dynamodb', region_name='us-west-2')
for key in client.list_objects(Bucket='connectionexample')['Contents']:
k = client.head_object(Bucket='connectionexample', Key=key['Key'])
table = dynamodb.Table('S3meta')
'Name': tent,
'Content_Length': con_len,
'Content_Type': con_type,
'Server': ser_name,
'Upload_Date': upload_date
return 'Updated Successfully'

Step 7: Enter the remaining details in lambda function creation like Handler and Role. Role is used in execution, for accessing permissions from other AWS services.

Fig. 7: Providing Handler and Role

 Step 8: Go to IAM (Identity and Access Management) and attach policy for the given role.

Fig. 8: IAM Role

Step 9: Accessing operations from dynamodb or S3 has to be authorized. Policy document aids in creating the authorization. In the following code snippet, change Resource link to your dynamodb table arn. connectionexample” is my bucket name, if you use different name then change the bucket name too.

"Version": "2012-10-17",
"Statement": [
"Effect": "Allow",
"Action": [
"Resource": "**Your dynamodb arn**"
"Effect": "Allow",
"Action": [
"Resource": [

Step 10: After completion of writing a policy document, name the policy. Validate the document by click on “Validate Policy” to validate against errors if any. If the policy is valid, then click on “Create Policy”.

Fig. 9: Policy document validation and creation

Step 11: Attach the created policy to our role. As shown in Fig. 8.

Fig. 10: Policy attach to Role

Step 12: After successful creation of policy and role go to AWS 3 and create a bucket. Then click the properties on top right of page select “Events”.

Fig. 11: S3 bucket properties

Step 13: In the events select an event to trigger while uploading to S3, so we select ObjectCreated(All).

Fig. 12: Events

Step 14: A lambda function has to be triggered on every file upload to S3. So to perform trigger after successful file upload select a lambda function which created already in step 6.

Fig. 13: Lambda function to be triggered

Step 15: Now create a HTML form to upload a file manually from user system. Fig.14 is the HTML template. More details on policy, signature can be found under 

Fig. 14: HTML template

Step 16: Run the HTML form, select a file to upload on S3.

Fig. 15: File selection for upload

Step 17: Click upload file to S3 button.

 Fig. 16: File selection for upload

Step 18: Refresh the S3 bucket and validate the file upload operation. Is file uploaded or not.

Fig. 17: Refresh S3 for uploaded file

Step 19: Refresh the dynamodb table and see the items that are inserted into table.

Fig. 18: Dynamodb refresh for table items

Step 20: Click the name to expand and see the details of table items.

Fig. 19: Details of table items

Conclusion :-

After successful upload of a file on S3 bucket from HTML form, the respective file's metadata will be stored as a table in Dynamodb.

Thank You,
Bhanu Teja Kotaiahgari,
Developer Trainee Technical,
MOURI Tech Pvt Ltd.