Weitere ähnliche Inhalte Ähnlich wie AWS Lambda Update (20) Mehr von Keisuke Nishitani (19) AWS Lambda Update7. Bring your own code
• Node.jsで書かれたコードを実⾏行行
• コード内では以下も可能
– スレッド/プロセスの⽣生成
– バッチスクリプトや何らかの実⾏行行
ファイルの実⾏行行
– /tmpのread/write
• 各種ライブラリも利利⽤用可能
– ネイティブライブラリも可能
– 利利⽤用するライブラリを⼀一緒にアップ
ロード
9. 発表された内容
• ついにGAに
• AWS Mobile SDKのサポート
• Synchronous Invoke
• イベントソースの追加
• アクセスモデルの簡潔化
• リソースへのクロスアカウントアクセス
• 複数のメトリクスとAPIのエンハンス
• コンソールの改良良
10. AWS Lambda now Generally Available
• デフォルトの制限がより⼤大きくなりました
– 同時リクエスト数が100リクエストに(*)
– アカウントにおける1秒あたりのリクエスト数が1000に(*)
– Invoke時のリクエストボディのサイズが6MBに
*制限緩和可能
• プレビュー表記が外れました
– プレビュー期間中のフィードバックを元にしたアップデート
– ストリームとファンクションが1:1からn:nに
– プログラミングモデルの改善
– 利利⽤用できるリージョンは変更更なし
11. モバイルバックエンドとしてのAWS Lambda
• AWS Mobile SDKのサポート
– AWS Mobile SDK for iOS
– AWS Mobile SDK for Android
• 新しいInvokeモデルのサポート
– RequestResponse
– 簡単・即座にスケーラブルなバックエンドとして利利⽤用可能
13. 同期呼び出しコード例例(JavaScript)
var params = {
IdentityPoolId: "Cognito Identity Pool ID”,
};
AWS.config.region = 'us-east-1’;
AWS.config.credentials = new AWS.CognitoIdentityCredentials(params);
AWS.config.credentials.get(function(err) {
if (!err) {
var event = {
'key': 'value’
};
var params = {
FunctionName: 'Sample’,
InvocationType: 'RequestResponse’,
LogType: 'Tail’,
Payload: JSON.stringify(event)
};
var lambda = new AWS.Lambda();
lambda.invoke(params, function(err, data) {
if (err){
console.log(err, err.stack);
}else{
console.log(data.Payload);
}
});
} else {
console.log("Error:" + err);
}
});
16. 新しいイベントソース
• Amazon SNS
– ⾮非常にご要望の多かった機能
– イベントソースとしてSNSのトピックを指定可能に
– 通知先としてSNSをサポートしているAWSの他サービスとのイ
ンテグレーションが可能に
例例:CloudWatchのalarmをトリガーに
Amazon SNS Lambda function
17. 新しいイベントソース
• Amazon Cognito
– Cognito Syncにおけるデータセットの同期のタイミングで
Lambdaファンクションをトリガーできるように
– ゲームのステータスアップデート時に検証してレスポンスする
ようなことが可能に
Amazon Cognito Lambda function
18. contextパラメータの変更更
• context.succeed(Object result)
– ファンクションとコールバックの正常終了了とする場合
– ファンクションの実⾏行行結果をJSON.stringifyコンパチの形式でresultとして渡す(オプショ
ン)
– InvocationタイプがEventの場合、CloudWatch LogsのLogストリームにresultをメッセー
ジ出⼒力力
– InvocaktionタイプがRequestResponseの場合、resultがレスポンスボディとしてセットさ
れる。同時にLogストリームにも出⼒力力
• context.fail (Object error)
– ファンクションとコールバックの実⾏行行結果としてエラーとする場合
– 実⾏行行結果をerrorとして渡すことができる(オプション)
– Errorがnull以外の場合、レスポンスヘッダ(X-‐‑‒Amz-‐‑‒Function-‐‑‒Error-‐‑‒Message)およびレ
スポンスボディ(errorMessage)としてセットされ、Logストリームにも出⼒力力される
19. contextパラメータの変更更
• context.done (String message, Object result)
– ファンクションを終了了させる場合
– エラーのサマリをmessageとして渡す(オプション)
– 実⾏行行結果をresultとしてJSON.stringifyコンパチ形式で渡す(オプション)
– messageに値が⼊入っている場合、Lambdaはエラーとみなす
– InvocationタイプがEventの場合、⾃自動的にmessageとresultをCloudWatch
LogsのLogストリームに出⼒力力する
– InvocaktionタイプがRequestResponseの場合、以下の挙動となる
• Messageがnullの場合、resultの⽂文字列列表現がレスポンスボディとしてセットされる
• Messageがnullでない場合、resultの⽂文字列列表現をX-‐‑‒Amz-‐‑‒Function-‐‑‒Error-‐‑‒Message
というレスポンスヘッダとしてセットし、レスポンスボディとしてerrorがセットされ
る
• 引数としてmessage飲みであった場合、その値がレスポンスヘッダ(X-‐‑‒Amz-‐‑‒
Function-‐‑‒Error-‐‑‒Message)およびレスポンスボディとしてセットされる
21. コード例例
console.log('Loading function');
var aws = require('aws-sdk');
var s3 = new aws.S3({apiVersion: '2006-03-01'});
exports.handler = function(event, context) {
console.log('Received event:', JSON.stringify(event, null, 2));
//渡されたイベントの情報からオブジェクトを取得しContentTypeを出力
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.fail('Error', "Error getting file: " + err);
} else {
console.log('CONTENT TYPE:', data.ContentType);
context.succeed();
}
});
};
22. 新しいパーミッションモデル
• 従来のInvocation Roleの指定は不不要に
• ExecutionパーミッションとInvocationパーミッション
の2種類に
– Invocationパーミッション
• イベントソースがLambdaとやり取りするのに必要
• Invocationモデルによる、Pull型の場合のみ
• Execution Role(後述)もしくはリソースポリシーとして指定
– Executionパーミッション
• ファンクションがどのAWSのリソースにどういったアクションを⾏行行えるか
• 実際の細かい権限はIAMロールとして⽤用意し、Execution Roleとして設定する
23. Execution Role例例(イベントソースがKinesisの場
合)
• Kinesisの場合、Pullモデ
ルとなるため、Lambda
がKinesisにポーリングで
きるよう権限を与える
• Lambdaの
InvokeFunctionというア
クションの許可も必要
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"lambda:InvokeFunction"
],
"Resource": [
"*"
]
},
{
"Effect": "Allow",
"Action": [
"kinesis:GetRecords",
"kinesis:GetShardIterator",
"kinesis:DescribeStream",
"kinesis:ListStreams",
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}
29. " Web・モバイルのアプリ開発者向けイベント(AWS Summitと併催)
" みんな⼤大好きGithubの共同創業者によるKeynoteあります
" GithubとAmazonのサービス開発の裏裏側とかも聞けちゃいます
" 伊藤直也さん、⼤大場光⼀一郎郎さん、増井雄⼀一郎郎さん等著名登壇者も多数
" Developers Nightという交流流パーティもあります
http://www.awssummit.tokyo/devcon.html
6⽉月2⽇日、3⽇日はデブコンへ!