SlideShare ist ein Scribd-Unternehmen logo
1 von 33
Downloaden Sie, um offline zu lesen
AWS Lambda
with Java/Scala
@hajimeni
#渋谷Java 第十二回
アジェンダ
• 自己紹介
• AWS Lambdaについて
• JavaとかScalaでやってみた
• 料金とか
自己紹介
• 西山はじめ( twitter、github: @hajimeni )
• 株式会社ビズリーチ
• スタンバイ事業部。C側サイト、内部API、社内管理ツール開発 etc…
• 言語
• Java, C#, JavaScript(CoffeeScript), Scala, (python) etc…
• やってること(やってきたこと)
• 基本的にWebアプリケーション開発
• RDB(Oracle, MySQL)の運用などに携わることが多い。
• インフラまわりもちょっと
• AWS全般、Solr、MongoDB、Cassandra、memcached, Redis
• 最近は hubot とか pythonとかでScriptつくることも。
Amazon Aurora
• 先日リリース(2015/07/28)
• MySQL互換のRDSサービス
• MySQLのJDBCドライバで接続可能
• ダウンタイム0でマイグレーション
• ストレージの自動拡張(64TBまで)
• MySQL5.6の5倍速い(Amazon調べ)
• 東京リージョン(ap-northeast-1)にはまだない
• 今日はAWS AuroraLambdaの話です。
AWS Lambda とは
• AWSのイベント発生をトリガーにして、あらかじめ登録しておいたコードを実行できるサービス
• Event Sources
• S3
• Kinesis
• DynamoDB Streams(Preview)
• Dynamo
• Cognito(eu-west1, us-east1 only)
• 使用可能なコード
• Java8
• Node.js
•
S3
DynamoStreams
Kinesis
SNS
Cognito
Amazon Echo
Alexa Skills kit
イメージ
Javaで
• Eclipse Plugin
• AWS Toolkitを使うと楽
http://docs.aws.amazon.com/ja_jp/AWSToolkitEclipse/latest/GettingStartedGuide/Welcome.html
コード例
package com.github.hajimeni.lambda.java;
import java.util.HashMap;
import com.amazonaws.services.lambda.runtime.Context;
import com.amazonaws.services.lambda.runtime.RequestHandler;
import com.amazonaws.services.lambda.runtime.events.S3Event;
public class LambdaFunctionHandler implements
RequestHandler<S3Event, Object> {
@Override
public Object handleRequest(S3Event input, Context context) {
context.getLogger().log("Input: " + input);
HashMap<String, String> map = new HashMap<>();
map.put("result", "OK");
return map;
}
}
戻り値は自由に定義できる。
API Gatewayと組み合わせるなら
JSON。
MapやListはJSONに変換してくれる
AWS Lambdaに登録
• Projectを右クリック
CloudFrontのLog
書き込み、S3への
アクセス用のRole
が必要
ここのMemoryサ
イズで100msあた
りの金額が違う。
登録結果
• 24MB・・・
• CodeSize = jar のサイズ
• 10MB超えるとS3にアップロードして設定
テスト実行
テスト結果
戻り値
実行時間と課金対象となった時間
ログ出力
Event source
ObjectCreated
(Post, Put, Copy, Upload)
Object Removed
(Delete)
※多分昨日か一昨日に追加
実際にS3にPUT
• LogはCloudWatchのLogs
• /aws/lambda/${function_name}
• 時間や実際に使用したMaxMemory使用量が表
示される
Scalaで
• sbt でプロジェクト作成
• build.sbt に追記
• project/plugins.sbtに sbt-assembly 追加
libraryDependencies ++= Seq(
"com.amazonaws" % "aws-lambda-java-core" % "1.0.0",
"com.amazonaws" % "aws-lambda-java-events" % "1.0.0"
)
// sbt 0.13.6+
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.13.0")
// sbt 0.13.6
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")
コードのサンプル
package com.example
import com.amazonaws.services.lambda.runtime.events.S3Event
import scala.collection.JavaConverters._
/**
* Created by nishiyama on 2015/07/26.
*/
class S3PutLogger {
def logS3Meta(event: S3Event): java.util.List[String] = {
val keyNames = event.getRecords.asScala.map{ record =>
record.getS3.getObject.getKey
}
keyNames.foreach(println)
keyNames.asJava
}
}
戻り値の型はJavaにしたほうが
APIGatewayを使いやすい
標準出力はCloudWatch
で見れる
登録
• one-jarを生成
• 1ファイル(1jar)しかLambdaには設定出来ない
• 10MBまでなら直接アップロード可能。
• それ以上はS3においてから設定する
• AWS Consoleで設定
• sbt pluginが欲しいかも。(% sbt publish-lambda みたいな)
% sbt assembly
並列で処理
• 複数のファイルを同時にS3にアップロード
• (試しに10個)
• 1個処理したログ
• 何個か同時に処理したログ
• S3のEvent通知
• →Pushモデルなので、順番は保証されない
• →DynamoDB Streams, Kinesis, SNSはPull
モデル。順番を保証。
• http://docs.aws.amazon.com/lambda/
latest/dg/intro-invocation-modes.html
実行時間とか
•
1回目 連続した2回め以降
Java8 100ms ∼ 数百ms 数ms
Node.js 数ms ∼数十ms 数ms
※HelloWorldのログ出力のみ
※それぞれ10回実行した後、再登録しなおして計測
1回目のブレ幅は大きいので参考情報。
実行環境
[ { model: 'Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz',
speed: 2800,
times: { user: 77900, nice: 0, sys: 43500, idle: 95220900, irq: 0 } },
{ model: 'Intel(R) Xeon(R) CPU E5-2680 v2 @ 2.80GHz',
speed: 2800,
times: { user: 81800, nice: 0, sys: 46000, idle: 95543700, irq: 0 } } ]
OS:3.14.44-32.39.amzn1.x86_64
Memory: 3768.2890625 MB
HostName: ip-10-0-x-x
CPUとMemoryから
c3.large インスタンスで実行されている
Memory設定変えても同じHostの場合がある
→ECS?
課金ポイント
• リクエスト数
• 毎月100万件まで無料、その後$0.2/100万件
• 実行時間(512MBの場合)
• 800,000秒まで無料( -> 9.25日 )
• その後、$0.000000834/100ms
• → $0.03/1h
• 1プロセスで1ヶ月ずっと動かしっぱなし -> 約$15
各メモリ毎料金
メモリ (MB) 1 か月の無料 100 ミリ秒単位の 1 秒 1 時間 無料枠 時間
128 3,200,000 0.000000208 0.00000208 0.007488 889
192 2,133,333 0.000000313 0.00000313 0.011268 592
256 1,600,000 0.000000417 0.00000417 0.015012 444
320 1,280,000 0.000000521 0.00000521 0.018756 255
384 1,066,667 0.000000625 0.00000625 0.0225 296
448 914,286 0.000000729 0.00000729 0.026244 254
512 800,000 0.000000834 0.00000834 0.030024 222
576 711,111 0.000000938 0.00000938 0.033768 198
640 640,000 0.000001042 0.00001042 0.037512 178
704 581,818 0.000001146 0.00001146 0.041256 162
768 533,333 0.000001250 0.000012500 0.045000000 148
832 492,308 0.000001354 0.00001354 0.048744 137
896 457,143 0.000001459 0.00001459 0.052524 127
960 426,667 0.000001563 0.00001563 0.056268 119
1024 400,000 0.000001667 0.00001667 0.060012 111
1088 376,471 0.000001771 0.00001771 0.063756 105
1152 334,641 0.000001875 0.00001875 0.0675 93
1216 281,803 0.000001980 0.000019800 0.071280000 78
1280 225,442 0.000002084 0.00002084 0.075024 63
1344 171,765 0.000002188 0.00002188 0.078768 48
1408 124,920 0.000002292 0.00002292 0.082512 35
1472 86,901 0.000002396 0.00002396 0.086256 24
1536 57,934 0.000002501 0.00002501 0.090036 16
追加でかかる料金
• EC2からのデータ転送
• S3のリクエスト、データ転送、ファイルサイズ
• DynamoDBのストレージ、スループット、デー
タ転送
EC2との単純比較
• 24h/1ヶ月稼働し続けていた場合
1hあたり 1ヶ月
EC2 c3.xlarge $0.105 $75
EC2 t2.micro $0.013 $9.36
Lambda 128MB x 1 $0.007 $0(※)
Lambda 128MB x 2 $0.014 $4.1
Lambda 1536MB x 1 $0.09 $64
※本当に計算するときは、
Request数 x 1Requestあたりの処理時間
• 例: 月間500万 Request。
• 1リクエストあたりの処理時間 = 500ms
• 1,024MB の Lambda(無料枠40万秒)
• (5,000,000 * 0.5 - 400,000) * 10 *
0.000001667 = $35
制限事項
• 常駐処理をするにはむいていない
• タイムアウトは 60s までなので長い処理はできない
• →非同期にしても処理時間が60sまで
• VPC内のEC2やRDSなどを参照にするにはPublicからのアクセスを許可す
る必要がある。(現時点では制限と書いてあるからもしかしたら・・・)
• Node.jsの方が気軽
• 地味にImageMagicだけNative Libraryが入ってる
• http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/current-
supported-versions.html
まとめ
• 割りと気軽に使える
• ファイルサイズは基本大きくなる(Java8の場合)
• 初回の実行時間はおそい(場合もある)
• 金額計算は、実行時間依存。
• 今日はできていないけど、API GateWayのバッ
クエンドにもなる。
API Gateway
REST API
(http://example.com/${stage}/${api_name})
参考
• Writing AWS Lambda Functions in Scala
• https://aws.amazon.com/jp/blogs/compute/
writing-aws-lambda-functions-in-scala/
• Lambda Function が Java で書けるようになりま
した!
• http://dev.classmethod.jp/cloud/aws/
lambda-function-in-java/

Weitere ähnliche Inhalte

Was ist angesagt?

AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
都元ダイスケ Miyamoto
 

Was ist angesagt? (20)

Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -
Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -
Big DataとContainerとStream - AWSでのクラスタ構成とストリーム処理 -
 
AWSで実現するクラウドネイティブなアプリ開発のポイント
AWSで実現するクラウドネイティブなアプリ開発のポイントAWSで実現するクラウドネイティブなアプリ開発のポイント
AWSで実現するクラウドネイティブなアプリ開発のポイント
 
IoTデザインパターン 2015 JAWS沖縄
IoTデザインパターン 2015 JAWS沖縄IoTデザインパターン 2015 JAWS沖縄
IoTデザインパターン 2015 JAWS沖縄
 
Morning Session - AWS Serverless Ways
Morning Session - AWS Serverless WaysMorning Session - AWS Serverless Ways
Morning Session - AWS Serverless Ways
 
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
AWSにおけるバッチ処理の ベストプラクティス - Developers.IO Meetup 05
 
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
AWS Black Belt Online Seminar AWS上でのスピードと高可用性を両立したゲームインフラの構築と事例
 
Application Deployment on AWS
Application Deployment on AWSApplication Deployment on AWS
Application Deployment on AWS
 
AWS Search Services
AWS Search ServicesAWS Search Services
AWS Search Services
 
AWS OpsWorksハンズオン
AWS OpsWorksハンズオンAWS OpsWorksハンズオン
AWS OpsWorksハンズオン
 
BCPに活かせ!一撃 CloudFormation
BCPに活かせ!一撃 CloudFormationBCPに活かせ!一撃 CloudFormation
BCPに活かせ!一撃 CloudFormation
 
Amazon Elasticsearch Serviceを利用したAWSのログ活用
Amazon Elasticsearch Serviceを利用したAWSのログ活用Amazon Elasticsearch Serviceを利用したAWSのログ活用
Amazon Elasticsearch Serviceを利用したAWSのログ活用
 
Ivsctonightandday2016winter moringsession awsreinvent2016recap
Ivsctonightandday2016winter moringsession awsreinvent2016recapIvsctonightandday2016winter moringsession awsreinvent2016recap
Ivsctonightandday2016winter moringsession awsreinvent2016recap
 
AWS初心者向けWebinar AWSでBig Data活用
AWS初心者向けWebinar AWSでBig Data活用AWS初心者向けWebinar AWSでBig Data活用
AWS初心者向けWebinar AWSでBig Data活用
 
Pydata Amazon Kinesisのご紹介
Pydata Amazon Kinesisのご紹介Pydata Amazon Kinesisのご紹介
Pydata Amazon Kinesisのご紹介
 
AWS Black Belt Techシリーズ Amazon Kinesis
AWS Black Belt Techシリーズ  Amazon KinesisAWS Black Belt Techシリーズ  Amazon Kinesis
AWS Black Belt Techシリーズ Amazon Kinesis
 
AWS初心者向けWebinar AWSクラウドにおけるVDIソリューション
AWS初心者向けWebinar AWSクラウドにおけるVDIソリューションAWS初心者向けWebinar AWSクラウドにおけるVDIソリューション
AWS初心者向けWebinar AWSクラウドにおけるVDIソリューション
 
AWS Black Belt Techシリーズ AWS Directory Service
AWS Black Belt Techシリーズ AWS Directory ServiceAWS Black Belt Techシリーズ AWS Directory Service
AWS Black Belt Techシリーズ AWS Directory Service
 
Serverless Architecture on AWS(20151023版)
Serverless Architecture on AWS(20151023版)Serverless Architecture on AWS(20151023版)
Serverless Architecture on AWS(20151023版)
 
Kinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみたKinesis Firehoseを使ってみた
Kinesis Firehoseを使ってみた
 
JAWS re:Mote 2015 Nagoya
JAWS re:Mote 2015 NagoyaJAWS re:Mote 2015 Nagoya
JAWS re:Mote 2015 Nagoya
 

Andere mochten auch (6)

Introduction to Retrofit
Introduction to RetrofitIntroduction to Retrofit
Introduction to Retrofit
 
Hello, Type Systems! - Introduction to Featherweight Java
Hello, Type Systems! - Introduction to Featherweight JavaHello, Type Systems! - Introduction to Featherweight Java
Hello, Type Systems! - Introduction to Featherweight Java
 
Scalaのオブジェクトの話
Scalaのオブジェクトの話Scalaのオブジェクトの話
Scalaのオブジェクトの話
 
Javaの資格試験(OCJ-P)を取って何を学んだか
Javaの資格試験(OCJ-P)を取って何を学んだかJavaの資格試験(OCJ-P)を取って何を学んだか
Javaの資格試験(OCJ-P)を取って何を学んだか
 
Spring Boot 1.3 News #渋谷Java
Spring Boot 1.3 News #渋谷JavaSpring Boot 1.3 News #渋谷Java
Spring Boot 1.3 News #渋谷Java
 
Introducing Serverless Computing (20160802)
Introducing Serverless Computing (20160802)Introducing Serverless Computing (20160802)
Introducing Serverless Computing (20160802)
 

Ähnlich wie AWS Lambda with Java/Scala #渋谷Java 第十二回

AWSクラウド利用料算出の参考資料
AWSクラウド利用料算出の参考資料AWSクラウド利用料算出の参考資料
AWSクラウド利用料算出の参考資料
SORACOM, INC
 
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
Masakazu Muraoka
 
分散KVSをサービス化してみた ~Okuyama(KVS)もFusion-IO(ioDrive)もあるんだよ~
分散KVSをサービス化してみた ~Okuyama(KVS)もFusion-IO(ioDrive)もあるんだよ~分散KVSをサービス化してみた ~Okuyama(KVS)もFusion-IO(ioDrive)もあるんだよ~
分散KVSをサービス化してみた ~Okuyama(KVS)もFusion-IO(ioDrive)もあるんだよ~
Masahito Zembutsu
 
Moot2013 moca ver0.3
Moot2013 moca ver0.3Moot2013 moca ver0.3
Moot2013 moca ver0.3
科 黄
 

Ähnlich wie AWS Lambda with Java/Scala #渋谷Java 第十二回 (20)

速習 AWS Lambda
速習 AWS Lambda速習 AWS Lambda
速習 AWS Lambda
 
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデート
AWS Black Belt Techシリーズ  AWS re:Invent 2014 最新情報のアップデートAWS Black Belt Techシリーズ  AWS re:Invent 2014 最新情報のアップデート
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデート
 
【JAWS-UG Sapporo】はじめてのAWSワークショップ 概説
【JAWS-UG Sapporo】はじめてのAWSワークショップ 概説【JAWS-UG Sapporo】はじめてのAWSワークショップ 概説
【JAWS-UG Sapporo】はじめてのAWSワークショップ 概説
 
AWSのNoSQL入門
AWSのNoSQL入門AWSのNoSQL入門
AWSのNoSQL入門
 
Zynga
ZyngaZynga
Zynga
 
Aws privte20110406 arai
Aws privte20110406 araiAws privte20110406 arai
Aws privte20110406 arai
 
AWS 0からはじめるハンズオン
AWS 0からはじめるハンズオンAWS 0からはじめるハンズオン
AWS 0からはじめるハンズオン
 
Web時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメWeb時代の大富豪的プログラミングのススメ
Web時代の大富豪的プログラミングのススメ
 
AWSクラウド利用料算出の参考資料
AWSクラウド利用料算出の参考資料AWSクラウド利用料算出の参考資料
AWSクラウド利用料算出の参考資料
 
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップスScraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
Scraping withawsAWSを利用してスクレイピングの悩みを解決するチップス
 
なぜソーシャルゲームはクラウドなのか? ~AWSの成功事例を紐解く~
なぜソーシャルゲームはクラウドなのか? ~AWSの成功事例を紐解く~なぜソーシャルゲームはクラウドなのか? ~AWSの成功事例を紐解く~
なぜソーシャルゲームはクラウドなのか? ~AWSの成功事例を紐解く~
 
We Should Know About in this SocialNetwork Era 2011_1112
We Should Know About in this SocialNetwork Era 2011_1112We Should Know About in this SocialNetwork Era 2011_1112
We Should Know About in this SocialNetwork Era 2011_1112
 
Amazon Web Services 最新事例集
Amazon Web Services 最新事例集Amazon Web Services 最新事例集
Amazon Web Services 最新事例集
 
JAWS DAYS 2015
JAWS DAYS 2015JAWS DAYS 2015
JAWS DAYS 2015
 
Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会Rdbms起点で考えると見えない世界 okuyama勉強会
Rdbms起点で考えると見えない世界 okuyama勉強会
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
 
AWS re:Invent2019 Overview & New Releases Summary for Game
AWS re:Invent2019 Overview &New Releases Summary for GameAWS re:Invent2019 Overview &New Releases Summary for Game
AWS re:Invent2019 Overview & New Releases Summary for Game
 
Serverless frameworkでお手軽lambda運用 at #nseg #93
Serverless frameworkでお手軽lambda運用 at #nseg #93Serverless frameworkでお手軽lambda運用 at #nseg #93
Serverless frameworkでお手軽lambda運用 at #nseg #93
 
分散KVSをサービス化してみた ~Okuyama(KVS)もFusion-IO(ioDrive)もあるんだよ~
分散KVSをサービス化してみた ~Okuyama(KVS)もFusion-IO(ioDrive)もあるんだよ~分散KVSをサービス化してみた ~Okuyama(KVS)もFusion-IO(ioDrive)もあるんだよ~
分散KVSをサービス化してみた ~Okuyama(KVS)もFusion-IO(ioDrive)もあるんだよ~
 
Moot2013 moca ver0.3
Moot2013 moca ver0.3Moot2013 moca ver0.3
Moot2013 moca ver0.3
 

AWS Lambda with Java/Scala #渋谷Java 第十二回