Upgrade to Pro — share decks privately, control downloads, hide ads and more …

introducing AWS Lambda For Java Developer

introducing AWS Lambda For Java Developer

Avatar for Ching Yi Chan

Ching Yi Chan

August 01, 2015
Tweet

More Decks by Ching Yi Chan

Other Decks in How-to & DIY

Transcript

  1. "84-BNCEB • 讓開發者專注於功能開發,減少 infrastructure 維運 負擔的事件驅動(event-driven)服務 • ⾃自動依 event 或

    request 的速率決定 auto scaling。 • 結合 AWS 其他產品提供的 Event 或 Stream 資料, ⾜足以應付⼤大多數的背景服務實作。 • 例如:使⽤用者上傳圖⽚片,製作圖⽚片縮圖以便在各種 device 或不同情境使⽤用。
  2. ੂБ streams poll & invoke pull mode S3 SNS Cognito

    Echo User App DynamoDB Kinesis push mode invoke directly Event Event/RequestResponse
  3. ੂБ streams poll & invoke pull mode S3 SNS Cognito

    Echo User App DynamoDB Kinesis push mode invoke directly Event Event/ whatever mode API Gateway
  4. ੂБ streams poll & invoke pull mode S3 SNS Cognito

    Echo User App DynamoDB Kinesis push mode invoke directly Event Event Event RequestResponse • Invocation Type • ResquestResponse • synchronously • return supported types • Event • asynchronously • must return void
  5. ੂБᐑྤ ኹ׬-BNCEBලᇌdלഒලᇌሙၤ 實際上會在 Linux Container 上執⾏行 僅 /tmp 有寫⼊入權限 上傳的

    ZIP 被解壓縮⾄至 /var/task ⺫⽬目錄 LD_LIBRARY_PATH="/var/runtime :/var/task:/var/task/lib"
  6. -BNCEB'VODUJPO • lambda function 必需是 stateless 的。 • lambda function

    除了可讀寫 /tmp 路徑,其他路徑都 是唯讀或無法存取,不應該依賴或假設執⾏行環境的狀 態。 • 不能假設 lambda function 總是在同⼀一台機器上執⾏行 (隨著 event/request rate 會⾃自動 auto scaling) • 可以將 native library 包成 deployable package (ZIP format) 內,但記得標⽰示為 executable 權限。
  7. ᇜᄳ-BNCEB'VODUJPO outputType handler-name(inputType input, Context context) { ... } •

    Invocation Type • ResquestResponse • synchronously • return supported types • Event • asynchronously • must return void • supported types • simple java types • POJO (java bean convention) • InputStream
 OutputStream ՉྼʔึᏨݟ̴݊ʔ݊WPJE
  8. ᛆࠢ-BNCEB&YFDVUPS JO*".3PMF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow",

    "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ], "Resource": "*" } ] } ცΎ̋ɪԴ͜Չ̴؂ਕึ͜ՑٙᛆࠢdԷν4ᛘᄳ
  9. ᛆࠢԴ͜-BNCEB"1* { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action":

    [ "lambda:*", "iam:PassRole" ], "Resource": "*" } ] } މ%&.0˙کdҢࡁᔊఊԴ͜MBNCEB°ܸ֛הϞᛆࠢ JBN1BTT3PMFʔ̋œೌجխ̣MBNCEBBQJd ྅݊œһอMBNCEBGVODUJPODPEFఱʔঐਂə
  10. 1FFQ-BNCEB&OWJSPONFOU • ⽤用 Lambda 呼叫 Linux 指令,觀察 Lambda 執⾏行環 境

    • Java 版本,No SecurityManager • 環境變數 • Image • User
  11. ffprobe version 0.9, Copyright (c) 2007-2011 the FFmpeg developers built

    on Jan 8 2015 14:27:50 with clang 6.0 (clang-600.0.56) configuration: --prefix=/opt/muzee --disable-yasm --disable-doc --enable-openssl --enable-nonfree libavutil 51. 32. 0 / 51. 32. 0 libavcodec 53. 42. 0 / 53. 42. 0 libavformat 53. 24. 0 / 53. 24. 0 libavdevice 53. 4. 0 / 53. 4. 0 libavfilter 2. 53. 0 / 2. 53. 0 libswscale 2. 1. 0 / 2. 1. 0 Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'foo.mp4': Metadata: major_brand : mp42 minor_version : 0 compatible_brands: isommp42 creation_time : 2014-11-22 13:54:19 Duration: 00:05:12.21, start: 0.000000, bitrate: 675 kb/s Stream #0:0(und): Video: h264 (Constrained Baseline) (avc1 / 0x31637661), yuv420p, 640x360 [SAR 1:1 DAR 16:9], 576 kb/s, 30 fps, 30 tbr, 30 tbn, 60 tbc Metadata: handler_name : VideoHandler Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, stereo, s16, 95 kb/s Metadata: creation_time : 2014-11-22 13:54:20 handler_name : FYBNQMF -BNCEB8JUI/BUJWF-JCSBSJFT • 利⽤用 FFMpeg 製作影⽚片預覽圖 • 使⽤用 ffprobe 取得影⽚片⻑⾧長度,每 30 秒建⽴立⼀一個縮圖 任務 (VideoPreviewTaskGenerator) • 使⽤用 ffmpeg 執⾏行縮圖任務 { "bucket": "qty.lambda.video", "offset": 60, "image_key": "images/sample.mp4.2.png", "key": "videos/sample.mp4" }
  12. FYBNQMF -BNCEB8JUI/BUJWF-JCSBSJFT • 註冊的 S3 Event • OnVideoUploaded 取得 video

    duration 建⽴立截圖 任務 • OnReceivedPreviewJob 建⽴立縮圖
  13. • 注意檔案權限,執⾏行檔與 shared object 需要可執⾏行 權限 task buildZip(type: Zip) {

    from compileJava from processResources into('lib') { from configurations.runtime } eachFile { if (it.name.contains(".so.")) fileMode 0755 if (it.name.contains("ffprobe")) fileMode 0755 if (it.name.contains("ffmpeg")) fileMode 0755 } } FYBNQMF -BNCEB8JUI/BUJWF-JCSBSJFT
  14. Չ˼ਪᕚ "84$-* aws lambda create-function help --runtime (string) The runtime

    environment for the Lambda function you are uploading. Currently, Lambda supports "java" and "nodejs" as the runtime. KBWBʑ݊࿁ٙ