SlideShare une entreprise Scribd logo
1  sur  61
2017/03/11 ハンズラボ 株式会社
JAWS DAYS 2017 AWSワークショップ
AWSで始める
サーバレスな
RESTful API システム
Copyright © 2017. All rights reserved.
Copyright © 2017 All rights reserved.1
ハンズオンで使用するファイル
・以下から圧縮ファイルをダウンロードして下さい
https://s3-ap-northeast-1.amazonaws.com
/hands-lab-handson/jawsdays_handson.zip
・解凍すると以下の4フォルダがあります
/API Gateway
(API Gatewayの設定用テキスト)
/Demo
(動作確認用のフロントの静的ファイル)
/DynamoDB
(DynamoDBのテーブル構築用テキスト)
/Lambda
(Lambda関数の作成用テキスト)
Copyright © 2017 All rights reserved.2
ハンズラボ株式会社
• 情シス部門
 東急ハンズの各種システムの内製開発と運用保守
• 外販
 自社開発の経験を活かした受託開発、内製支援
東急ハンズのシステム子会社
自己紹介
• 名前:加藤 雅之
• 所属:ハンズラボ株式会社
• 担当: 東急ハンズ
- AWSインフラ、IT
統制
ハンズラボ 外販
- AWS構築運用支援
等
Copyright © 2017 All rights reserved.4
AWS Samurai 2015 / 2016を連続受賞
2015 長谷川 2016 青木
Copyright © 2017 All rights reserved.5
今日の内容
サーバレス(Serverless)とは
RESTful APIについて
4つのRESTの原則
設計でのポイント
BaaSとFaaS
AWSのサーバレス
SPA(Single Page Application)のすゝめ
サーバレスとの相性
フロントエンドとの完全分離
Copyright © 2017 All rights reserved.6
今日の内容
hands - on
1.DynamoDBのテーブル作成
2.Lambda実行用ロールの作成
3.Lambda実装
4.API Gateway の作成とデプロイ
5.動作確認
6.S3へ静的ファイルの設置
7.Cloudfrontでキャシュ作成
Copyright © 2017 All rights reserved.7
サーバレス(Serverless)とは
冗長性と可用性が担保される様なインフラの構築運用や、OSやミド
ルウェアを気にする必要が無い、開発に集中出来るアーキテクチャー
BaaS(バックエンドサービス)
データベースや認証、メッセージング等のサービス
FaaS(Function as a Service)
必要な物はコードのみで処理を実行させる
注意:サーバは存在します
Copyright © 2017 All rights reserved.8
主に使用されるAWSのサーバレス
Amazon S3(ファイルストレージ)
Amazon Cloudfront(コンテンツデリバリーネットワーク)
Amazon DynamoDB(NoSQLデータベース)
Amazon API Gateway(アプリケーションインターフェース)
AWS Lambda(コード実行サービス)
Amazon Cognito(認証認可サービス)
Amazon SQS(メッセージキューイング) 等々。。。
特に定義は無いですが、
EC2インスタンスが影に見えない事
Copyright © 2017 All rights reserved.9
RESTful APIとは
REST( Representational State Transfer )の原則に沿った形で設計され
たAPI(Application Programming Interface)
その1 ステートレス性
他のリクエスト情報から完全に分離している
その2 統一インターフェース
HTTP定義通りのメソッドを使用する
その3 アドレス可能性
URIで表されるユニークなアドレスを持つ
その4 接続性
別のリンクを含めて辿る事が出来る
Copyright © 2017 All rights reserved.10
その1 ステートレス性
セッション情報等のクライアント側の状態を持たず、他のリクエスト情報か
らも完全に分離されている。
ステートフルとステートレスの違いは、オライリーでRESTfulの本を監訳し
ている方の有名なブログが分かりやすい。
http://yohei-y.blogspot.jp/2007/10/blog-post.html
客:Aセットください。
店員:サイドメニューは?
客:ポテトで
店員:ドリンクは?
客:コーラで
店員:以上で良いですか?
客:はい
客:Aセットください。
店員:サイドメニューは?
客:Aセットをポテトで
店員:ドリンクは?
客:Aセットをポテトとコーラで
店員:以上で良いですか?
客:Aセットをポテトとコーラで。以上
ステートレスステートフル
Copyright © 2017 All rights reserved.11
その2 統一インターフェース
処理 HTTPメソッド SQL CRUD操作
取得 GET SELECT READ
登録 POST INSERT CREATE
更新 PUT UPDATE UPDATE
削除 DELETE DELETE DELETE
PUTしたIDがない場合はCreateとなる
POSTはID指定が出来ないCREATE
CRUDとSQLとの比較
操作は定義通りのHTTPメソッドで
Copyright © 2017 All rights reserved.12
その3 アドレス可能性
URI(URL / URN)にて簡単に指し示す事が出来る
ユニークなアドレスを持つ
URI (Uniform Resource Identifier) 識別子
名前とアドレスを識別する書き方
URL (Uniform Resource Locator) 住所
場所を示す書き方のルールでWebアドレスで用いられる
URN (Uniform Resource Name) 名前
名前を永続的に識別する書き方のルールでISBN等がある
言語や実装依存の拡張子やパスを含めない
→ 環境が変わっても同じURIで動作
Copyright © 2017 All rights reserved.13
その4 接続性
リソースの中に関連性を持つURIのハイパーメディアリンクを含む
事が出来る。
もちろん無理にリンクを設ける必要はない
例えば、商品購入リストのリソースの中に、個別商品のハイ
パーメディアリンク(URI)が記載されていれば接続性を保持して
いる事になる。
Copyright © 2017 All rights reserved.14
API設計で最初にすること
まずは、とにかくシンプルに何をどうするを考える
何 = リソース(情報)の洗い出し
どうする = CRUD(httpメソッド)
シンプル = リソースの関連性を単純化する
Copyright © 2017 All rights reserved.15
API設計でのポイント
・リソース名をなるべく具体的な複数形の名詞にする
・バージョニングをどうするかを考える
おすすめはURIのパスに含める。他にはQueryパラメータやヘッダ等もある。
・メッセージフォーマットを決める
おすすめはJSON。他にはXML等も
・ドメインはAPIと分かりやすい物が良い
・URIを見ただけでリソースの関係性が分かるようにする
・リソースの階層は2階層くらいまで
https://api.hands-lab.com/v2/users
ユーザー一覧
https://api.hands-lab.com/v1/users/15/
ID15 ユーザーの指定
https://api.hands-lab.com/v2/articles/321/comments
ID 321記事のコメント一覧
Copyright © 2017 All rights reserved.16
SPA(Single Page Application)のすゝめ
単一ページで構成されるWebアプリケーション
主にHTMLとJavascriptで構成されており、DOM操作でページ切り替
えやAjax非同期更新を行う
AngularやReactやVue.js等々のフレームワークやライブラリがある
細かく非同期で更新をかけたいSPAと、疎結合でマイクロサービス化
されているRESTful APIは相性が良い
UI/UXをフロントエンドに任せることで、うまく分離して作業を進める
事が出来る。
またAPIとのやり取りをリソース情報のみに徹底する事は、アプリ対
応等に派生した場合も別対処する必要は無い。
Copyright © 2017 All rights reserved.17
ハンズオン
Let’s hands - on
1.DynamoDBのテーブル作成
2.Lambda実行用ロールの作成
3.Lambda実装
4.API Gateway の作成とデプロイ
5.動作確認
〜 以下、補足説明 〜
6.S3へ静的ファイルの設置
7.Cloudfrontでキャシュ作成
Copyright © 2017 All rights reserved.18
DynamoDB サービスを開く
マネイジメントコンソールにログインしたら、左上の
「サービス」メニューをクリック
データベースグループにある「DynamoDB」をクリック
Copyright © 2017 All rights reserved.19
DynamoDB テーブル作成
「テーブルの作成」ボタンをク
リック
テーブル名
→ handson_db
プライマリーキー
→ id
プライマリーキー 属性
→ 文字列
テーブル設定
→ デフォルト設定の仕様
保存ボタンでテーブル作成
Copyright © 2017 All rights reserved.20
DynamoDB テーブル情報の確認
概要タブが選択されている事を確認
右の様な画面で
テーブル名
プライマリーパーティションキー
テーブルの状態
を作成した通りか確認
Copyright © 2017 All rights reserved.21
DynamoDB アラームの確認
アラームタブを選択
handson_dbの
ReadCapacity
WriteCapacity
のアラームが作成されている事を確認
Copyright © 2017 All rights reserved.22
DynamoDB キャパシティの確認
容量タブを選択
読み込み容量ユニット及び、書き込み容量ユニットがそれぞれ 5 となっている事を確認
Copyright © 2017 All rights reserved.23
DynamoDB 初期データ挿入1
項目タブを選択
項目の作成ボタンをクリック
項目の作成画面が開いたら左上の、選択項目から
Text を選択
※ 1参考画像
テキスト入力形式画面が開いたら、
DynamoDB JSON
のチェックボックスをチェック
※ 2参考画像
2 参考画像
1 参考画像
Copyright © 2017 All rights reserved.24
DynamoDB 初期データ挿入2
ハンズオンファイルから
DynamoDBフォルダ内にある
DynamoDB_sampleData_xxx.txt
をテキストエディタで開く
※xxx はmac / win の環境です
テキストの内容を、DynamoDB JSONの
画面に全て貼り付け
左側の行数箇所にエラーが出ていない事を
確認したら、保存
Copyright © 2017 All rights reserved.25
DynamoDB 初期データ確認
正しく反映されているか内容を確認
修正したいデータにチェックをつけて、アクションから編集も可能です
Copyright © 2017 All rights reserved.26
Lambda実行ロール IAMサービスを開く
左上のサービスをクリック
セキュリティ、アイデンティティグループにあるIAMをクリック
Copyright © 2017 All rights reserved.27
Lambda実行ロール 新しいロールの作成1
IAMサービス画面に入ったら、左側のロールをクリック
「新しいロールの作成」ボタンをクリック
※IAMの権限作成は強力な権限です。
うまく開かない等がありましたらチュー
ターをお呼び下さい
Copyright © 2017 All rights reserved.28
Lambda実行ロール 新しいロールの作成2
ロール名の設定で
lambda_exec
と入力し、次へをクリック
ロールタイプの選択で
AWS Lambdaの右にある
選択 をクリック
Copyright © 2017 All rights reserved.29
Lambda実行ロール 新しいロールの作成3
AmazonDynamoDB
FullAccess
と
AWSLambda
BasicExecutionRole
の2つのみをチェックして、
次のステップをクリック
設定した通りの内容になってい
るかを確認して、
ロールの作成ボタンをクリック
Copyright © 2017 All rights reserved.30
Lambda実装 サービスを開く
左上のサービスをクリック
コンピューティンググループにあるLambdaをクリック
Copyright © 2017 All rights reserved.31
Lambda実装 作成画面を開く
まだ作成した事がない場合は、
「今すぐ始める」
ボタンをクリック
既に作成した事がある場合は、
「Lambda関数の作成」
ボタンをクリック
Copyright © 2017 All rights reserved.32
Lambda実装 関数の作成1
設計図の選択画面から画面中央にある
ブランク関数
をクリック
トリガーの設定では、そのまま次へ
Copyright © 2017 All rights reserved.33
Lambda実装 関数の作成2
関数の設定フェーズにて
名前
→ api_get_handson
説明
→ データ個別取得
ランタイム
→ Node.js 4.3
Copyright © 2017 All rights reserved.34
Lambda実装 関数の作成3
Lambda 関数のコード フェーズにて
コードエントリタイプ
→ コードをインラインで編集
ハンズオンファイルから
Lambdaフォルダ内にある
Lambda_sampleCode_xxx.txt
をテキストエディタで開く
※xxx はmac / win の環境です
テキストの内容を、
コードの箇所に全て貼り付け
左側の行数箇所にエラーが出ていない
事を確認
Copyright © 2017 All rights reserved.35
Lambda実装 関数の作成4
環境変数の入力箇所のそれぞれに
→ TABLE_NAME → handson_db
ハンドラ
index.handler → index.get
ロール
→ 既存のロールを選択
既存のロール
→ lambda_exec
Copyright © 2017 All rights reserved.36
Lambda実装 関数の作成5
詳細設定をクリックしタイムアウトを10秒へ
次へをクリックして、内容が設定した通りか確認をしたら「関数の作成」
以下のように「あめでとうございます」となっているか確認
Copyright © 2017 All rights reserved.37
Lambda実装 関数の作成6
左側のダッシュボードをクリックし、
同様の作業( 「作成画面を開く」 から「関数の作成5」)を
以下を変更しながら繰り返す
関数の作成2にて
名前
→ api_getall_handson
説明
→ データ一括取得
関数の作成4にて
ハンドラ
index.handler → index.getall
Copyright © 2017 All rights reserved.38
Lambda実装 関数の作成7
関数の作成2にて
名前
→ api_put_handson
説明
→ データ登録
関数の作成4にて
ハンドラ
index.handler → index.put
左側のダッシュボードをクリックし、
同様の作業( 「作成画面を開く」 から「関数の作成5」)を
以下を変更しながら繰り返す
Copyright © 2017 All rights reserved.39
Lambda実装 関数の作成8
関数の作成2にて
名前
→ api_delete_handson
説明
→ データ削除
関数の作成4にて
ハンドラ
index.handler → index.delete
左側のダッシュボードをクリックし、
同様の作業( 「作成画面を開く」 から「関数の作成5」)を
以下を変更しながら繰り返す
Copyright © 2017 All rights reserved.40
Lambda実装 関数の作成9
左側の関数をクリックし、4つのlambda関数が登録されている事を確認
Copyright © 2017 All rights reserved.41
API Gateway の作成 サービスを開く
左上のサービスをクリック
アプリケーションサービスグループにあるAPI Gatewayをクリック
Copyright © 2017 All rights reserved.42
API Gateway の作成 作成画面を開く
まだ作成した事がない場合は、
「今すぐ始める」
ボタンをクリック
既に作成した事がある場合は、
「APIの作成」
ボタンをクリック
Copyright © 2017 All rights reserved.43
API Gateway の作成 APIのインポート
Swagger から インポートをチェックして、右のSwaggerファイルの選択から
ハンズオンファイルのAPI Gatewayフォルダ内にある
apiGateway_sample.yml
を選択し、インポート
Copyright © 2017 All rights reserved.44
API Gateway の作成 Lambdaの紐付け1
リソースメニューの /resouce のGETをクリックし、
統合タイプ Lambda関数
Lambdaプロキシ統合の仕様にチェック
Lambda関数 api_getall_handson
で保存する。権限追加のダイアログはそのままOKを行う
Copyright © 2017 All rights reserved.45
API Gateway の作成 Lambdaの紐付け2
リソースメニューの /resouce /{resourceId} のDELETEをクリックし、
統合タイプ Lambda関数
Lambdaプロキシ統合の仕様にチェック
Lambda関数 api_delete_handson
で保存する。権限追加のダイアログはそのままOKを行う
Copyright © 2017 All rights reserved.46
API Gateway の作成 Lambdaの紐付け3
リソースメニューの /resouce /{resourceId} のGETをクリックし、
統合タイプ Lambda関数
Lambdaプロキシ統合の仕様にチェック
Lambda関数 api_get_handson
で保存する。権限追加のダイアログはそのままOKを行う
Copyright © 2017 All rights reserved.47
API Gateway の作成 Lambdaの紐付け4
リソースメニューの /resouce /{resourceId} のPUTをクリックし、
統合タイプ Lambda関数
Lambdaプロキシ統合の仕様にチェック
Lambda関数 api_put_handson
で保存する。権限追加のダイアログはそのままOKを行う
Copyright © 2017 All rights reserved.48
API Gateway の作成 Mockの紐付け1
リソースメニューの /resouce のOPTIONSをクリックし、
統合タイプ Mock
で保存する。
Copyright © 2017 All rights reserved.49
API Gateway の作成 Mockの紐付け2
リソースメニューのの /resouce /{resourceId} のOPTIONSをクリックし、
統合タイプ Mock
で保存する。
Copyright © 2017 All rights reserved.50
API Gateway の作成 CORSの設定1
リソースメニューの /resouce 配下のOPTIONSをクリックし、
右下の統合レスポンスをクリック
Copyright © 2017 All rights reserved.51
API Gateway の作成 CORSの設定2
表内の左端にある三角(▶)をクリックし、更にヘッダーのマッピングの三角をクリック
Copyright © 2017 All rights reserved.52
API Gateway の作成 CORSの設定3
レスポンスヘッダー3種の右端にある鉛筆クリックし、マッピングの値を、
ハンズオンファイルのAPI Gatewayフォルダ内にある
apiGateway_options.txt
の通りに入力。入力後は右端のチェックマークをクリックで確定。
※前後のシングルクオーテーションも必要です。
同様の作業を リソースメニューの /resouce / {responceID }のOPTIONS
に対しても行って下さい。
Copyright © 2017 All rights reserved.53
API Gateway の作成 デプロイ
アクションのAPIのデプロイをクリック 新しいステージを選択し
ステージ名
→ handson
でデプロイをクリック
Copyright © 2017 All rights reserved.54
API Gateway の作成 エンドポイントを確認
エンドポイント(URL)をメモ
Copyright © 2017 All rights reserved.55
動作確認 エンドポイントの登録
ハンズオンファイルのDEMOフォルダ内にある
Index.htmlをテキストエディタで開く
139行目の API_endpoint を先程メモしたエンドポイントに書き換えて保存
Copyright © 2017 All rights reserved.56
動作確認
ハンズオンファイルのDEMOフォルダ内にある
Index.htmlをブラウザで開いて色々と動作を確認
Copyright © 2017 All rights reserved.57
動作詳細
Index.htmlの初回読み込み時及び、各タブ選択時
→ https://APIGatewayエンドポイント/resource/ GETメソッド
(api_getall_handson Lambda)
GETタブ内のGETボタン
→ https://APIGatewayエンドポイント/resource/{指定ID}/ GETメソッド
(api_get_handson Lambda)
PUTタブ内のPUTボタン
→ https://APIGatewayエンドポイント/resource/{指定ID}/ PUTメソッド
(api_put_handson Lambda)
DELETEタブ内のDELETEボタン
→ https://APIGatewayエンドポイント/resource/{指定ID}/ DELETEメソッド
(api_delete_handson Lambda)
Copyright © 2017 All rights reserved.58
時間の関係上、本日は省略しますが
クライアントでの動作にて問題が無いことを確認しましたら、
以下を実行する事で完全なサーバレスでの動作になります。
・動作検証済みのDEMOフォルダ内容をS3のバケットにアップロード
・対象のバケットに対してのキャッシュ配信をCloudFrontにて設定
※S3はCloudFrontからのみのアクセス許可を行うと良い
更に、Route53にてドメインを取得しCloudFrontへDNSを向け、
Certificate Managerにて証明書を取得しCloudFrontへ紐付ければ、
AWSのみで完結するサーバレスの基本形が完成します。
そこからはCognitoと連携させてログイン機能(認証認可)を行ったり、WAFやKMSと連携させてセキュアにし
てみたり、アイデア次第で様々な機能を持ったシステムを構築してく事が可能です。
Copyright © 2017 All rights reserved.59
最後に
サーバレスでもシステム運用は必要です。
もちろんステートレスな構成が故の、デプロイの難しさやログの追尾
性等の問題があります。
魔法の様な銀の弾丸では無いが、特性にマッチした部分で活用出来
るようになると非常に有効なシステムとなります。
多少無理でも大丈夫そうなら是非サーバレスで!
大事なことは「やっていく気持ち」
Copyright © 2017 All rights reserved.60
そんなエンジニアを募集中!
求むエンジニア!
ハンズラボは積極的に技術者採用中です。

Contenu connexe

Tendances

知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について健一 辰濱
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いota42y
 
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video StreamsAmazon Web Services Japan
 
データ分析基盤を支えるエンジニアリング
データ分析基盤を支えるエンジニアリングデータ分析基盤を支えるエンジニアリング
データ分析基盤を支えるエンジニアリングRecruit Lifestyle Co., Ltd.
 
実践 Amazon KMS #cmdevio2015
実践 Amazon KMS #cmdevio2015実践 Amazon KMS #cmdevio2015
実践 Amazon KMS #cmdevio2015y torazuka
 
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019Tokoroten Nakayama
 
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017Yusuke Suzuki
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
IntuneとWSUSを使ってWindows Updateをやってみる。
IntuneとWSUSを使ってWindows Updateをやってみる。IntuneとWSUSを使ってWindows Updateをやってみる。
IntuneとWSUSを使ってWindows Updateをやってみる。shotayamamura1
 
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanフロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanItsuki Kuroda
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話NipponAlgorithm
 
JAWS-UG初心者支部 リザーブドインスタンス買ってみた
JAWS-UG初心者支部 リザーブドインスタンス買ってみたJAWS-UG初心者支部 リザーブドインスタンス買ってみた
JAWS-UG初心者支部 リザーブドインスタンス買ってみた佐藤 雅樹
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)mosa siru
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話Kentaro Yoshida
 
20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したことAmazon Web Services Japan
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Masahito Zembutsu
 
[AWSマイスターシリーズ] Amazon CloudFront / Amazon Elastic Transcoderによるコンテンツ配信
[AWSマイスターシリーズ] Amazon CloudFront / Amazon Elastic Transcoderによるコンテンツ配信[AWSマイスターシリーズ] Amazon CloudFront / Amazon Elastic Transcoderによるコンテンツ配信
[AWSマイスターシリーズ] Amazon CloudFront / Amazon Elastic Transcoderによるコンテンツ配信Amazon Web Services Japan
 

Tendances (20)

知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について知っておきたいFirebase の色んな上限について
知っておきたいFirebase の色んな上限について
 
マイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦いマイクロサービスにおける 結果整合性との戦い
マイクロサービスにおける 結果整合性との戦い
 
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
20200930 AWS Black Belt Online Seminar Amazon Kinesis Video Streams
 
データ分析基盤を支えるエンジニアリング
データ分析基盤を支えるエンジニアリングデータ分析基盤を支えるエンジニアリング
データ分析基盤を支えるエンジニアリング
 
実践 Amazon KMS #cmdevio2015
実践 Amazon KMS #cmdevio2015実践 Amazon KMS #cmdevio2015
実践 Amazon KMS #cmdevio2015
 
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
チャットコミュニケーションの問題と心理的安全性の課題 #EOF2019
 
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
マイクロサービス化設計入門 - AWS Dev Day Tokyo 2017
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門するKeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
 
IntuneとWSUSを使ってWindows Updateをやってみる。
IntuneとWSUSを使ってWindows Updateをやってみる。IntuneとWSUSを使ってWindows Updateをやってみる。
IntuneとWSUSを使ってWindows Updateをやってみる。
 
Keycloak入門
Keycloak入門Keycloak入門
Keycloak入門
 
フロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkanフロー効率性とリソース効率性、再入門 #devlove #devkan
フロー効率性とリソース効率性、再入門 #devlove #devkan
 
FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話FastAPIのテンプレートプロジェクトがいい感じだった話
FastAPIのテンプレートプロジェクトがいい感じだった話
 
JAWS-UG初心者支部 リザーブドインスタンス買ってみた
JAWS-UG初心者支部 リザーブドインスタンス買ってみたJAWS-UG初心者支部 リザーブドインスタンス買ってみた
JAWS-UG初心者支部 リザーブドインスタンス買ってみた
 
開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)開発速度が速い #とは(LayerX社内資料)
開発速度が速い #とは(LayerX社内資料)
 
爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話爆速クエリエンジン”Presto”を使いたくなる話
爆速クエリエンジン”Presto”を使いたくなる話
 
20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと20220409 AWS BLEA 開発にあたって検討したこと
20220409 AWS BLEA 開発にあたって検討したこと
 
TLS, HTTP/2演習
TLS, HTTP/2演習TLS, HTTP/2演習
TLS, HTTP/2演習
 
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
Dockerの期待と現実~Docker都市伝説はなぜ生まれるのか~
 
[AWSマイスターシリーズ] Amazon CloudFront / Amazon Elastic Transcoderによるコンテンツ配信
[AWSマイスターシリーズ] Amazon CloudFront / Amazon Elastic Transcoderによるコンテンツ配信[AWSマイスターシリーズ] Amazon CloudFront / Amazon Elastic Transcoderによるコンテンツ配信
[AWSマイスターシリーズ] Amazon CloudFront / Amazon Elastic Transcoderによるコンテンツ配信
 

Similaire à AWSで始めるサーバレスな RESTful API システム

[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
[AWS Developers Meetup 2017] DeveloperのためのライブAWSウォークスルー 〜 AWS SDKの使い方 〜[AWS Developers Meetup 2017] DeveloperのためのライブAWSウォークスルー 〜 AWS SDKの使い方 〜
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜Atsushi Fukui
 
InterBEE 2018 AWS & AWS Elemental Booth Review
InterBEE 2018 AWS & AWS Elemental Booth ReviewInterBEE 2018 AWS & AWS Elemental Booth Review
InterBEE 2018 AWS & AWS Elemental Booth ReviewAmazon Web Services Japan
 
AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜
AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜
AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜Amazon Web Services Japan
 
20180221 AWS Black Belt Online Seminar AWS Lambda@Edge
20180221 AWS Black Belt Online Seminar AWS Lambda@Edge20180221 AWS Black Belt Online Seminar AWS Lambda@Edge
20180221 AWS Black Belt Online Seminar AWS Lambda@EdgeAmazon Web Services Japan
 
AWS Black Belt Online Seminar AWSサービスを利用したアプリケーション開発を始めよう
AWS Black Belt Online Seminar AWSサービスを利用したアプリケーション開発を始めようAWS Black Belt Online Seminar AWSサービスを利用したアプリケーション開発を始めよう
AWS Black Belt Online Seminar AWSサービスを利用したアプリケーション開発を始めようAmazon Web Services Japan
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから真吾 吉田
 
Introducing C# in AWS Lambda
Introducing C# in AWS LambdaIntroducing C# in AWS Lambda
Introducing C# in AWS LambdaAtsushi Fukui
 
Classmethod共催IT部門向け Tableauを活用した全社レベルのデータ民主化とガバナンス
Classmethod共催IT部門向け Tableauを活用した全社レベルのデータ民主化とガバナンスClassmethod共催IT部門向け Tableauを活用した全社レベルのデータ民主化とガバナンス
Classmethod共催IT部門向け Tableauを活用した全社レベルのデータ民主化とガバナンスTakeo Hirakawa
 
【IVS CTO Night & Day】AWS re:Invent 2017 振り返り
【IVS CTO Night & Day】AWS re:Invent 2017 振り返り【IVS CTO Night & Day】AWS re:Invent 2017 振り返り
【IVS CTO Night & Day】AWS re:Invent 2017 振り返りAmazon Web Services Japan
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Yahoo!デベロッパーネットワーク
 
20190620 aws summit_tokyo_2019
20190620 aws summit_tokyo_201920190620 aws summit_tokyo_2019
20190620 aws summit_tokyo_2019PIXELAcorporation
 
20170809 AWS code series
20170809 AWS code series20170809 AWS code series
20170809 AWS code seriesAtsushi Fukui
 
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンAWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンEiji KOMINAMI
 
20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説
20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説
20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説Amazon Web Services Japan
 
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3日本Javaユーザーグループ
 
Serverless backendformobilegame and_aws-appsync_gamingtechnight-2
Serverless backendformobilegame and_aws-appsync_gamingtechnight-2Serverless backendformobilegame and_aws-appsync_gamingtechnight-2
Serverless backendformobilegame and_aws-appsync_gamingtechnight-2Amazon Web Services Japan
 
Amazon Kinesis Familyを活用したストリームデータ処理
Amazon Kinesis Familyを活用したストリームデータ処理Amazon Kinesis Familyを活用したストリームデータ処理
Amazon Kinesis Familyを活用したストリームデータ処理Amazon Web Services Japan
 

Similaire à AWSで始めるサーバレスな RESTful API システム (20)

[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
[AWS Developers Meetup 2017] DeveloperのためのライブAWSウォークスルー 〜 AWS SDKの使い方 〜[AWS Developers Meetup 2017] DeveloperのためのライブAWSウォークスルー 〜 AWS SDKの使い方 〜
[AWS Developers Meetup 2017] Developerのための ライブAWSウォークスルー 〜 AWS SDKの使い方 〜
 
20170705 blackbelt AWS Lambda
20170705 blackbelt AWS Lambda20170705 blackbelt AWS Lambda
20170705 blackbelt AWS Lambda
 
InterBEE 2018 AWS & AWS Elemental Booth Review
InterBEE 2018 AWS & AWS Elemental Booth ReviewInterBEE 2018 AWS & AWS Elemental Booth Review
InterBEE 2018 AWS & AWS Elemental Booth Review
 
AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜
AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜
AWS Black Belt Online Seminar AWS 体験ハンズオン 〜 Amazon DynamoDB テーブル作成編 〜
 
20180221 AWS Black Belt Online Seminar AWS Lambda@Edge
20180221 AWS Black Belt Online Seminar AWS Lambda@Edge20180221 AWS Black Belt Online Seminar AWS Lambda@Edge
20180221 AWS Black Belt Online Seminar AWS Lambda@Edge
 
AWS Black Belt Online Seminar AWSサービスを利用したアプリケーション開発を始めよう
AWS Black Belt Online Seminar AWSサービスを利用したアプリケーション開発を始めようAWS Black Belt Online Seminar AWSサービスを利用したアプリケーション開発を始めよう
AWS Black Belt Online Seminar AWSサービスを利用したアプリケーション開発を始めよう
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
 
Introducing C# in AWS Lambda
Introducing C# in AWS LambdaIntroducing C# in AWS Lambda
Introducing C# in AWS Lambda
 
Classmethod共催IT部門向け Tableauを活用した全社レベルのデータ民主化とガバナンス
Classmethod共催IT部門向け Tableauを活用した全社レベルのデータ民主化とガバナンスClassmethod共催IT部門向け Tableauを活用した全社レベルのデータ民主化とガバナンス
Classmethod共催IT部門向け Tableauを活用した全社レベルのデータ民主化とガバナンス
 
【IVS CTO Night & Day】AWS re:Invent 2017 振り返り
【IVS CTO Night & Day】AWS re:Invent 2017 振り返り【IVS CTO Night & Day】AWS re:Invent 2017 振り返り
【IVS CTO Night & Day】AWS re:Invent 2017 振り返り
 
AWS Black Belt Online Seminar AWS Amplify
AWS Black Belt Online Seminar AWS AmplifyAWS Black Belt Online Seminar AWS Amplify
AWS Black Belt Online Seminar AWS Amplify
 
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
Automation of Rolling Upgrade of Hadoop Cluster without Data Lost and Job Fai...
 
20190620 aws summit_tokyo_2019
20190620 aws summit_tokyo_201920190620 aws summit_tokyo_2019
20190620 aws summit_tokyo_2019
 
20170809 AWS code series
20170809 AWS code series20170809 AWS code series
20170809 AWS code series
 
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオンAWS Amplify - Auth/API Category & Vue 構築ハンズオン
AWS Amplify - Auth/API Category & Vue 構築ハンズオン
 
20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説
20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説
20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説
 
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
メッセージングプラットフォーム Zimbra の紹介とその活用術 - JJUG ナイトセミナー2013/3
 
Serverless backendformobilegame and_aws-appsync_gamingtechnight-2
Serverless backendformobilegame and_aws-appsync_gamingtechnight-2Serverless backendformobilegame and_aws-appsync_gamingtechnight-2
Serverless backendformobilegame and_aws-appsync_gamingtechnight-2
 
Amazon Kinesis Familyを活用したストリームデータ処理
Amazon Kinesis Familyを活用したストリームデータ処理Amazon Kinesis Familyを活用したストリームデータ処理
Amazon Kinesis Familyを活用したストリームデータ処理
 
AWS Black Belt - AWS Glue
AWS Black Belt - AWS GlueAWS Black Belt - AWS Glue
AWS Black Belt - AWS Glue
 

AWSで始めるサーバレスな RESTful API システム

  • 1. 2017/03/11 ハンズラボ 株式会社 JAWS DAYS 2017 AWSワークショップ AWSで始める サーバレスな RESTful API システム Copyright © 2017. All rights reserved.
  • 2. Copyright © 2017 All rights reserved.1 ハンズオンで使用するファイル ・以下から圧縮ファイルをダウンロードして下さい https://s3-ap-northeast-1.amazonaws.com /hands-lab-handson/jawsdays_handson.zip ・解凍すると以下の4フォルダがあります /API Gateway (API Gatewayの設定用テキスト) /Demo (動作確認用のフロントの静的ファイル) /DynamoDB (DynamoDBのテーブル構築用テキスト) /Lambda (Lambda関数の作成用テキスト)
  • 3. Copyright © 2017 All rights reserved.2 ハンズラボ株式会社 • 情シス部門  東急ハンズの各種システムの内製開発と運用保守 • 外販  自社開発の経験を活かした受託開発、内製支援 東急ハンズのシステム子会社
  • 4. 自己紹介 • 名前:加藤 雅之 • 所属:ハンズラボ株式会社 • 担当: 東急ハンズ - AWSインフラ、IT 統制 ハンズラボ 外販 - AWS構築運用支援 等
  • 5. Copyright © 2017 All rights reserved.4 AWS Samurai 2015 / 2016を連続受賞 2015 長谷川 2016 青木
  • 6. Copyright © 2017 All rights reserved.5 今日の内容 サーバレス(Serverless)とは RESTful APIについて 4つのRESTの原則 設計でのポイント BaaSとFaaS AWSのサーバレス SPA(Single Page Application)のすゝめ サーバレスとの相性 フロントエンドとの完全分離
  • 7. Copyright © 2017 All rights reserved.6 今日の内容 hands - on 1.DynamoDBのテーブル作成 2.Lambda実行用ロールの作成 3.Lambda実装 4.API Gateway の作成とデプロイ 5.動作確認 6.S3へ静的ファイルの設置 7.Cloudfrontでキャシュ作成
  • 8. Copyright © 2017 All rights reserved.7 サーバレス(Serverless)とは 冗長性と可用性が担保される様なインフラの構築運用や、OSやミド ルウェアを気にする必要が無い、開発に集中出来るアーキテクチャー BaaS(バックエンドサービス) データベースや認証、メッセージング等のサービス FaaS(Function as a Service) 必要な物はコードのみで処理を実行させる 注意:サーバは存在します
  • 9. Copyright © 2017 All rights reserved.8 主に使用されるAWSのサーバレス Amazon S3(ファイルストレージ) Amazon Cloudfront(コンテンツデリバリーネットワーク) Amazon DynamoDB(NoSQLデータベース) Amazon API Gateway(アプリケーションインターフェース) AWS Lambda(コード実行サービス) Amazon Cognito(認証認可サービス) Amazon SQS(メッセージキューイング) 等々。。。 特に定義は無いですが、 EC2インスタンスが影に見えない事
  • 10. Copyright © 2017 All rights reserved.9 RESTful APIとは REST( Representational State Transfer )の原則に沿った形で設計され たAPI(Application Programming Interface) その1 ステートレス性 他のリクエスト情報から完全に分離している その2 統一インターフェース HTTP定義通りのメソッドを使用する その3 アドレス可能性 URIで表されるユニークなアドレスを持つ その4 接続性 別のリンクを含めて辿る事が出来る
  • 11. Copyright © 2017 All rights reserved.10 その1 ステートレス性 セッション情報等のクライアント側の状態を持たず、他のリクエスト情報か らも完全に分離されている。 ステートフルとステートレスの違いは、オライリーでRESTfulの本を監訳し ている方の有名なブログが分かりやすい。 http://yohei-y.blogspot.jp/2007/10/blog-post.html 客:Aセットください。 店員:サイドメニューは? 客:ポテトで 店員:ドリンクは? 客:コーラで 店員:以上で良いですか? 客:はい 客:Aセットください。 店員:サイドメニューは? 客:Aセットをポテトで 店員:ドリンクは? 客:Aセットをポテトとコーラで 店員:以上で良いですか? 客:Aセットをポテトとコーラで。以上 ステートレスステートフル
  • 12. Copyright © 2017 All rights reserved.11 その2 統一インターフェース 処理 HTTPメソッド SQL CRUD操作 取得 GET SELECT READ 登録 POST INSERT CREATE 更新 PUT UPDATE UPDATE 削除 DELETE DELETE DELETE PUTしたIDがない場合はCreateとなる POSTはID指定が出来ないCREATE CRUDとSQLとの比較 操作は定義通りのHTTPメソッドで
  • 13. Copyright © 2017 All rights reserved.12 その3 アドレス可能性 URI(URL / URN)にて簡単に指し示す事が出来る ユニークなアドレスを持つ URI (Uniform Resource Identifier) 識別子 名前とアドレスを識別する書き方 URL (Uniform Resource Locator) 住所 場所を示す書き方のルールでWebアドレスで用いられる URN (Uniform Resource Name) 名前 名前を永続的に識別する書き方のルールでISBN等がある 言語や実装依存の拡張子やパスを含めない → 環境が変わっても同じURIで動作
  • 14. Copyright © 2017 All rights reserved.13 その4 接続性 リソースの中に関連性を持つURIのハイパーメディアリンクを含む 事が出来る。 もちろん無理にリンクを設ける必要はない 例えば、商品購入リストのリソースの中に、個別商品のハイ パーメディアリンク(URI)が記載されていれば接続性を保持して いる事になる。
  • 15. Copyright © 2017 All rights reserved.14 API設計で最初にすること まずは、とにかくシンプルに何をどうするを考える 何 = リソース(情報)の洗い出し どうする = CRUD(httpメソッド) シンプル = リソースの関連性を単純化する
  • 16. Copyright © 2017 All rights reserved.15 API設計でのポイント ・リソース名をなるべく具体的な複数形の名詞にする ・バージョニングをどうするかを考える おすすめはURIのパスに含める。他にはQueryパラメータやヘッダ等もある。 ・メッセージフォーマットを決める おすすめはJSON。他にはXML等も ・ドメインはAPIと分かりやすい物が良い ・URIを見ただけでリソースの関係性が分かるようにする ・リソースの階層は2階層くらいまで https://api.hands-lab.com/v2/users ユーザー一覧 https://api.hands-lab.com/v1/users/15/ ID15 ユーザーの指定 https://api.hands-lab.com/v2/articles/321/comments ID 321記事のコメント一覧
  • 17. Copyright © 2017 All rights reserved.16 SPA(Single Page Application)のすゝめ 単一ページで構成されるWebアプリケーション 主にHTMLとJavascriptで構成されており、DOM操作でページ切り替 えやAjax非同期更新を行う AngularやReactやVue.js等々のフレームワークやライブラリがある 細かく非同期で更新をかけたいSPAと、疎結合でマイクロサービス化 されているRESTful APIは相性が良い UI/UXをフロントエンドに任せることで、うまく分離して作業を進める 事が出来る。 またAPIとのやり取りをリソース情報のみに徹底する事は、アプリ対 応等に派生した場合も別対処する必要は無い。
  • 18. Copyright © 2017 All rights reserved.17 ハンズオン Let’s hands - on 1.DynamoDBのテーブル作成 2.Lambda実行用ロールの作成 3.Lambda実装 4.API Gateway の作成とデプロイ 5.動作確認 〜 以下、補足説明 〜 6.S3へ静的ファイルの設置 7.Cloudfrontでキャシュ作成
  • 19. Copyright © 2017 All rights reserved.18 DynamoDB サービスを開く マネイジメントコンソールにログインしたら、左上の 「サービス」メニューをクリック データベースグループにある「DynamoDB」をクリック
  • 20. Copyright © 2017 All rights reserved.19 DynamoDB テーブル作成 「テーブルの作成」ボタンをク リック テーブル名 → handson_db プライマリーキー → id プライマリーキー 属性 → 文字列 テーブル設定 → デフォルト設定の仕様 保存ボタンでテーブル作成
  • 21. Copyright © 2017 All rights reserved.20 DynamoDB テーブル情報の確認 概要タブが選択されている事を確認 右の様な画面で テーブル名 プライマリーパーティションキー テーブルの状態 を作成した通りか確認
  • 22. Copyright © 2017 All rights reserved.21 DynamoDB アラームの確認 アラームタブを選択 handson_dbの ReadCapacity WriteCapacity のアラームが作成されている事を確認
  • 23. Copyright © 2017 All rights reserved.22 DynamoDB キャパシティの確認 容量タブを選択 読み込み容量ユニット及び、書き込み容量ユニットがそれぞれ 5 となっている事を確認
  • 24. Copyright © 2017 All rights reserved.23 DynamoDB 初期データ挿入1 項目タブを選択 項目の作成ボタンをクリック 項目の作成画面が開いたら左上の、選択項目から Text を選択 ※ 1参考画像 テキスト入力形式画面が開いたら、 DynamoDB JSON のチェックボックスをチェック ※ 2参考画像 2 参考画像 1 参考画像
  • 25. Copyright © 2017 All rights reserved.24 DynamoDB 初期データ挿入2 ハンズオンファイルから DynamoDBフォルダ内にある DynamoDB_sampleData_xxx.txt をテキストエディタで開く ※xxx はmac / win の環境です テキストの内容を、DynamoDB JSONの 画面に全て貼り付け 左側の行数箇所にエラーが出ていない事を 確認したら、保存
  • 26. Copyright © 2017 All rights reserved.25 DynamoDB 初期データ確認 正しく反映されているか内容を確認 修正したいデータにチェックをつけて、アクションから編集も可能です
  • 27. Copyright © 2017 All rights reserved.26 Lambda実行ロール IAMサービスを開く 左上のサービスをクリック セキュリティ、アイデンティティグループにあるIAMをクリック
  • 28. Copyright © 2017 All rights reserved.27 Lambda実行ロール 新しいロールの作成1 IAMサービス画面に入ったら、左側のロールをクリック 「新しいロールの作成」ボタンをクリック ※IAMの権限作成は強力な権限です。 うまく開かない等がありましたらチュー ターをお呼び下さい
  • 29. Copyright © 2017 All rights reserved.28 Lambda実行ロール 新しいロールの作成2 ロール名の設定で lambda_exec と入力し、次へをクリック ロールタイプの選択で AWS Lambdaの右にある 選択 をクリック
  • 30. Copyright © 2017 All rights reserved.29 Lambda実行ロール 新しいロールの作成3 AmazonDynamoDB FullAccess と AWSLambda BasicExecutionRole の2つのみをチェックして、 次のステップをクリック 設定した通りの内容になってい るかを確認して、 ロールの作成ボタンをクリック
  • 31. Copyright © 2017 All rights reserved.30 Lambda実装 サービスを開く 左上のサービスをクリック コンピューティンググループにあるLambdaをクリック
  • 32. Copyright © 2017 All rights reserved.31 Lambda実装 作成画面を開く まだ作成した事がない場合は、 「今すぐ始める」 ボタンをクリック 既に作成した事がある場合は、 「Lambda関数の作成」 ボタンをクリック
  • 33. Copyright © 2017 All rights reserved.32 Lambda実装 関数の作成1 設計図の選択画面から画面中央にある ブランク関数 をクリック トリガーの設定では、そのまま次へ
  • 34. Copyright © 2017 All rights reserved.33 Lambda実装 関数の作成2 関数の設定フェーズにて 名前 → api_get_handson 説明 → データ個別取得 ランタイム → Node.js 4.3
  • 35. Copyright © 2017 All rights reserved.34 Lambda実装 関数の作成3 Lambda 関数のコード フェーズにて コードエントリタイプ → コードをインラインで編集 ハンズオンファイルから Lambdaフォルダ内にある Lambda_sampleCode_xxx.txt をテキストエディタで開く ※xxx はmac / win の環境です テキストの内容を、 コードの箇所に全て貼り付け 左側の行数箇所にエラーが出ていない 事を確認
  • 36. Copyright © 2017 All rights reserved.35 Lambda実装 関数の作成4 環境変数の入力箇所のそれぞれに → TABLE_NAME → handson_db ハンドラ index.handler → index.get ロール → 既存のロールを選択 既存のロール → lambda_exec
  • 37. Copyright © 2017 All rights reserved.36 Lambda実装 関数の作成5 詳細設定をクリックしタイムアウトを10秒へ 次へをクリックして、内容が設定した通りか確認をしたら「関数の作成」 以下のように「あめでとうございます」となっているか確認
  • 38. Copyright © 2017 All rights reserved.37 Lambda実装 関数の作成6 左側のダッシュボードをクリックし、 同様の作業( 「作成画面を開く」 から「関数の作成5」)を 以下を変更しながら繰り返す 関数の作成2にて 名前 → api_getall_handson 説明 → データ一括取得 関数の作成4にて ハンドラ index.handler → index.getall
  • 39. Copyright © 2017 All rights reserved.38 Lambda実装 関数の作成7 関数の作成2にて 名前 → api_put_handson 説明 → データ登録 関数の作成4にて ハンドラ index.handler → index.put 左側のダッシュボードをクリックし、 同様の作業( 「作成画面を開く」 から「関数の作成5」)を 以下を変更しながら繰り返す
  • 40. Copyright © 2017 All rights reserved.39 Lambda実装 関数の作成8 関数の作成2にて 名前 → api_delete_handson 説明 → データ削除 関数の作成4にて ハンドラ index.handler → index.delete 左側のダッシュボードをクリックし、 同様の作業( 「作成画面を開く」 から「関数の作成5」)を 以下を変更しながら繰り返す
  • 41. Copyright © 2017 All rights reserved.40 Lambda実装 関数の作成9 左側の関数をクリックし、4つのlambda関数が登録されている事を確認
  • 42. Copyright © 2017 All rights reserved.41 API Gateway の作成 サービスを開く 左上のサービスをクリック アプリケーションサービスグループにあるAPI Gatewayをクリック
  • 43. Copyright © 2017 All rights reserved.42 API Gateway の作成 作成画面を開く まだ作成した事がない場合は、 「今すぐ始める」 ボタンをクリック 既に作成した事がある場合は、 「APIの作成」 ボタンをクリック
  • 44. Copyright © 2017 All rights reserved.43 API Gateway の作成 APIのインポート Swagger から インポートをチェックして、右のSwaggerファイルの選択から ハンズオンファイルのAPI Gatewayフォルダ内にある apiGateway_sample.yml を選択し、インポート
  • 45. Copyright © 2017 All rights reserved.44 API Gateway の作成 Lambdaの紐付け1 リソースメニューの /resouce のGETをクリックし、 統合タイプ Lambda関数 Lambdaプロキシ統合の仕様にチェック Lambda関数 api_getall_handson で保存する。権限追加のダイアログはそのままOKを行う
  • 46. Copyright © 2017 All rights reserved.45 API Gateway の作成 Lambdaの紐付け2 リソースメニューの /resouce /{resourceId} のDELETEをクリックし、 統合タイプ Lambda関数 Lambdaプロキシ統合の仕様にチェック Lambda関数 api_delete_handson で保存する。権限追加のダイアログはそのままOKを行う
  • 47. Copyright © 2017 All rights reserved.46 API Gateway の作成 Lambdaの紐付け3 リソースメニューの /resouce /{resourceId} のGETをクリックし、 統合タイプ Lambda関数 Lambdaプロキシ統合の仕様にチェック Lambda関数 api_get_handson で保存する。権限追加のダイアログはそのままOKを行う
  • 48. Copyright © 2017 All rights reserved.47 API Gateway の作成 Lambdaの紐付け4 リソースメニューの /resouce /{resourceId} のPUTをクリックし、 統合タイプ Lambda関数 Lambdaプロキシ統合の仕様にチェック Lambda関数 api_put_handson で保存する。権限追加のダイアログはそのままOKを行う
  • 49. Copyright © 2017 All rights reserved.48 API Gateway の作成 Mockの紐付け1 リソースメニューの /resouce のOPTIONSをクリックし、 統合タイプ Mock で保存する。
  • 50. Copyright © 2017 All rights reserved.49 API Gateway の作成 Mockの紐付け2 リソースメニューのの /resouce /{resourceId} のOPTIONSをクリックし、 統合タイプ Mock で保存する。
  • 51. Copyright © 2017 All rights reserved.50 API Gateway の作成 CORSの設定1 リソースメニューの /resouce 配下のOPTIONSをクリックし、 右下の統合レスポンスをクリック
  • 52. Copyright © 2017 All rights reserved.51 API Gateway の作成 CORSの設定2 表内の左端にある三角(▶)をクリックし、更にヘッダーのマッピングの三角をクリック
  • 53. Copyright © 2017 All rights reserved.52 API Gateway の作成 CORSの設定3 レスポンスヘッダー3種の右端にある鉛筆クリックし、マッピングの値を、 ハンズオンファイルのAPI Gatewayフォルダ内にある apiGateway_options.txt の通りに入力。入力後は右端のチェックマークをクリックで確定。 ※前後のシングルクオーテーションも必要です。 同様の作業を リソースメニューの /resouce / {responceID }のOPTIONS に対しても行って下さい。
  • 54. Copyright © 2017 All rights reserved.53 API Gateway の作成 デプロイ アクションのAPIのデプロイをクリック 新しいステージを選択し ステージ名 → handson でデプロイをクリック
  • 55. Copyright © 2017 All rights reserved.54 API Gateway の作成 エンドポイントを確認 エンドポイント(URL)をメモ
  • 56. Copyright © 2017 All rights reserved.55 動作確認 エンドポイントの登録 ハンズオンファイルのDEMOフォルダ内にある Index.htmlをテキストエディタで開く 139行目の API_endpoint を先程メモしたエンドポイントに書き換えて保存
  • 57. Copyright © 2017 All rights reserved.56 動作確認 ハンズオンファイルのDEMOフォルダ内にある Index.htmlをブラウザで開いて色々と動作を確認
  • 58. Copyright © 2017 All rights reserved.57 動作詳細 Index.htmlの初回読み込み時及び、各タブ選択時 → https://APIGatewayエンドポイント/resource/ GETメソッド (api_getall_handson Lambda) GETタブ内のGETボタン → https://APIGatewayエンドポイント/resource/{指定ID}/ GETメソッド (api_get_handson Lambda) PUTタブ内のPUTボタン → https://APIGatewayエンドポイント/resource/{指定ID}/ PUTメソッド (api_put_handson Lambda) DELETEタブ内のDELETEボタン → https://APIGatewayエンドポイント/resource/{指定ID}/ DELETEメソッド (api_delete_handson Lambda)
  • 59. Copyright © 2017 All rights reserved.58 時間の関係上、本日は省略しますが クライアントでの動作にて問題が無いことを確認しましたら、 以下を実行する事で完全なサーバレスでの動作になります。 ・動作検証済みのDEMOフォルダ内容をS3のバケットにアップロード ・対象のバケットに対してのキャッシュ配信をCloudFrontにて設定 ※S3はCloudFrontからのみのアクセス許可を行うと良い 更に、Route53にてドメインを取得しCloudFrontへDNSを向け、 Certificate Managerにて証明書を取得しCloudFrontへ紐付ければ、 AWSのみで完結するサーバレスの基本形が完成します。 そこからはCognitoと連携させてログイン機能(認証認可)を行ったり、WAFやKMSと連携させてセキュアにし てみたり、アイデア次第で様々な機能を持ったシステムを構築してく事が可能です。
  • 60. Copyright © 2017 All rights reserved.59 最後に サーバレスでもシステム運用は必要です。 もちろんステートレスな構成が故の、デプロイの難しさやログの追尾 性等の問題があります。 魔法の様な銀の弾丸では無いが、特性にマッチした部分で活用出来 るようになると非常に有効なシステムとなります。 多少無理でも大丈夫そうなら是非サーバレスで! 大事なことは「やっていく気持ち」
  • 61. Copyright © 2017 All rights reserved.60 そんなエンジニアを募集中! 求むエンジニア! ハンズラボは積極的に技術者採用中です。

Notes de l'éditeur

  1. 最初に読み込んで 一部を非同期で更新をかけていく