4

So i have setup a lambda function to upload a txt file to S3. How do i send data to the function using API Gateway?

Ive setup API Gateway to have a POST method.

here is my Lambda function

import boto3

s3 = boto3.resource('s3')

def lambda_handler(event, context):

    data = 'Totally awesome sword design' #event['data']

    filename = 'awesomeSword2' #event['filename']

    object = s3.Object(BUCKET_NAME, KEY + filename + '.txt')
    object.put(Body=data)

I just need to know how to send data and filename to the function (and read it)

4 Answers 4

5

The lambda will be invoked with the data that you send with the POST request.

For example, let's say that you make a POST request to your API gateway with this JSON:

{"data": "some data"}

The lambda function will receive in the event argument a proper Python dictionary:

{'data': 'some data'}

Then you can do something like that:

def lambda_handler(event, context):
    data = event.get('data') 
    # this will avoid raising an error if event doesn't contain the data key

    # do whatever you like with Data
Sign up to request clarification or add additional context in comments.

9 Comments

so how do i make the post request? The app is using javascript.
Are you using specific libraries in the App? Here you can find a way to send a POST without using any libs .stackoverflow.com/questions/24468459/…
i think this should work. where do i find the url to post to?
This is something that you can retrieve from the API Gateway in AWS
i got the url, and used your link however im getting this error: Failed to load resource: the server responded with a status of 403 () using Gateway's console ive manged to get it work
|
1

Basically, you pass a base64 encoded string as data Here is a blog post by AWS describing how to achieve that: https://aws.amazon.com/blogs/compute/binary-support-for-api-integrations-with-amazon-api-gateway/

Comments

1

Can also use APIGateway s3 integration directly

https://docs.aws.amazon.com/apigateway/latest/developerguide/integrating-api-with-aws-services-s3.html

Comments

0

tl;dr Use the Lambda Proxy feature of API Gateway

API Gateway passes the raw request to the integrated Lambda function. This request data includes the request headers, query string parameters, URL path variables, payload, and API configuration data. In your example, you can pass in data and filename in a body request.

https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-lambda.html

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.