Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
HIGOBASHI.AWS 第10回「サーバーレスとデータ分析 ~AWS Lambdaを活用...
Search
yuji nishimura
April 17, 2019
Technology
0
1.3k
HIGOBASHI.AWS 第10回「サーバーレスとデータ分析 ~AWS Lambdaを活用して効率化しよう~」
LambdaでNumpy,Sicpy, OpenCVを使う方法や、Lambda Layerの話をしました
yuji nishimura
April 17, 2019
Tweet
Share
More Decks by yuji nishimura
See All by yuji nishimura
Kinesis Video Streams 最新アップデートの紹介 #reinvent #cmregrowth
ynishimura
0
1.5k
HIGOBASHI.AWS 第12回「AWS CDKのConstruct Libraryを作って 公開してみよう」
ynishimura
0
590
Angularを使って爆速で管理画面を作る
ynishimura
0
2.9k
サーバーレスアーキテクチャで作ったIoTのバックエンドシステムで遭遇したエラーと対処法
ynishimura
0
2.1k
re:Invent2018 IoT系の新サービス・アップデート
ynishimura
0
1.3k
【Developers.IO 2018】IoTを実現するためのAWSのIoT系サービス:分析、セキュリティ管理、組み込み向けサービスもあるで!
ynishimura
2
1.1k
HIGOBASHI.AWS 第6回「Amazon Route53で ドメインを購入して、設定してみよう」
ynishimura
0
1.8k
HIGOBASHI.AWS 第5回「AngularとAWS AppSyncで作るサーバーレスアプリケーション」
ynishimura
0
4k
higobashi.aws 第2回「IoTとサーバーレスとラズパイ」
ynishimura
1
1.5k
Other Decks in Technology
See All in Technology
信頼できる開発プラットフォームをどう作るか?-Governance as Codeと継続的監視/フィードバックが導くPlatform Engineeringの進め方
yuriemori
1
430
認知戦の理解と、市民としての対抗策
hogehuga
0
300
KiroでGameDay開催してみよう(準備編)
yuuuuuuu168
1
120
そのコンポーネント、サーバー?クライアント?App Router開発のモヤモヤを可視化する補助輪
makotot
3
270
ABEMAにおける 生成AI活用の現在地 / The Current Status of Generative AI at ABEMA
dekatotoro
0
630
S3のライフサイクル設計でハマったポイント
mkumada
0
140
プロジェクトマネジメントは不確実性との対話だ
hisashiwatanabe
0
200
サイボウズフロントエンドの横断活動から考える AI時代にできること
mugi_uno
4
1.4k
LLMエージェント時代に適応した開発フロー
hiragram
1
390
Exadata Database Service on Dedicated Infrastructure セキュリティ、ネットワーク、および管理について
oracle4engineer
PRO
1
360
夢の印税生活 / Life on Royalties
tmtms
0
280
つくって納得、つかって実感! 大規模言語モデルことはじめ
recruitengineers
PRO
12
2.7k
Featured
See All Featured
Music & Morning Musume
bryan
46
6.7k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
667
120k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
560
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3.4k
Six Lessons from altMBA
skipperchong
28
4k
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Bash Introduction
62gerente
614
210k
4 Signs Your Business is Dying
shpigford
184
22k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
50k
Building Adaptive Systems
keathley
43
2.7k
GraphQLとの向き合い方2022年版
quramy
49
14k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
820
Transcript
)*(0#"4)*"84 ଜ༞ೋ αʔόʔϨεͱσʔλੳ d"84-BNCEBΛ׆༻ͯ͠ޮԽ͠Α͏d
ࣗݾհ wଜ༞ೋ wαʔόʔϨε։ൃ෦ wݩγε wೖࣾϲ݄ w"84ྺϲ݄
w౦ژ͔Βେࡕʹ6λʔϯస৬ wલ৬*41ͷձࣾͰސ٬γεςϜอक
AWS Lambda 使ったことある人✋
numpy,scipy,pandasとかで データ分析してる人✋
ࠓճͷ༰ͷఆ͢Δλʔήοτ ॳ৺ऀ͚Ͱ͢ -BNCEBͬͨ͜ͱͳ͍͚ͲͬͯΈ͍ͨ σʔλੳͷલॲཧͱָ͔͍ͨ͠ ຖճಉ͡ॲཧ͍ͯ͠ΔͷͰޮԽ͍ͨ͠
࣍ wαʔόʔϨεͱ w"84-BNCEBͱ wϥΠϒϥϦΛؚΉ"84-BNCEBͷσϓϩΠ wπʔϧΛͬͯσϓϩΠΛָʹ͢Δ w৽ػೳʮ-BNCEB-BZFSTʯΛͬͯݮ wσϞ w·ͱΊ
サーバーレスとは
ͬ͘͟Γઆ໌͢Δͱ ϚωʔδυαʔϏε 04.8ͳͲӡ༻ཧपΓϕϯμ͕࣮ࢪ શैྔܕͷ՝ۚ ͚ͬͨͩͷ՝ۚ ߴՄ༻ੑ ԽɺεέʔϧΞοϓΛؾʹ͠ͳ͍͍ͯ͘
AWS Lambdaとは
"84-BNCEBͷಛ αʔόʔཧͤͣίʔυΛ࣮ߦͰ͖Δɹɹ ίϯϐϡʔςΟϯάαʔϏε ΠϕϯυυϦϒϯ ࣗಈతʹεέʔϧ ϛϦඵ୯Ґͷ՝ۚ ෳͷϥϯλΠϜΛαϙʔτɿ1ZUIPOରԠ
どんな場面で使えるか
Ϣʔεέʔε σʔλॲཧ όονॲཧʢҎʣ ϦΞϧλΠϜϑΝΠϧॲཧ நग़ɺมɺϩʔυ όοΫΤϯυ *P5όοΫΤϯυ ϞόΠϧόοΫΤϯυ
ΣϒΞϓϦέʔγϣϯ https://aws.amazon.com/jp/lambda/
データ分析時の データの前処理に使えそう
AWS Lambdaの料金
શͳैྔ՝ۚ ϦΫΤετճʹର͢Δ՝ۚ ݄ສ݅·Ͱແྉ ສ݅͋ͨΓ ࣮ߦ࣌ؒʹର͢Δ՝ۚ https://aws.amazon.com/jp/lambda/pricing/ ϝϞϦʢ.#ʣ ݄ͷແྉʢඵʣ
ϛϦඵ୯ҐͷՁ֨ʢ64%ʣ ʜ ʜ ʜ
AWS Lambda (ϚωʔδυαʔϏε)ʹ ੍ݶ͕͋Δ ϋϚΓϙΠϯτ
ओཁͳ੍ݶ Ϧιʔε ੍ݶ λΠϜΞτ TFD σϓϩΠύοέʔ δ
.# [JQѹॖࡁɺΞοϓϩʔυ .# ίϯιʔϧΤσΟλ .# ϨΠϠʔ ϝϞϦ .#͔Β.#·Ͱ UNQετϨʔδ .# https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/limits.html
AWS Lambdaで NumPy・SciPyを使ってみる
ライブラリを含めた Lambdaのデプロイがめんどう はじめにぶつかる壁
ϥΠϒϥϦΛؚ·ͳ͍߹ ίʔυཧͱ͔ແࢹ͢ΕɺϚωίϯ্Ͱ ݁Մೳ
ϥΠϒϥϦΛؚΊΔ߹ ϥΠϒϥϦؚΊͯ[JQʹݻΊͯσϓϩΠ ͢Δඞཁ͕͋Δ ίʔυΛमਖ਼͢Δͨͼʹ[JQʹݻΊͯɹɹ σϓϩΠ͢Δඞཁ͕͋Δ
zipに固めるところで 気をつけるポイント
ؾΛ͚ͭΔϙΠϯτͦͷ̍ JNQPSU͢Δࡍͷύεʹҙ [JQΛ࡞Δલʹ ύοέʔδԼʹϥΠϒϥϦϑΝΠϧΛஔ͘ ͳͲͯ͠σϓϩΠޙͰϋϯυϥ͔Βɹɹɹ ϥΠϒϥϦΛݺͼग़ͤΔΑ͏ʹ͕ඞཁ pip install
-r requirements.txt -t . ex) -t ͰϥΠϒϥϦͷΠϯετʔϧઌΛࢦఆ https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-python-how-to-create-deployment-package.html
ؾΛ͚ͭΔϙΠϯτͦͷ̎ ͭͷσϓϩΠύοέʔδʹ༰ྔ੍ݶ͕͋Δ ʢݱࡏɺ.#ʣ σʔλॲཧʹΑ͘ΘΕΔϥΠϒϥϦ༰ྔ͕ େ͖ΊͳͷͰ࠷దԽ͕ඞཁ https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/limits.html $ mkdir
numpy $ pip install numpy -t numpy $ du -sh numpy 82M numpy ex) numpy ͷ༰ྔΛ֬ೝ
ؾΛ͚ͭΔϙΠϯτͦͷ 04ґଘ͕͋ΔϥΠϒϥϦ"NB[POɹ -JOVYڥͰϏϧυͨ͠ϑΝΠϧΛ[JQʹ ؚΊΔ -BNCEBؔͷ࣮ߦڥͱ΄΅ಉͷ %PDLFSΠϝʔδΛͬͯϏϧυ docker run
--rm -v $(pwd):/var/task -w /var/task lambci/lambda:build-python3.6 \ pip install -r requirements.txt -t ${OUTPUT_DIR} ex) dockerΛͬͯϏϧυ͢ΔεΫϦϓτྫͷൈਮ
毎回手動ではしんどいので パッケージの作成を自動化したい 芽生える気持ち
スクリプト作ってもいいですが メンテとか管理したくない もっとスマートにしたい 次に芽生える気持ち
ツールを使って面倒なところは ツールに任せましょう 解決案
ࠓճ༻͢Δπʔϧ 4FSWFSMFTT'SBNFXPSL ͱϓϥάΠϯͷ 4FSWFSMFTT1ZUIPO3FRVJSFNFOUT https://github.com/UnitedIncome/serverless-python-requirements
Ͳ͏ͬͯ͏ͷ͔ TFSWFSMFTTZNMʹઃఆΛهࡌ͢Δ͚ͩ ίϚϯυҰͭͰύοέʔδͱσϓϩΠ·Ͱ࣮ࢪ custom: pythonRequirements: dockerizePip: non-linux slim:
true zip: true plugins: - serverless-python-requirements $ sls deploy dockerͰϏϧυ ࠷దԽͯ͠༰ྔݮ zipѹॖߴΊ༰ྔݮ
Ͳ͏ͬͯ͏ͷ͔ ੍ݶͰOVNQZ TDJQZΛύοέʔδ Serverless: Uploading CloudFormation file to
S3... Serverless: Uploading artifacts... Serverless: Uploading service .zip file to S3 (42.02 MB)... Serverless: Validating template... Serverless: Updating Stack... Serverless: Checking Stack update progress... ......... https://dev.classmethod.jp/cloud/serverless-framework-lambda-numpy-scipy/ ৄࡉԼهϒϩάΛࢀর
実際使ってみると ちょっと使い勝手悪い できたけど、ただ。。
͍উख͕ѱ͍ͳͱײͨ͡ͱ͜Ζ ͪΐͬͱͨ͠ίʔυमਖ਼ͷͨͼʹύοέʔ δΛ࡞Δॲཧ͕ೖͬͯσϓϩΠʹ͔͔࣌ؒ Δ Ϛωʔδϝϯτίϯιʔϧ͔Βίʔυͷ֬ ೝमਖ਼͕Ͱ͖ͳ͍ʢύοέʔδαΠζ͕ .#Ҏ্ͷͱ͖දࣔ͞Εͳ͍ʣ
AWS Lambdaの新機能 「Lambda Layers」
-BNCEB-BZFSTͱ ڈͷ݄SF*OWFOUൃද͞Εͨػೳ ෳͷ-BNCEBؔͰڞ༗͢ΔΧελϜίʔυ ϥΠϒϥϦΛϨΠϠͱͯ͠࡞Ͱ͖ ଞͷ-BNCEB͔ؔΒϨΠϠͱͯ͠ར༻Ͱ͖Δ ϥΠϒϥϦͳͲΛϨΠϠʹ͓͚ͯ͠ σϓϩΠύοέʔδʹؚΊͳͯ͘Α͍
ライブラリをLayerにして デプロイパッケージを軽量化
そもそも、NumPy・SciPyは AWSよりLayerが提供されている
"84ΑΓఏڙ͞ΕΔϨΠϠ ϨΠϠʔબը໘ΑΓ͡Ί͔ΒબͰ͖Δ
Pandasなど自分でLayerを デプロイするときは Lambdaと同じでめんどう
Layerのデプロイも Serverless Frameworkと プラグインを使えば簡単
Ͳ͏Δʁ ྲྀΕͷ֓ཁ w-BZFS༻ͱ-BZFSΛར༻͢Δ-BNCEB༻Ͱ͚Δ w-BZFSΛσϓϩΠ͢ΔͱࣗಈͰ$GOͷ0VUQVUʹ "3/͕ઃఆ͞ΕΔ w-BZFSΛར༻͢Δ-BNCEBͰ0VUQVUΛࢀর͠ ͯσϓϩΠ͢Δ͜ͱͰɺඥ͚ͮͯσϓϩΠͰ͖Δ
-BZFS༻ͷTFSWFSMFTTZNMʢશͯʣ service: layer provider: name: aws runtime: python3.7
deploymentBucket: name: layer-test-dev-serverless-demo package: exclude: - "**" custom: pythonRequirements: usePipenv: true dockerizePip: true layer: description: opencv plugins: - serverless-python-requirements ϥΠϒϥϦΛLayerͱͯ͠σϓϩΠ
σϓϩΠํ๏ ؔΛࢦఆ͠ͳͯ͘σϓϩΠՄೳ TMTEFQMPZͰ-BZFSΛσϓϩΠՄೳ 0VUQVUʹ-BZFSͷ"3/ͱόʔδϣϯؚ͕·ΕΔ
-BZFSΛར༻͢Δ-BNCEB DGOͷ0VUQVUΛࢀর͢ΔػೳΛར༻ functions: hello: handler: handler.hello layers: -
${cf:layer-dev.PythonRequirementsLambdaLayerQualifiedArn} ex) serverless.ymlͷҰ෦ൈਮ Layer͕ඥ͍ͨঢ়ଶͰσϓϩΠ
デモ
外部ライブラリ OpenCVを使って顔検出する Lambda(Layer機能使用)
ߏਤ AWS Lambda Amazon Simple Storage Service (S3)
ᶃը૾Ξοϓϩʔυ ᶄτϦΨʔ࣮ߦ ᶅը૾ॲཧͨ͠ը૾อଘ
ݟͯ΄͍͠ϙΠϯτ 4ʹϑΝΠϧΛΞοϓσʔτ͢Δͱࣗಈ࣮ߦ -BNCEBͰ0QFO$7͕͏͍͍ͯ͝Δ αʔόʔϨεߏ Ϛωίϯ͔Βίʔυͷ֬ೝͰ͖Δ σϓϩΠ࣌ʹσϓϩΠύοέʔδ༰ྔ
まとめ
·ͱΊ w"84-BNCEBσʔλੳͷલॲཧʹ͑ͦ͏ w͚ͬͨͩͷ՝ۚͳͷͰίετ wϥΠϒϥϦΛؚΊͨσϓϩΠπʔϧΛͬͯ ָΛ͠Α͏ w-BZFSΛ׆༻ͯ͠ɺΑΓ͍উखΑ͘͠Α͏ w؆୯ʹσʔλॲཧͷΈΛ࡞ΕΔ
さいごに
Lambdaをうまく使って コストや作業の効率化 してみませんか
None