aws black belt techシリーズ aws lambda

56
AWS Lambda AWS Black Belt Tech Webinar 2015 (旧マイスターシリーズ) アマゾンデータサービスジャパン株式会社 ソリューションアーキテクト 圭介 2015.01.21

Upload: amazon-web-services-japan

Post on 16-Jul-2015

1.936 views

Category:

Technology


7 download

TRANSCRIPT

  • AWS Lambda AWS Black Belt Tech Webinar 2015 ()2015.01.21

  • S3

    DynamoDB

  • OS

    24365

  • AWS Lambda

    Compute

    EC2OS

    ()

    201411Preview

  • AWS Lambda

  • Bring your own code

    Node.js

    /

    /tmpread/write

  • 100

  • S3

    AWS Lambda Amazon S3 Bucket

    1

    2

    3

  • DynamoDB

    AWS Lambda Amazon DynamoDB

    Table and Stream

  • S3CloudTrail

    AWS API

    AWS CloudTrail Logs

    AWS Lambda

    Bucket

  • /DynamoDB Lambda

    1. FB

    Cognito

    DynamoDBApp with AWS Mobile SDK

    2.

    4. DynamoDB

    3. Lambda function

    Lambda

  • Followers

    4. DynamoDB-

    1. FB

    6. Push-

    Cognito

    Mobile Analytics

    DynamoDB

    S3

    SNS7. Analytics

    3.

    2. S3

    5. SNS

    App with AWS Mobile

    SDK

  • Lambda

  • Lambda

    JavaScriptNode.js

    Zip Zip

    128MB 64MB CPU

    360

    LambdaIAM Role

    /tmpread/write

  • Node.jsAmazon Linux

    Amazon Linux

    Amazon LinuxAMIEC2http://docs.aws.amazon.com/lambda/latest/dg/lambda-introduction.html

  • OpenCV

    1. LambdaAMIEC2

    2. OSNode.js

    $ sudo yum update $ sudo yum install gcc44 gcc-c++ libgcc44 cmake python26-devel y $ wget http://nodejs.org/dist/v0.10.33/node-v0.10.33.tar.gz $ tar -zxvf node-v0.10.33.tar.gz $ cd node-v0.10.33 && ./configure && make $ sudo make install $ sudo easy_install pip $ pip install numpy

  • OpenCV

    3. $ wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.9/opencv-2.4.9.zip$ mkdir opencv_install$ mkdir opencv_example$ unzip opencv-2.4.9.zip d ./opencv_install/ && cd opencv_install

    4. $ cmake -D CMAKE_BUILD_TYPE=RELEASE -D BUILD_SHARED_LIBS=NO -D CMAKE_INSTALL_PREFIX=~/opencv opencv-2.4.9/

  • OpenCV

    5.

    6. npmnpm installPKG_CONFIG_PATHOpenCVOpenCV

    $ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:~/opencv/lib/pkgconfig/$ npm install prefix=~/opencv_example opencv

    $ make && make install

  • Node.js

  • Timeout

    Controlled termination 1context.done()

    Default termination context.done()

    Process exited before completing request

    process.exit()

    Process exited before completing request

  • Node.js

    /tmp

  • Lambdafreeze

  • AWS Lambda

  • Node.js AWS SDK ImageMagick

    S3DynamoDB

    /tmp

  • handler_nameLambda

    event JSON InvokeAsyncJSON

    context.done

    exports.handler_name = function(event, context) { console.log("value1 = " + event.key1); console.log("value2 = " + event.key2); ... context.done(null, "some message"); }

  • context.done()

    context.done()

    1 null nullCloudWatch

    2 /

  • console.log('Loading event');var aws = require('aws-sdk');var s3 = new aws.S3({apiVersion: '2006-03-01'});exports.handler = function(event, context) { console.log('Received event:'); console.log(JSON.stringify(event, null, ' ')); var bucket = event.Records[0].s3.bucket.name; var key = event.Records[0].s3.object.key; s3.getObject({Bucket:bucket, Key:key}, function(err,data) { if (err) { console.log('error getting object ' + key + ' from bucket ' + bucket + '. Make sure they exist and your bucket is in the same region as this function.'); context.done('error','error getting file'+err); } else { console.log('CONTENT TYPE:',data.ContentType); context.done(null,''); } } );};

  • Lambda

    IAM role

    Zip ZipSDKCLI Zip

    zip -r lambda-sample.zip .

    128MB1GB64MB 1603

  • AWS 3

    Amazon S3 Amazon Kinesis Amazon DynamoDB Stream(Preview)

    Push/Pull2

    JSON

  • Push

    Amazon S3 InvokeAsync 3

  • Pull

    Amazon DynamoDB Amazon Kinesis Lambda

  • S3 AWS LambdaS3

    S3

    Lambda

    DynamoDB DynamoDB

    StreamLambda

    Kinesis AWS SDKCLI

    Kinesis StreamLambda

  • Amazon DynamoDB Console (Preview)

    Amazon S3 Console

  • CLI

    $ aws lambda add-event-source \ --region us-east-1\ --function-name ProcessKinesisRecords \ --role invocation-role-arn \ --event-source kinesis-stream-arn \ --batch-size 100 \

  • S3{ "Records": [ -- "s3": { "s3SchemaVersion": "1.0", "configurationId": "testConfigRule", "bucket": { "name": "sourcebucket", "ownerIdentity": { "principalId": "A3NL1KOZZKExample" }, "arn": "arn:aws:s3:::mybucket" }, "object": { "key": "sourcebucket/HappyFace.jpg", "size": 1024, "eTag": "d41d8cd98f00b204e9800998ecf8427e" } } } ] }

  • Kinesis{ "Records": [ { "awsRegion": "us-east-1", "sequenceNumber": "196800000000000000000374", "partitionKey": "2efdb0ea22685b46993e42a67302a001", "eventSource": "aws:kinesis", "data": "SOME CUSTOM DATA 1" }, { "awsRegion": "us-east-1", "sequenceNumber": "196800000000000000000571", "partitionKey": "2efdb0ea22685b46993e42a67302a003", "eventSource": "aws:kinesis", "data": "{ \"key\": \"value\" }" } ] }

  • IAM

    Invocation RoleExecution Role2 Invocation Role

    Execution Role

    AWS

    IAM IAM

    PushPull

    LambdaAWS Lambda

  • Invocation Role

    Access PolicyTrust Policy

    Push Lambda Trust Policy

    Pull AWS LambdaPull Trust PolicyAWS Lambda

  • Invocation RolePushAccess Policy

    Amazon S3lambda:InvokeAsync

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "*", "Action": [ "lambda:InvokeAsync" ] } ] }

  • Invocation RolePushTrust Policy

    Amazon S3sts:AssumeRole Amazon S3

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals":{ "sts:ExternalId": "arn:aws:s3:::bucket name" } } } ] }

  • Invocation RolePullAccess Policy

    Amazon Kinesis

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "*", "Action": [ "kinesis:ReadStream"] } ] }

  • Invocation RolePullTrust Policy

    AWS Lambdasts:AssumeRole

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

  • ExecutionRole

    AWSIAM Access PolicyTrust Policy2

    LambdaIAMAWS

    Access Policy AWS Amazon CloudWatch Logs Amazon S3

    Trust Policy AWS Lambda

  • Execution RoleAccess Policy

    Amazon CloudWatch Logslogs:*

    { "Statement": [ { "Action": [ "logs:*" ], "Effect": "Allow", "Resource": "arn:aws:logs:*:*:*" } ] }

  • Execution RoleTrust Policy

    AWS Lambda

    { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

  • Lambda

    CloudWatchMetrics

  • exports.handler = function(event, context) { console.log('Received event:'); var bucket = event.Records[0].s3.bucket.name; var key = event.Records[0].s3.object.key; console.log(Bucket: +bucket); console.log(Key: +key);

    Amazon CloudWatch Logs

    Lambda

    /

    Max Memory Used Duration Billed Duration

    console.log

  • Lambda

    Execution rolesLambda

    Invocation roles

    S3DynamoDB

  • Lambda /tmp 512MB

    1024

    1024

    25/

    1 60

    zip 30MB

    zip 250MB

    InvokeAsyncJSON 128KB

  • () 100 $0.20/100(1$0.0000002)

    () 100ms 100ms

    Memory (MB)

    Price per 100ms ($)

    Free tier seconds per month

    128 0.000000208" 3,200,000

    192 0.000000313" 2,133,333

    256 0.000000417" 1,600,000

    320 0.000000521" 1,280,000

    384 0.000000625" 1,066,667

    448 0.000000729" 914,286

    512 0.000000834" 800,000

    576 0.000000938" 711,111

    640 0.000001042" 640,000

    704 0.000001146" 581,818

    768 0.00000125" 533,333

    832 0.000001354" 492,308

    896 0.000001459" 457,143

    960 0.000001563" 426,667

    1024 0.000001667" 400,000

  • https://aws.amazon.com/blogs/compute/

    http://docs.aws.amazon.com/lambda/latest/dg/

  • Run Code in the cloud!