SlideShare a Scribd company logo
1 of 29
Download to read offline
AWSで開発するサーバレスAPIバックエンド
ServerlessMeetupTokyo#14
2019.09.19.
三宅暁
⾃⼰紹介
三宅暁(ミヤケアキラ)
フリーランス(8⽉から)
フロントエンド
SPAをJS/HTML/CSSまるごと設計・実装できる程度の能⼒
Reactが得意、あとVueとAngular
バックエンド
サーバレス中⼼のAWS
Node.js
API設計
OpenIDまわり
⾃⼰紹介
GitHub
AKIRA-MIYAKE
Blog
DreamofElectricCat
Twitter
@DreamOfEleCat
主なサーバレス関連のライブラリ
serverless-import-swagger
OpenAPI形式のAPI定義からserverless.ymlのhandlerの定義を⽣成するツール
最近のバージョンアップで設定まわりが洗練されました
node-lambda-utilities
lambdaのhandlerのテストをしやすくするツール
contextやcallbackのモックの⽣成とhandlerの実⾏
今⽇話すこと
AppSync+DynamoDB+Cognitoを使って、GraphQLのAPIバックエンドを作る
ノンコーディングで
デプロイが簡単にできて
なるべくベンダーロックインしないように
GraphQLorRESTful?
参考
GraphQLvs.REST
GraphQLはRESTの置き換えではない
個⼈的な考え
GraphQLの好きなところ
スキーマファーストの強制
宣⾔的なフィールドレベルのアクセス制御
GraphQLの気になるところ
キャッシュコントロール
エラーの表現
プロジェクトのサンプル
https://github.com/AKIRA-MIYAKE/aws-serverless-sample
ベンダーロックインしないために
Amplifyは使わない
フロントエンドがAWSにロックインしないように
ApolloClientを利⽤
Cognitoを⽤いるが、OpenIDProviderとして利⽤する
認可処理の拡張性を確保するため
@axa-fr/react-oidc-contextを利⽤
APIの仕様
メッセージの作成・取得・⼀覧・削除
取得・⼀覧はログインしなくても呼び出せる
⼀覧は作成⽇での降順
作成・削除はログインが必要
⾃分が作成したメッセージのみ削除できる
schema.graphql
type Query @aws_api_key @aws_oidc {
readMessage(id: ID!): Message
listMessage(limit: Int, nextToken: String): MessageCollection!
}
type Mutation @aws_oidc {
createMessage(input: CreateMessageInput!): Message!
deleteMessage(input: DeleteMessageInput!): Message
}
基本の承認モードをAPI_KEYに指定し、OPENID_CONNECTを追加
mutationはOPENID_CONNECTのみ許可し、認証状態を必須に
schema.graphql
type Message @aws_api_key @aws_oidc {
id: ID!
value: String!
createdBy: String!
createdAt: String!
}
createdByはCognitoが発⾏するsubを⽤いる
schema.graphql
type MessageKeyValue @aws_api_key @aws_oidc {
id: ID!
key: String!
value: String!
message: Message
}
type MessageCollection @aws_api_key @aws_oidc {
items: [MessageKeyValue!]!
nextToken: String
scannedCount: Int
}
MessageKeyValueはノンコーディングを達成しつつDynamoDBデータモデリング⻁の
巻:第参巻〜実践編〜の汎⽤的なGSIを実現するために⽣まれたもの
スキーマが不⾃然で1+Nになるため、速やかに修正されるべき箇所
パイプラインリゾルバの利⽤がおそらく適切
Mutation.createMessage.request.vtl
#set($id = $util.autoId())
#set($now = $util.time.nowISO8601())
#set($sub = $context.identity.sub)
#set($items = [...])
{
"version" : "2018-05-29",
"operation" : "BatchPutItem",
"tables" : {
"${DynamoDB}": $utils.toJson($items)
}
}
BatchPutItemを⽤いてクエリ⽤のレコードを同時に登録
Mutation.createMessage.request.vtl
#set($items = [
{
"id": $util.dynamodb.toString("${id}"),
"key": $util.dynamodb.toString("message"),
"value": $util.dynamodb.toString("${context.arguments.input.value}"),
"createdBy": $util.dynamodb.toString("${sub}"),
"createdAt": $util.dynamodb.toString("${now}")
},
{
"id": $util.dynamodb.toString("${id}"),
"key": $util.dynamodb.toString("message/createdBy"),
"value": $util.dynamodb.toString("${sub}")
},
{
"id": $util.dynamodb.toString("${id}"),
"key": $util.dynamodb.toString("message/createdAt"),
"value": $util.dynamodb.toString("${now}")
}
])
Query.listMessage.request.vtl
{
"version": "2017-02-28",
"operation": "Query",
"query": {
"expression": "#key = :key",
"expressionValues": {
":key": $util.dynamodb.toStringJson("message/createdAt")
},
"expressionNames": {
"#key": "key"
}
},
"index": "key-value-index",
"limit": #if($context.arguments.limit) $context.arguments.limit #else 10 #end,
"nextToken": #if($context.arguments.nextToken) "${context.arguments.nextToken}" #else null #end,
"scanIndexForward": false
}
key-value-indexをスキャンし、valueに⼊っているcreatedAtの値でのソートを実現
limitとnextTokenにデフォルト値をセット
MessageKeyValue.message.request.vtl
{
"version" : "2017-02-28",
"operation" : "GetItem",
"key" : {
"id": $util.dynamodb.toStringJson("${context.source.id}"),
"key": $util.dynamodb.toStringJson("message")
}
}
listMessageが返す、MessageKeyValueのmessageフィールドのマッピング
1件ごとにGetItemが実⾏されるため、1+Nに
Mutation.deleteMessage.request.vtl
{
"version": "2017-02-28",
"operation": "DeleteItem",
"key": {
"id": $util.dynamodb.toStringJson("${context.arguments.input.id}"),
"key": $util.dynamodb.toStringJson("message")
},
"condition": {
"expression": "createdBy = :createdBy",
"expressionValues": {
":createdBy": $util.dynamodb.toStringJson("${context.identity.sub}")
}
}
}
BatchDeleteではconditionが使えないため、メインのレコードのみの削除
パイプラインリゾルバの利⽤がおそらく適切
serverless-appsync-plugin
https://github.com/sid88in/serverless-appsync-plugin
AppSyncの設定を簡潔に定義してデプロイできるServerlessFrameworkのプラグイン
mappingTemplates(リゾルバ)は {type}.{field}.request.vtl と {type}.
{field}.respose.vtl のファイルをデフォルトで認識
vtlファイルで環境変数を設定できる
CloudFormationの出⼒を利⽤可能
serverless.yml
custom:
appSync:
substitutions:
DynamoDB: sls-sample-${env:ENV}
Batch系処理ではvtlで直接テーブル名の指定が必要
ステージごとにテーブル名が異なるため、環境変数として定義
vtlでは $DynamoDB のように、変数としてアクセス可能
serverless.yml
custom:
appSync:
additionalAuthenticationProviders:
- authenticationType: OPENID_CONNECT
openIdConnectConfig:
issuer: !Join
- ''
- - https://cognito-idp.ap-northeast-1.amazonaws.com/
- !Ref UserPool
CognitoをOPENID_CONNECT承認モードとして利⽤するための設定
issuerのURLがUserPoolのIDを含んだものとなるので、resourcesで出⼒された値を参照
CognitoUserPoolのアプリの統合の設定
アプリクライアントはCloudFormationで作れるが、アプリの統合は未サポート
この箇所だけコンソールかCLIからの設定が必要
アプリの統合/アプリクライアントの設定
「有効なIDプロバイダ」
「CognitoUserPool」を選択
「サインインとサインアウトのURL」
「コールバックURL」に http://localhost:3000/authentication/callback
を設定
@axa-fr/react-oidc-contextのデフォルト値
「サインアウトURL」に http://localhost:3000 を設定
「OAuth2.0」
「許可されているOAuthフロー」の「Authorizationcodegrant」を選択
「許可されているOAuthスコープ」の「phone」「email」「openid」
「profile」を選択
「openid」があれば動作はするはず
アプリの統合/ドメイン名
「AmazonCognitoドメイン」
「ドメインのプレフィックス」に任意の名前を設定
AppSyncは設定されたissuerの .well-known/openid-configuration から必要
な情報を取得するため、ドメイン名の指定は不要
フロントエンド
動作確認のためのシンプルなReactアプリ
ログイン/ログアウト
listMessageの結果の表⽰
createMessageの実⾏
deleteMessageの実⾏
ログイン/ログアウト(AppHeader)
const AppHeader = () => {
const { login, logout, oidcUser } = useReactOidc();
return (
<h1>AWS SLS Sample</h1>
{
oidcUser
? <div><button onClick={logout}>Logout</button></div>
: <div><button onClick={login}>Login</button></div>
}
{oidcUser && (
<span>sub(generated by cognito): {oidcUser.profile.sub}</span>
)}
);
};
@axa-fr/react-oidc-contextのフックを利⽤
Cognitoのページにリダイレクトされ、ユーザ登録まで処理してくれる
認証⽅式の切り替え(ApolloContext)
const client = useMemo(
() => {
if (oidcUser && oidcUser.id_token) {
return new ApolloClient({
uri: process.env.REACT_APP_GRAPHQL_URL,
request: operation => {
operation.setContext({ headers: { Authorization: `${oidcUser.id_token}` },
});
},
});
} else {
return new ApolloClient({
uri: process.env.REACT_APP_GRAPHQL_URL,
request: operation => {}
operation.setContext({ headers: { 'x-api-key': process.env.REACT_APP_GRAPHQL_API_KEY },
});
},
});
}
},
[oidcUser]
);
ログイン状態に応じて、クライアントを切り替えるコンテキストを定義
フロントエンドのベンダーロックイン
GraphQL、OpenID共にAWSに依存しない仕組みにしているため、最低限の修正でエン
ドポイントの変更が可能
OpenIDの設定値の変更
ApolloContextのヘッダーの変更
実サービスで利⽤するために検討が必要な箇所
AppSyncのAPI_KEY承認モードの利⽤
定期的な再発⾏を⾏い、キーを返すAPIを実装する
Cognitoに匿名ユーザを登録し、sub値で判断する
ClientCredentialsGrantフローで取得したトークンを返すAPIを実装する(そのトー
クンが利⽤可能か未検証)
厳密なログアウト
@axa-fr/react-oidc-contextはトークンを削除することでログアウト
厳密な制御を⾏うなら、ログアウトエンドポイントを⽤いてCognito側のログアウト
も必要
ホストされたサインアップ、サインインページとリダイレクト
ADMIN_NO_SRP_AUTHを⽤いてそれぞれの処理を⾏い、取得されたトークンを返
すAPIを実装する
まとめ
AppSync+DynamoDB+Cognitoを使えば、ノンコーディングでGraphQLのAPIバック
エンドを作ることができる
パイプラインリゾルバを利⽤すれば、実サービスでもある程度までは対応できそう
serverless-appsync-pluginを利⽤することで(ほぼ)⾃動でデプロイが可能
AWSにほとんど依存しないフロントエンドの開発も可能
⾮ログイン状態でのAppSyncへのアクセス制御は検証が必要

More Related Content

What's hot

Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -Yoichi Kawasaki
 
10分でわかるOpenAPI V3
10分でわかるOpenAPI V310分でわかるOpenAPI V3
10分でわかるOpenAPI V3Kazuchika Sekiya
 
React NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようReact NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようdcubeio
 
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポートJAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート真吾 吉田
 
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみアメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみKazunari Hara
 
Azure Load Testingを試してみた
Azure Load Testingを試してみたAzure Load Testingを試してみた
Azure Load Testingを試してみたHiroyuki Mori
 
Swaggerを利用した新規サービス開発
Swaggerを利用した新規サービス開発Swaggerを利用した新規サービス開発
Swaggerを利用した新規サービス開発recotech
 
RespClient - Minimal Redis Client for PowerShell
RespClient - Minimal Redis Client for PowerShellRespClient - Minimal Redis Client for PowerShell
RespClient - Minimal Redis Client for PowerShellYoshifumi Kawai
 
LightNode - Micro RPC/REST Framework
LightNode - Micro RPC/REST FrameworkLightNode - Micro RPC/REST Framework
LightNode - Micro RPC/REST FrameworkYoshifumi Kawai
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールdcubeio
 
Responsableを使ったadr実装
Responsableを使ったadr実装Responsableを使ったadr実装
Responsableを使ったadr実装Kenjiro Kubota
 
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発Shuto Suzuki
 
実践サーバレスアーキテクチャ
実践サーバレスアーキテクチャ実践サーバレスアーキテクチャ
実践サーバレスアーキテクチャ太郎 test
 
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指してAkira Inoue
 
Infra as Code in Azure
Infra as Code in AzureInfra as Code in Azure
Infra as Code in AzureIssei Hiraoka
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)NTT DATA Technology & Innovation
 

What's hot (20)

Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -
 
React Native 入門
React Native 入門React Native 入門
React Native 入門
 
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimuraAPIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
 
AWS Lambda in Golang
AWS Lambda in GolangAWS Lambda in Golang
AWS Lambda in Golang
 
WebWorker and Atomics
WebWorker and AtomicsWebWorker and Atomics
WebWorker and Atomics
 
10分でわかるOpenAPI V3
10分でわかるOpenAPI V310分でわかるOpenAPI V3
10分でわかるOpenAPI V3
 
React NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみようReact NativeでTwitterクライアントを作ってみよう
React NativeでTwitterクライアントを作ってみよう
 
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポートJAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
 
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみアメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
アメブロ2016 アメブロフロント刷新にみる ひかりとつらみ
 
Azure Load Testingを試してみた
Azure Load Testingを試してみたAzure Load Testingを試してみた
Azure Load Testingを試してみた
 
Swaggerを利用した新規サービス開発
Swaggerを利用した新規サービス開発Swaggerを利用した新規サービス開発
Swaggerを利用した新規サービス開発
 
RespClient - Minimal Redis Client for PowerShell
RespClient - Minimal Redis Client for PowerShellRespClient - Minimal Redis Client for PowerShell
RespClient - Minimal Redis Client for PowerShell
 
LightNode - Micro RPC/REST Framework
LightNode - Micro RPC/REST FrameworkLightNode - Micro RPC/REST Framework
LightNode - Micro RPC/REST Framework
 
こんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツールこんなに使える!今どきのAPIドキュメンテーションツール
こんなに使える!今どきのAPIドキュメンテーションツール
 
Responsableを使ったadr実装
Responsableを使ったadr実装Responsableを使ったadr実装
Responsableを使ったadr実装
 
TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発TypeScriptでCLIアプリケーション開発
TypeScriptでCLIアプリケーション開発
 
実践サーバレスアーキテクチャ
実践サーバレスアーキテクチャ実践サーバレスアーキテクチャ
実践サーバレスアーキテクチャ
 
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
.NET の今と未来 ~ デバイス&クラウド ネイティブを目指して
 
Infra as Code in Azure
Infra as Code in AzureInfra as Code in Azure
Infra as Code in Azure
 
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
kubernetes初心者がKnative Lambda Runtime触ってみた(Kubernetes Novice Tokyo #13 発表資料)
 

Similar to AWSで開発するサーバレスAPIバックエンド

Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Takuro Sasaki
 
Azureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流についてAzureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流について真吾 吉田
 
AWS lamdbaでステートフルWebアプリ
AWS lamdbaでステートフルWebアプリAWS lamdbaでステートフルWebアプリ
AWS lamdbaでステートフルWebアプリKazuki Saito
 
Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-recotech
 
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編Masayuki KaToH
 
Windows 開発者のための Dev&Ops on AWS
Windows 開発者のための Dev&Ops on AWSWindows 開発者のための Dev&Ops on AWS
Windows 開発者のための Dev&Ops on AWSAmazon Web Services Japan
 
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Taisuke Oe
 
ZappaでDBもパッケージしたサーバーレスAPIを構築してみた
ZappaでDBもパッケージしたサーバーレスAPIを構築してみたZappaでDBもパッケージしたサーバーレスAPIを構築してみた
ZappaでDBもパッケージしたサーバーレスAPIを構築してみたYasunori Kirimoto
 
Jawsug chiba API Gateway
Jawsug chiba API GatewayJawsug chiba API Gateway
Jawsug chiba API GatewayTakuro Sasaki
 
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪真吾 吉田
 
Serverless frameworkを使ってみた話 at #nseg #90
Serverless frameworkを使ってみた話 at #nseg #90Serverless frameworkを使ってみた話 at #nseg #90
Serverless frameworkを使ってみた話 at #nseg #90ko ty
 
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API GatewayAWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API GatewayAmazon Web Services Japan
 
May the FaaS be with us!!
May the FaaS be with us!!May the FaaS be with us!!
May the FaaS be with us!!真吾 吉田
 
JAWS-UG 愛媛 第6回勉強会(Lambda)
JAWS-UG 愛媛 第6回勉強会(Lambda)JAWS-UG 愛媛 第6回勉強会(Lambda)
JAWS-UG 愛媛 第6回勉強会(Lambda)Takahiro Kato
 
サーバレスアーキテクチャを実戦投入するにあたって知るべきこと
サーバレスアーキテクチャを実戦投入するにあたって知るべきことサーバレスアーキテクチャを実戦投入するにあたって知るべきこと
サーバレスアーキテクチャを実戦投入するにあたって知るべきこと暁 三宅
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから真吾 吉田
 
Scala: Mobile Backend on AWS
Scala: Mobile Backend on AWSScala: Mobile Backend on AWS
Scala: Mobile Backend on AWScmaraiyusuke
 
A 1-2 One ASP.NET - ASP.NET Web Stack
A 1-2 One ASP.NET - ASP.NET Web StackA 1-2 One ASP.NET - ASP.NET Web Stack
A 1-2 One ASP.NET - ASP.NET Web StackGoAzure
 
AWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作りAWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作りiPride Co., Ltd.
 

Similar to AWSで開発するサーバレスAPIバックエンド (20)

Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発
 
Azureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流についてAzureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流について
 
AWS lamdbaでステートフルWebアプリ
AWS lamdbaでステートフルWebアプリAWS lamdbaでステートフルWebアプリ
AWS lamdbaでステートフルWebアプリ
 
Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-Reco choku tech night #09 -reinvent2018報告会-
Reco choku tech night #09 -reinvent2018報告会-
 
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
 
Windows 開発者のための Dev&Ops on AWS
Windows 開発者のための Dev&Ops on AWSWindows 開発者のための Dev&Ops on AWS
Windows 開発者のための Dev&Ops on AWS
 
Talk: serverless-express
Talk: serverless-expressTalk: serverless-express
Talk: serverless-express
 
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Real World Android Akka - 日本語版
Real World Android Akka - 日本語版
 
ZappaでDBもパッケージしたサーバーレスAPIを構築してみた
ZappaでDBもパッケージしたサーバーレスAPIを構築してみたZappaでDBもパッケージしたサーバーレスAPIを構築してみた
ZappaでDBもパッケージしたサーバーレスAPIを構築してみた
 
Jawsug chiba API Gateway
Jawsug chiba API GatewayJawsug chiba API Gateway
Jawsug chiba API Gateway
 
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
 
Serverless frameworkを使ってみた話 at #nseg #90
Serverless frameworkを使ってみた話 at #nseg #90Serverless frameworkを使ってみた話 at #nseg #90
Serverless frameworkを使ってみた話 at #nseg #90
 
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API GatewayAWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
 
May the FaaS be with us!!
May the FaaS be with us!!May the FaaS be with us!!
May the FaaS be with us!!
 
JAWS-UG 愛媛 第6回勉強会(Lambda)
JAWS-UG 愛媛 第6回勉強会(Lambda)JAWS-UG 愛媛 第6回勉強会(Lambda)
JAWS-UG 愛媛 第6回勉強会(Lambda)
 
サーバレスアーキテクチャを実戦投入するにあたって知るべきこと
サーバレスアーキテクチャを実戦投入するにあたって知るべきことサーバレスアーキテクチャを実戦投入するにあたって知るべきこと
サーバレスアーキテクチャを実戦投入するにあたって知るべきこと
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
 
Scala: Mobile Backend on AWS
Scala: Mobile Backend on AWSScala: Mobile Backend on AWS
Scala: Mobile Backend on AWS
 
A 1-2 One ASP.NET - ASP.NET Web Stack
A 1-2 One ASP.NET - ASP.NET Web StackA 1-2 One ASP.NET - ASP.NET Web Stack
A 1-2 One ASP.NET - ASP.NET Web Stack
 
AWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作りAWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作り
 

AWSで開発するサーバレスAPIバックエンド