Building a serverless application with AWS

2c8948aaaa1a7047e0dc3cd869877879?s=47 mingrammer
September 27, 2017

Building a serverless application with AWS

How to build a simple image resizing service based on serverless architecture with AWS

2c8948aaaa1a7047e0dc3cd869877879?s=128

mingrammer

September 27, 2017
Tweet

Transcript

  1. S3 + Lambda + API Gatewayܳ ഝਊೠ ࢲߡܻझ ࢲ࠺झ ѐߊೞӝ

    MinJae Kwon (@mingrammer) 2017.08.29 AWSKRUG Architecture (Make a serverless on-demand image resizing service)
  2. Name ӂ޹੤ (MinJae Kwon) Nickname @mingrammer Email k239507@gmail.com Who Game

    Server Engineer @ SundayToz Blog https://mingrammer.com Facebook https://facebook.com/mingrammer Github https://github.com/mingrammer Eng Blog https://medium.com/@mingrammer
  3. Serverless ୡә੗ܳ ؀࢚ਵ۽ ೤פ׮

  4. 2. On-demand image resizing 4. Result & Review 3. Building

    a service with AWS Contents 1. Serverless?
  5. Serverless? By Server Engineers Dist EC2 EC2 Cache Dist EC2

    EC2 Cache Client Client API Code API Code By AWS
  6. Serverless? Dist EC2 EC2 Cache Dist EC2 EC2 Cache Client

    Client API Code API Code By Server Engineers By AWS have to manage entire architectures and logics focus on logics
  7. Serverless? Amazon API Gateway AWS Lambda + Amazon
 S3 +

    Amazon Kinesis Amazon
 DynamoDB Amazon
 SNS … …
  8. On-demand image resizing On-demand image resizing service?

  9. On-demand image resizing Resizing Server image resized User Service desired

    parameters new image
  10. On-demand image resizing ੉޷૑ܳ ޷ܻ ࢤࢿ೧ف૑ ঋইب ؽ ׮নೠ ࢎ੉ૉ੄

    ੉޷૑ܳ ೙ਃೡ ٸ ࢤࢿೡ ࣻ ੓਺ ੉޷૑ ୊ܻ ো࢑ਸ ݫੋ ۽૒җ ܻ࠙ೡ ࣻ ੓਺ ׮ࣻ੄ ੉޷૑ ୊ܻ ো࢑ী ٮܲ ஹೊ౴ ࢿמ੄ ਬز੸ੋ झாੌ݂
  11. On-demand image resizing Why Serverless?

  12. On-demand image resizing ੉޷૑ ਃ୒ী ؀ೠ ౟ې೗ ৘ஏ੉ য۰਑ ౠࣻ

    ӝמਸ ਤೠ ৮੹ೠ ױੌ ੋझఢझ ࢎਊ਷ ࠺ਊ ࠺ബਯ੸੉ۄ ౸ױ ࢲߡ ҙܻ ࠁױ ࢲ࠺झ ѐߊী݅ ૘઺ೞҊ र਺
  13. Amazon
 S3 Amazon API Gateway AWS Lambda users resizing Architecture

    On-demand image resizing
  14. Architecture with deploy process On-demand image resizing (advanced) Amazon
 S3

    Amazon API Gateway AWS Lambda users resizing AWS IAM deploy Python (boto)
  15. Building a service with AWS Amazon
 S3

  16. Building a service with AWS Amazon
 S3

  17. Building a service with AWS AWS Lambda Amazon
 S3

  18. Building a service with AWS AWS Lambda handler def lambda_handler(event,

    context) Check existence of a resized image Get a resized image Put a resized image Resize an image Generate an thumbnail link Amazon
 S3 resizer code
  19. Building a service with AWS Amazon API Gateway AWS Lambda

    handler def lambda_handler(event, context) Check existence of a resized image Get a resized image Put a resized image Resize an image Generate an thumbnail link Amazon
 S3 resizer code
  20. Building a service with AWS Set up IAM Lambda /

    S3 / API Gatewayܳ ҙܻೡ ࣻ ੓ח ুࣁझ ӂೠਸ ೡ׼
  21. Building a service with AWS Set up S3 bucket ੐੄੄

    ੉޷૑ ੷੢ ҃۽ ࢤࢿ ੉ ҃۽ীࢲ੄ ӏ஗਷ mingrammer/{sub}/{category}/{filename}
  22. Building a service with AWS Set up S3 bucket S3

    Bucket Policy ࢸ੿ { "Version": "2008-10-17", "Id": "Policy1335892530063", "Statement": [ { "Sid": "Stmt1335892150622", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::386209384616:root" }, "Action": [ "s3:GetBucketAcl", "s3:GetBucketPolicy" ], "Resource": "arn:aws:s3:::mingrammer" }, { "Sid": "Stmt1335892526596", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::386209384616:root" }, "Action": “s3:PutObject", "Resource": "arn:aws:s3:::mingrammer/*" }, { "Sid": "PublicReadGetObject", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::mingrammer/*" } ] }
  23. Building a service with AWS Write Lambda handler function def

    lambda_handler(event, context): sub = event.get('sub') category = event.get('category') filename = event.get('filename') width = event.get('width') # Check if the image url with given parameter exists # If the format of image is not supported, redirect to original image with Image(file=original_image['Body']) as img: # If width is not set, get width of original image # Check if the width is valid numeric value # If the thumbnail already exists, redirect to that # Image resizing ] event.get('field') ?
  24. Building a service with AWS Write Lambda handler function ../{sub}/{category}/{filename}?width=400

    Amazon API Gateway AWS Lambda API Gateway੄ Mapping Templateীࢲ Lambda۽ ౵ۄ޷ఠܳ ֈѹષ
  25. Building a service with AWS Write Lambda handler function event.get('field')

    Amazon API Gateway AWS Lambda Amazon
 S3 Valid? Format check Param check Amazon
 S3 Exists? Resize Save Amazon
 S3 original thumbnail Get object Get object Put object
  26. Building a service with AWS Upload Lambda handler function

  27. Building a service with AWS Upload Lambda handler function ੉޷૑

    ୊ܻܳ ਤೠ wand ۄ੉࠳۞ܻ৬ ೩ٜ۞ ೣࣻо ನೣػ ౵ੌਸ ೣԋ ঑୷ zip -R thumbnailer.zip wand/* generator.py
  28. Building a service with AWS Upload Lambda handler function

  29. Building a service with AWS Upload Lambda handler function

  30. Building a service with AWS Upload Lambda handler function Lambda

    ೣࣻо ࢿҕ੸ਵ۽ ࢤࢿؽ
  31. Building a service with AWS (+) thumbnailerۄח IAM Role੉ Lambdaীࢲ

    S3ܳ ઁযೡ ࣻ ੓ب۾ IAMীࢲ Policyܳ ୶о೧઻ঠೣ Setup Permissions
  32. Building a service with AWS Attach Policyীࢲ AmazonS3FullAccessܳ ୶о Setup

    Permissions
  33. Building a service with AWS Set up API Gateway with

    Lambda
  34. Building a service with AWS Set up API Gateway with

    Lambda /mingrammer/{sub}/{category}/{filename}੉ۄח ߡఉ ೞਤ ҃۽ ӏ஗ী ݏѱ ܻࣗझܳ ࢤࢿ
  35. Building a service with AWS Set up API Gateway with

    Lambda /mingrammer/{sub}/{category}/{filename}੉ۄח ߡఉ ೞਤ ҃۽ ӏ஗ী ݏѱ ܻࣗझܳ ࢤࢿ ҃۽ ੗୓ܳ Object ఃчਵ۽ ࢸ੿೧ S3۽੄ ૒੽ ੽Ӕҗ زੌೠ ੽Ӕ ߑधਸ ஂೞӝ ਤೣ ( {variable}਷ ҃۽ ߸ࣻܳ ڷೣ )
  36. Building a service with AWS Set up API Gateway with

    Lambda {/filenamae} ҃۽ীࢲ ݫࢲ٘ ࢤࢿਸ ࢶఖೠ റ GET ݫࢲ٘ܳ ࢤࢿ
  37. Building a service with AWS Set up API Gateway with

    Lambda {/filenamae} ҃۽ীࢲ ݫࢲ٘ ࢤࢿਸ ࢶఖೠ റ GET ݫࢲ٘ܳ ࢤࢿ /mingrammer/{sub}/{category}/{filename} ੹୓ ҃۽ী ؀೧ API ݫࢲ٘ܳ ੿੄ೡ ࣻ ੓਺
  38. Building a service with AWS Set up API Gateway with

    Lambda ࢤࢿೠ GET ݫࢲ٘ী ખ ੹ী ݅ٚ thumbnailۄח Lambda ೣࣻܳ োѾ
  39. Building a service with AWS Set up API Gateway with

    Lambda /mingrammer/{sub}/{category}/{filename}੉ۄח API ূ٘ನੋ౟ী Lambda ೣࣻо ࢿҕ੸ਵ۽ োѾؽ
  40. Building a service with AWS Set up API Gateway with

    Lambda ੉޷૑ ܻࢎ੉૚ਸ ਤ೧ [ݫࢲ٘ ਃ୒]ীࢲ widthۄח ౵ۄ޷ఠܳ ߉ਸ ࣻ ੓ب۾ URL (GET) ௪ܻ ౵ۄ޷ఠ ୶о
  41. Building a service with AWS Set up API Gateway with

    Lambda ઁ؀۽ ز੘ೞח૑ ഛੋ ೞӝ ਤ೧ [పझ౟]ী ٜযо ੸੺ೠ ҃۽ ߸ࣻ৬ ௪ܻ ౵ۄ޷ఠܳ ֍Ҋ పझ౟ None ??
  42. Building a service with AWS Set up API Gateway with

    Lambda ҃۽ ߸ࣻܳ ੸੺൤ ࢸ੿೮਺ীب None੉ۄח ч੉ ٜযоҊ ੓਺ API Gatewayীࢲ Lambda۽ context ੉৻੄ ୶о੸ੋ ౵ۄ޷ఠܳ ੹׳ೞӝ ਤ೧ࢶ Mapping Templatesܳ ࢸ੿೧ঠೣ Lambda۽ ੘সਸ ਃ୒ೞӝ ੹ API Gatewayী ٜযয়Ѣա ઓ੤ೞח ߸ٜࣻਸ JSON ഋక۽ ݒೝೞৈ ੹׳
  43. Building a service with AWS Set up API Gateway with

    Lambda [ా೤ ਃ୒]ী ٜযоݶ ࠄޙ ݒೝ ప੉࠶੉ۄח ೦ݾীࢲ ୶оೡ ࣻ ੓਺
  44. Building a service with AWS Set up API Gateway with

    Lambda sub, category, filename, width ౵ۄ޷ఠܳ ߉ই৬ пп JSON ఃчਵ۽ ݒೝೣ
  45. Building a service with AWS Set up API Gateway with

    Lambda ౵ۄ޷ఠٜ੉ ઁ؀۽ ੹׳غয ੿࢚੸ਵ۽ ز੘ೞৈ ߸ജػ ੉޷૑੄ URL੉ ߈ജؽ
  46. Building a service with AWS Set up API Gateway with

    Lambda S3ীࢲ ߸ജػ ੉޷૑ܳ ഛੋೞৈ ઁ؀۽ ੜ ز੘ೣਸ ഛੋ
  47. Building a service with AWS Set up API Gateway with

    Lambda పझ౟ܳ ֈয पઁ۽ ࢎਊೡ ࣻ ੓ب۾ APIܳ ߓನ
  48. Building a service with AWS Set up API Gateway with

    Lambda ݒ਋ ࣚऔѱ ߓನо ৮ܐؽ
  49. Building a service with AWS Set up API Gateway with

    Lambda ߓನػ APIо ੜ ز੘਷ ೞա ઑӘ ੉࢚ೣ .. ࢚ध੸ਵ۽ח ੉޷૑੄ Location ੿ࠁ ؀न Redirectػ पઁ ੉޷૑о ա৬ঠೣ (ਤ੄ Response ഋध਷ Defaultо ইפݴ Lambdaীࢲ ੉޷૑ ߸ജ੉ ՘դ റ, ਤ੄ ഋక۽ Responseܳ ٜ݅য ղ۰ળѢ੐)
  50. Building a service with AWS Set up API Gateway with

    Lambda [ݫࢲ٘ ਽׹]ীࢲ Body۽ ڄয૑ח Locationਵ۽ Redirectionਸ ೞӝ ਤ೧ Locationҗ Status ೻؊ܳ ୶о
  51. Building a service with AWS Set up API Gateway with

    Lambda ӒܻҊ [ా೤ ਽׹]ীࢲ Locationҗ Status ೻؊ী Body۽ ڄয૑ח чٜਸ ݒೝೣ
  52. Building a service with AWS Call the Lambda based API

    APIܳ ੤ߓನ ೠ റ ਗೞח widthчҗ ೣԋ APIܳ ੤ഐ୹ ೞݶ Body ؀न Locationਵ۽ Redirectػ ੉޷૑ܳ ߄۽ ࠅ ࣻ ੓਺
  53. Result & Review ੢੼ ױ੼ ࢲߡ ҙܻী ؀ೠ Ҋ޹੉ ೙ਃহয૗

    ੹୓੸ੋ ೒۽਋ ࣇস੉ ए਑ ೟ण ࠺ਊ੉ ֫૓ ঋਵա হ૑ب ঋ਺ ୡࠁ ੑ੢ীࢶ ҳഅ ৻੄ AWSী ؀ೠ ӝࠄ੸ੋ ૑ध੉ ਃҳؽ ѐߊ/ߓನ/ࢸ੿੉ ݒ਋ рױೞҊ ࡅܴ
  54. хࢎ೤פ׮ MinJae Kwon (@mingrammer) 2017.09.27 AWSKRUG Architecture (Make a serverless

    on-demand image resizing service)