Slide 1

Slide 1 text

Deep Dive AWS Lambda 2018/07/27 HIGOBASHI.AWS#5

Slide 2

Slide 2 text

Agenda - 自己紹介 - AWS Lambda - 事例 - まとめ

Slide 3

Slide 3 text

自己紹介

Slide 4

Slide 4 text

$ aws myperson describe { “name”: “rito(田又 利土)”, “job”: “software developer”, “company”: “株式会社エイチームライフスタイル”, “skills”: [“Ruby(on Rails)”, “Nodejs”, “Reactjs”, “Docker”, “kubernetes”], “twitter”: “@chimame_rt”, “github”: “chimame” }

Slide 5

Slide 5 text

AWS Lambda

Slide 6

Slide 6 text

AWS Lambda AWS上で提供されている、 ”サーバーレス”のAPI実行環境。自前のサー バーを立てる必要なく、Lambda上でコードが実行される。 ● インフラ周りの管理が不要 サーバレスなので、「サーバを管理する」ということがそもそも不要。 ● 実行環境のオートスケール サーバ負荷による実行環境のオートスケールを Lambda自身が行い、管理者が意識する必要はない。

Slide 7

Slide 7 text

ここで1つの疑問

Slide 8

Slide 8 text

“サーバーレス”っていうけどさ、実 際はサーバあるんでしょ?

Slide 9

Slide 9 text

こんなコード仕込んで調べてみた。 exports.handler = (event, context, callback) => { const exec = require('child_process').exec // 子プロセスを起動する event.commands.forEach(command => { exec(command, (error, stdout, stderr) => { // 子プロセスでコマンドを実行する if (!error) { console.log('standard out: ' + stdout) // 標準出力結果をログに出力する } else { console.log(`error code: ${error.code} err: ${error}`) } }) }) return callback(null, JSON.stringify({ result: 'OK'})) }

Slide 10

Slide 10 text

コマンドの実施 $ ls -lah / dr-xr-xr-x 2 root root 4.0K Jun 22 12:57 bin dr-xr-xr-x 2 root root 4.0K Jun 22 12:56 boot drwx------ 4 root root 4.0K Jun 22 12:57 builddir drwxr-xr-x 2 root root 4.0K Jul 26 14:59 dev drwxr-xr-x 60 root root 4.0K Jun 22 13:00 etc drwxr-xr-x 2 root root 4.0K Jan 6 2012 home drwxr-xr-x 2 root root 4.0K Jan 6 2012 mnt drwxr-xr-x 2 root root 4.0K Jan 6 2012 selinux ~~~~~ drwx------ 2 sbx_user1059 487 4.0K Jul 26 15:02 tmp drwxr-xr-x 13 root root 4.0K Jun 22 12:55 usr drwxr-xr-x 22 root root 4.0K Jul 26 14:59 var

Slide 11

Slide 11 text

コマンドの実施 $ pwd /var/task $ df -aTh Filesystem Type Size Used Avail Use% Mounted on /dev/xvda1 ext4 7.8G 3.6G 4.2G 47% / /dev/xvda1 ext4 7.8G 3.6G 4.2G 47% /dev /dev/loop0 ext4 526M 440K 514M 1% /tmp none proc 0 0 0 - /proc /dev/xvda1 ext4 7.8G 3.6G 4.2G 47% /proc/sys/kernel/random/boot_id /dev/xvda1 ext4 7.8G 3.6G 4.2G 47% /var/runtime /dev/xvda1 ext4 7.8G 3.6G 4.2G 47% /var/lang /dev/loop1 squashfs 128K 128K 0 100% /var/task

Slide 12

Slide 12 text

コマンドの実施 $ cat /etc/system-release Amazon Linux AMI release 2017.03 $ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND 488 1 0.0 3.1 1117936 31544 ? Ssl 15:02 0:00 /var/lang/bin/node --expose-gc --max-semi-space-size=6 --max-old-space-size=115 /var/runtime/node_modules/awslambda/index.js 488 19 0.0 0.0 0 0 ? Z 15:12 0:00 [sh] 488 20 0.0 0.0 0 0 ? Z 15:12 0:00 [ls] 488 21 0.0 0.2 117216 2520 ? R 15:12 0:00 ps aux 488 22 0.0 1.0 1117936 10452 ? R 15:12 0:00 /var/lang/bin/node --expose-gc --max-semi-space-size=6 --max-old-space-size=115 /var/runtime/node_modules/awslambda/index.js

Slide 13

Slide 13 text

さらなる疑問

Slide 14

Slide 14 text

“Amazon linux”で動いているのは わかったけど、オートスケールする のってどうやってるの?

Slide 15

Slide 15 text

オートスケールといえば

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

こればっかりはわからんの中の人に聞いてみました。 「AWS Lambdaってコンテナで動いてるの?」 ⇒Yes(Dockerじゃないぽい) ただし、この質問をした時に”こいつそんなこと聞いて何考えてん だ?”的な雰囲気になったので突っ込んで聞けなかった。

Slide 18

Slide 18 text

事例

Slide 19

Slide 19 text

検索エンジンの結果がとても重要

Slide 20

Slide 20 text

なので複数の方式を用いて検索エン ジンの結果を取得している

Slide 21

Slide 21 text

検索エンジンの結果取得方法 ● 各検索エンジンのSearch APIを使用 Googleならば「Google Custom Search API」というものが提供されており、検索 結果をJSONで取得することが可能 ● 各検索サイト上での検索結果を使用 上記のSearch APIが提供されていなかったり、APIから取得できる以外の情報を 取得したい場合に直接検索サイト上での検索結果を取得(スクレイピング)

Slide 22

Slide 22 text

検索エンジンの結果取得方法 ● 各検索エンジンのSearch APIを使用 Googleならば「Google Custom Search API」というものが提供されており、検索 結果をJSONで取得することが可能 ● 各検索サイト上での検索結果を使用 上記のSearch APIが提供されていなかったり、APIから取得できる以外の情報を 取得したい場合に直接検索サイト上での検索結果を取得(スクレイピング) こっちは超えないといけないも のが多い

Slide 23

Slide 23 text

検索サイト上での検索結果取得で注 意しないといけないこと

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

短期間 で 同一IP からアクセスは 機械的アクセスとして遮断される

Slide 26

Slide 26 text

回避方法 ● 長期に渡って検索結果を取得する 短期間がダメならば長期間(例えば取得のインターバルを長くすること)で取得す る ● 複数のIP(発信元)から取得するようにする サーバを複数台用意し、複数のIPから取得するようにする

Slide 27

Slide 27 text

● 長期に渡って検索結果を取得する 短期間がダメならば長期間(例えば取得のインターバルを長くすること)で取得す る ● 複数のIP(発信元)から取得するようにする サーバを複数台用意し、複数のIPから取得するようにする 回避方法 要件にもよるけど、待てないし …

Slide 28

Slide 28 text

● 長期に渡って検索結果を取得する 短期間がダメならば長期間(例えば取得のインターバルを長くすること)で取得す る ● 複数のIP(発信元)から取得するようにする サーバを複数台用意し、複数のIPから取得するようにする 回避方法 そのためにわざわざサーバを 複数台用意するのは…

Slide 29

Slide 29 text

AWS Lambda これらの問題を解決するために、使用しています。

Slide 30

Slide 30 text

AWS Lambdaの特徴(おさらい) ● コンテナで動いている 実行都度コンテナが作成/実行されると実行ホストも変わりIPも変わる ● オートスケールする オートスケールするということは実行するホストが変わればIPも変わる

Slide 31

Slide 31 text

2つの疑問

Slide 32

Slide 32 text

● 疑問1 実行都度、コンテナを配置・実行してる の? ● 疑問2 オートスケールってどれくらいやったらス ケールするの?

Slide 33

Slide 33 text

AWS Lambdaにおけるコンテナ再配置計測 ● 調べる方法 冒頭に紹介したコマンドを実行Lambdaを一定期間毎に”curl inet-ip.info”を実行させGlobal IPを取得し変化を計測 ● 計測間隔 インターバルを初回は5分として、次回以降に5分ずつ増加さ せ、5分後、15分後、20分後…という計測

Slide 34

Slide 34 text

AWS Lambdaにおけるコンテナ再配置計測 ● 計測結果 計測時間 Global IP 20時25分29秒(初回 13.115.170.77 20時30分31秒(5分後 13.115.170.77 20時40分35秒(10分後 13.115.170.77 20時55分40秒(15分後 13.115.170.77 21時15分42秒(20分後 13.115.170.77 21時40分46秒(25分後 13.115.170.77 22時10分51秒(30分後 13.231.194.161 22時45分00秒(35分後 13.231.153.34

Slide 35

Slide 35 text

AWS Lambdaにおけるコンテナ再配置方法 ● 一定時間経過してからLambdaを呼び出す。 先の検証結果より、同一のLambdaを一定期間内に再度呼び出しても、コンテナ の再配置は行われないので、一度呼び出したLambdaは30分間使用しない。 ● 同一処理のLambdaを複数用意し、コンテナ再配置時間まで は別のLambdaを使用する。 同一Lambdaを呼び出すのにインターバルが必要なので、同一処理の別 Lambdaを準備してそれを使用するようにすると上記対策のデメリットを消せる。

Slide 36

Slide 36 text

AWS Lambdaにおけるオートスケール計測 ● 調べる方法 冒頭に紹介したコマンドを実行Lambdaに”curl inet-ip.info” を実行させGlobal IPを取得し変化を計測 さらに、該当の Lambdaを並列実行 させる ● 並列実行方法 1つのLambdaから複数回に亘り別Lambdaを実行させる

Slide 37

Slide 37 text

AWS Lambdaにおけるオートスケール計測結果 ● 計測結果 thread用のLambdaを介 して実行するとスケール しやすい。 左記の図では400個を同 時実行しているが、大体 3段組み100個くらいでス ケールする。

Slide 38

Slide 38 text

AWS Lambdaにおけるオートスケール方法 ● Lambdaを多重実行する 先の例で示したように同時100実行くらいのLambdaであれば簡単にスケールす る。ただし、アカウント毎のAWS Lambdaの同時実行数上限を必要に応じて、あ げる必要がある。 ● 多重実行の場合は取得結果を検討する必要がある 同時実行されている複数のLambdaの結果を受け取るには受け取る側の負荷を 考慮する必要がある。

Slide 39

Slide 39 text

まとめ

Slide 40

Slide 40 text

AWS Lambdaって ● 意外と中を見れます ● コンテナで動いてる ● 起動までは結構かかる 特性を踏まえて使用する

Slide 41

Slide 41 text

AWS Lambdaって ● 意外と中を見れます ● コンテナで動いてる ● 起動までは結構かかる 特性を踏まえて使用する DoS攻撃には使っちゃ ダメですよ

Slide 42

Slide 42 text

ご清聴 ありがとうございました rito@chimame_rt