Getting started with AWS S3 — To upload image via API gateway — sample iOS app

AWS + Lambda + iOS

Sign Up

Step 1: Visit AWS S3 console and signup with you email ID, password and account name.

AWS S3 Console

Step 2: Fill your contact information — Full name, Phone number, Country, Address, State, Pincode.

Step 3: Add your billing informations. FYI, they will charge you 2 INR.

Step 4: Confirm your identity by using your mobile number. Once you confirmed it, you will get the verification code from AWS.

Confirm your identity

Step 5: Select your plan. For now, I’m selecting basic plan — “Basic support-Free”. Later you can change this based on your needs. Once plan selected, complete sign up.

Complete signup

Thats it! Your AWS S3 account successfully created.

Create bucket

Signin into your account. Go to amazon management console → S3. There create new bucket. Please disable Block Public Access settings for this bucket. 😅

Create bucket
Disable block all public access

Finally, you have created S3 bucket. 🙌

Bucket Permission

Select your bucket → Go to Permission tab.

Edit → Bucket policyAdd the following code inside that and save the changes.

"Version": "2012-10-17",
"Statement": [
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "*",
"Action": [
"Resource": "arn:aws:s3:::bucketsampleios/*"

Setup Lambda Funtion

Go to amazon management console → Lambda

Create function

Set function name and choose language — Python 3.9

Setup basic information

Once successful function creation,

Now, we going to edit the Just copy paste the code and tap deploy CTA

import json
import base64
import boto3
import uuid
file_name = "content.png"
s3_path = str(uuid.uuid4()) + file_name
bucket_name = "BUCKET_NAME"
def lambda_handler(event, context):
s3 = boto3.client("s3")
get_file_content = event["content"]
decode_content = base64.b64decode(get_file_content)
s3_upload = s3.put_object(Bucket=bucket_name, Key=s3_path, Body=decode_content)
return {
"statusCode": 200,
"body": json.dumps(s3_path)

Setup API Gateway

Go to amazon management console → API Gateway → Get started → Rest API

Setup API name and tap create API CTA

Create new API

Goto action tab and create Resources


Setup resource name and tap create resource

Create Resource

Then, By tapping action → create Put method inside the resources and tap select button near by PUT method

Add PUT method

Add your Lambda fucntion called “uploadAPI” and save it.

Add lambda function

Go to Integration Request → Mapping templates → Add Content-Type as image/png and body →Save it

"content" : "$input.body"
Mapping Templates

Then, Go to Settings under API → Binary Media Types → Add binary media type as image/png → Save changes

Back to Resources → Actions → Deploy API

Deploy API

Finally, you will get the Invoke URL.

Invoke URL

Sample iOS app

let image = UIImage(named: "apple")!
if let imageData = image.pngData(){
let header : HTTPHeaders = ["Content-Type": "image/png"]
let url = "INVOKE_URL"
AF.upload(imageData, to: url, method: .put, headers: header)
.responseObject { (response:AFDataResponse<T>) in
switch response.result{
case .success(let value):
case .failure(let error):

Check out my Github repo and follow me on LinkedIN.

Cheers 🍻




 iOS and Flutter developer @TCS, Chennai. Here to share best practices learned through my experience. Reach me on

Love podcasts or audiobooks? Learn on the go with our new app.

Recommended from Medium

7 Tips You Can Use To Avoid Developer Burnout Like a Pro

Playing game: One male (labeled “dev burnout”) blocking the other male (labeled “you”)

Quick Note: Custom WebView Class Won’t Display Virtual Keyboard After Kotlinized

Why you should write more Pseudo Code

Personalize WSL2 with ZSH and Oh-My-ZSH

What is DevOps? DevOps?

Setup Flutter and Dart Plugins in Android Studio

Introduction to AWS With Terraform

spaCy Annotation Tool — V2

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store


 iOS and Flutter developer @TCS, Chennai. Here to share best practices learned through my experience. Reach me on

More from Medium

How to create lambda function in AWS ?

Migrating MySQL timestamp from non-UTC Database to RDS with AWS DMS

Getting Static IP for AWS IoT Core

Static IP for IoT Core

Creating an Endpoint using AWS SageMaker

AWS console dashboard services