Weitere ähnliche Inhalte
Ähnlich wie AWS Lambda with Java/Scala #渋谷Java 第十二回 (20)
AWS Lambda with Java/Scala #渋谷Java 第十二回
- 3. 自己紹介
• 西山はじめ( 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つくることも。
- 6. AWS Lambda とは
• AWSのイベント発生をトリガーにして、あらかじめ登録しておいたコードを実行できるサービス
• Event Sources
• S3
• Kinesis
• DynamoDB Streams(Preview)
• Dynamo
• Cognito(eu-west1, us-east1 only)
• 使用可能なコード
• Java8
• Node.js
- 8. Javaで
• Eclipse Plugin
• AWS Toolkitを使うと楽
http://docs.aws.amazon.com/ja_jp/AWSToolkitEclipse/latest/GettingStartedGuide/Welcome.html
- 9. コード例
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に変換してくれる
- 17. 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")
- 24. 実行環境
[ { 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?
- 26. 各メモリ毎料金
メモリ (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
- 28. 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あたりの処理時間
- 29. • 例: 月間500万 Request。
• 1リクエストあたりの処理時間 = 500ms
• 1,024MB の Lambda(無料枠40万秒)
• (5,000,000 * 0.5 - 400,000) * 10 *
0.000001667 = $35
- 30. 制限事項
• 常駐処理をするにはむいていない
• タイムアウトは 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
- 33. 参考
• 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/