29
AWS LambdaとAPI Gatewayでサー バレスなシステム構築に踏み出してみる @makinog3 1

AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる

Embed Size (px)

Citation preview

  • AWS LambdaAPI Gateway

    @makinog3

    1

  • pAWS LambdanHello Lambda!n

    pS3pSNS

    pAmazon API GatewaynAPI GatewayLambda

    2

  • AWS Lambdap

    3

  • 4

    Amazon S3

    Amazon SNS

    Amazon Kinesis

    Amazon DynamoDB

  • 5

    .forwardRDB

  • pnnn

    pS3DynamoDBnS3DynamoDB

    pnEC2

    6

  • pnDynamoDB

    nAWS Lambda pNode.jsJava 8nNode.jsJava

    p

    nJava 8 :-P

    7

  • AWS Lambdapn

    p/tmpn

    pImageMagicknS3

    pexec()ngcc

    8

  • Hello Lambda

    9

    Lambda

  • LambdaNode.js

    10

    API GatewayTokyoOregon

    Execution Role

  • LambdaRolepExecution RolenLambda AWS

    nLambda SNS SNS

    pInvocation RolenLambdanLambda

    11

  • 12

    (

    )

    CloudWatch

    Lambda

  • Hello LambdaTEST

    13

  • S3SNS

    14

    S3 SNS

    Lambda

  • S3

    15

  • SNS

    16

  • S3Lambda

    17

  • 18

    console.log('Loading function'); var aws = require('aws-sdk'); var s3 = new aws.S3({ apiVersion: '2006-03-01' });

    var sns = new aws.SNS({ accessKeyId: ACCESS_KEY_ID', secretAccessKey: SECRET_ACCESS_KEY',

    region: REGION' }); exports.handler = function(event, context) {

    //console.log('Received event:', //JSON.stringify(event, null, 2));

    // Get the object from the event and // show its content type var bucket = event.Records[0].s3.bucket.name; var key = event.Records[0].s3.object.key;

    var params = { Bucket: bucket, Key: key };

    s3.getObject(params, function(err, data) { if (err) { console.log(err); var message = "Error getting" +

    " object " + key + " from bucket " + bucket; console.log(message);

    context.fail(message); } else { sns.publish({ Message: 'Got object ' +

    key + ' (' + data.ContentType + ') from bucket ' + bucket,

    Subject: '[ykcloud] Got object', TopicArn: TOPIC_ARN' }, function(err, data){ if(err) throw err;

    else context.fail('Unable + ' to send e-mail'); }); console.log('CONTENT TYPE:,

    data.ContentType); context.succeed(data.ContentType); }

    }); };

  • pAWS LambdaAPI Gateway

    19

    AWS LambdaWeb

    LambdaWeb

    Amazon API Gateway !

  • Amazon API GatewaypLambdaAWSREST APInAWSnnAWSIAMnAPIJavaScriptAndroidiOSSDK

    20

  • /prod/hello

    /prod/hello

    API

    21

    /prod/hello

    GET PUT POST DELETE :

    Stages

    Stages

    StageCloudWatchAPIStage

    Resources

    Methods

  • HelloLambdaAPI

    22

  • HelloLambdaAPI

    23

  • API

    24

  • API

    25

  • Web

    26

    JSON

    JSON

    S3HTMLEC2Web CORS http://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-cors.html

  • 27

    Hello Lambda $(function(){ $("#response").html("Response Values"); $("#button").click( function(){ var url = $("#url_post").val(); var JSONdata = { key1: $("#key1").val(), key2: $("#key2").val(), key3: $("#key3").val() }; $.ajax({ type : 'post', url : url, data : JSON.stringify(JSONdata), contentType: 'application/JSON', dataType : 'JSON', scriptCharset: 'utf-8', success : function(data) { // alert(JSON.stringify(data)); $("#response").html(JSON.stringify(data)); }, error : function(data) { alert("error"); // alert(JSON.stringify(data)); $("#response").html(JSON.stringify(data)); } }); }) })

    Post to HelloLambda API Gateway URL: Key1: Key2: Key3: post

  • pAWS LambdanS3DynamoDBnLambda

    pAmazon API GatewayRESTfulWebn

    n

    p LambdaAPI28

  • p AWS Lambda http://docs.aws.amazon.com/lambda/latest/dg/welcome.htmlp Amazon API Gateway http://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html

    29