Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
サーバーレスでサービスを
作ってみた話
自己紹介
名前:國井 匡生
(くにい まさお)
所属:株式会社ビズリーチ
HRMOS事業部
職業:雑用、エンジニア
アジェンダ
サーバーレスとは
AWSにおけるサーバーレス アーキテクチャ
住所検索問題
KEN_ALL.CSVとの出会い
KEN_ALL.CSVとの別れ
S3との別れ
ドメインとSSL証明書
API Gatewayの機能
Mailgun
クレジットカード決済
所感
サーバーレス アーキテクチャとは
アプリケーションサーバを自前で管理せず、マネージドサービスを活用してシス
テムを構築するアーキテクチャのこと
サーバーレス アーキテクチャとは
簡単に言うと
IaaSなどいらんのです的な
AWSでいうところのEC2を使わずに頑張るプレイ
サーバーレス アーキテクチャとは
PaaSやSaaSを駆使してシステムを構築する
サーバーレス アーキテクチャとは
アプリケーションはマイクロサービス、SPAのような形になる
サーバーレス アーキテクチャとは
良い点
● このような心配事から解放される
○ OSの選定、保守、管理
○ ハードウェアの故障
○ プロセスの異常終了
○ CPU、メモリ、ストレージなどのリソースの枯渇
○ セキュリティパッチの適用
● スケーラブル
○ アクセスに応じて勝手にスケールする
● 主に従量課金で固定費が少なくすむ
サーバーレスにするとほぼ使うサービス
• API Gateway
• Lambda
• S3
• Cognito
API Gateway
API を作成および管理するためのサービス。
バックエンドにあるリソースとクライアントの中間に立ってAPIとして振る舞う
リバースプロキシ的な役割をする。
API Gatewayの機能
• プロキシ
• バックエンドにはhttp(s)かAWSの各マネージドサービスが使える
• APIキーの発行/認証
• トラフィック管理
• Swaggerからインポート
• APIのSDK作成
• カスタムドメイン
• 証明書にCertificate Managerは使えない
• CloudWatchログ
• ヘッダーはログに出ない
Lambda
Node.js、JVMベース、Pythonで記述された任意のコードをスケージュールやイ
ベントに応じて実行する。
トリガーとなるイベントには以下のようなサービスがある
S3
ストレージサービス。
LambdaやAPI Gatewayからのプライベートアクセスのほか、HTTPを使用したパ
ブリックなアクセスも可能。
サーバーレスの場合はHTML等の静的コンテンツの格納、配信で活躍する。
Cognito
ユーザーの作成、認証、認可を提供する。
クライアントからのTokenを使用したアクセスを可能にする。
既存の認証システムとの統合も可能。
例えば
アップロードした写真を勝手に分類してくれるクラウドアルバムサービスを考え
てみる。
例えば
Cognitoでユーザー管理
例えば
SDKを使用してS3へファイルをアップロード
例えば
S3へのPutイベントを拾い、Lambdaで画像を解析、metadataをDynamoDBに保
存。
例えば
クライアントからAPI Gateway経由でmetadataを取得。
住所検索問題
スタンバイ・カンパニーで郵便番号から住所を検索できないことがあった
データが古い
事業所個別番号が入っていない
なんやかんやあって
サーバーレスで住所検索APIサービスを作ってみた
KEN_ALL.CSVとの出会い
郵便局が提供している郵便番号データのCSVファイル
...
01101,"064 ","0640822","ホッカイドウ","サッポロシチュウオウク","キタ2ジョウニシ(20-28チョウメ)","北海道","札幌市中央区","北二条西(20〜28丁目)",1,0,1,0,0,0
01101,"060 ","0600033","ホッカイドウ","サッポロシチュウオウク","キタ3ジョウヒガシ","北海道","札幌市中央区","北三条東",0,0,1,0,0,0
01101,"060 ","0600003","ホッカイドウ","サッポロシチュウオウク","キタ3ジョウニシ(1-19チョウメ)","北海道","札幌市中央区","北三条西(1〜19丁目)",1,0,1,0,0,0
01101,"064 ","0640823","ホッカイドウ","サッポロシチュウオウク","キタ3ジョウニシ(20-30チョウメ)","北海道","札幌市中央区","北三条西(20〜30丁目)",1,0,1,0,0,0
01101,"060 ","0600034","ホッカイドウ","サッポロシチュウオウク","キタ4ジョウヒガシ(1-8チョウメ)","北海道","札幌市中央区","北四条東(1〜8丁目)",1,0,1,0,0,0
01101,"060 ","0600004","ホッカイドウ","サッポロシチュウオウク","キタ4ジョウニシ(1-19チョウメ)","北海道","札幌市中央区","北四条西(1〜19丁目)",1,0,1,0,0,0
...
当初の想定
CSVファイルを1行づつ読み込んでJSON形式のバラバラなファイルにする
S3のWebホスティング機能を使用して参照可能にする
最終的な形
なぜこんなことに・・・
KEN_ALL.CSVの闇
複数行にまたがっている
...,"6028062",...,"京都市上京区","亀屋町(油小路通上長者町下る、油小路通下長者町上る、油小路通",...
...,"6028062",...,"京都市上京区","中長者町上る、油小路通中長者町下る、上長者町通油小路西入、上長者町通油小
"... ...,"6028062",...,"京都市上京区","路東入)",...
KEN_ALL.CSVの闇
もはや住所じゃない
...,"1600023",...,"ニシシンジュク(ツギノビルヲノゾク)",...,"新宿区","西新宿(次のビルを除く)",...
...,"1630790",...,"ニシシンジュクオダキュウダイイチセイメイビル(チカイ・カイソウフメイ)",...,"新宿区","西新宿小田急第一生命ビル(地階・階層不明)
" ,...
...,"1630701",...,"ニシシンジュクオダキュウダイイチセイメイビル(1カイ)","東京都","新宿区","西新宿小田急第一生命ビル(1階)",...
KEN_ALL.CSVの闇
else的な
01101,"060 ","0600000","ホッカイドウ","サッポロシチュウオウク","イカニケイサイガナイバアイ","北海道","
札幌市中央区","以下に掲載がない場合",0,0,0,0,0,0
KEN_ALL.CSVの闇
差分ファイルがPDF
もぅマヂ無理。。。
KEN_ALL.CSVとの別れ
どうやら何年か前にKEN_ALL.CSVブームがあったらしく、正規化して配布して
いる人がいるらしい情報を入手
素敵やん!
S3との別れ
バラバラにするスクリプトを作ってS3に置こうとしたものの、一向にアップロー
ドが終わらない。
AWSの料金を確認するとS3の無料枠は2,000 Put リクエスト/月 らしい。
郵便番号データは15万件くらい・・・
+ DynamoDB + API Gateway
key-value的なデータだから置く場所には困らない。DynamoDBに入れてみた。
DynamoDBの無料枠は月25 の書き込み/読み込み容量ユニット、250 万回の
Streams 読み込みリクエスト、25 GB のストレージ
ドメインとSSL証明書
これってサービスになるんではと思ったのでドメインを探してみた
post-code.info
なかなかそれっぽいのでそのまま取ってみた。
ドメインとSSL証明書
ついでにSSL証明書も無料で手に入らないか探してみた
怪しい証明書発行サービス(WoSign...)
アドレスバーが赤いまま
Let’s Encript
ワイルドカード証明書が作れない
3ヶ月更新
面倒
AWS Certificate Manager
+ Route53 + CloudFront
初めての課金
ドメイン取得: ¥350(1年間)
Route53:$0.5/month
Certificate Managerのせいで
CloudFrontが必要
+ UI
LPが完成
[D3]サーバーレスでサービスを作ってみた話
+ Lambda
ユーザー毎にAPIキーを発行して認証してみよう
課金するためにはリクエスト回数を集計しないと
→ログを集計すればいいか
→あれ、ログにAPIキーがでない
→Lambdaか
+ mailgun
体裁は整ったので会員登録的なものを考える
会員登録はメールで問い合わせてもらって登録するようにしてみた
クレジットカード決済
FastPayが良いとおすすめされたので、申し込んでみた。
利用規約とか特定商取引法に関するページがないとダメと言われ、審査担当者と
のやりとりが1ヶ月くらい続く。
こうなった
が、
なぜかCloudFront経由でAPI Gatewayが呼べなくな
った
最終的に
所感
• 大体なんでもできる
• 頑張ればHRMOSくらいならサーバーレスにできる
• Lambda用のフレームワークも登場した
• https://github.com/serverless/serverless
• https://github.com/awslabs/chalice
• パズルみたいに組み立てていけるのは面白い
• 怖い
• 管理は緩めでよくなるけど、気づいたら動いてないかった
• 監視はやっぱり必要
• サーバーレスが話題になって結構経つけど、まだ発展途上
• API Gatewayのトラフィック管理機能は8月くらいに付いたばかり

More Related Content

[D3]サーバーレスでサービスを作ってみた話