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
Ruby on Jets + Cognitoで認証付きAPIサーバを5分でデプロイする
Search
Y_uuu
January 29, 2020
Programming
1
790
Ruby on Jets + Cognitoで認証付きAPIサーバを5分でデプロイする
2019/01/29 Fukuoka.rb #167 - 新年LT大会!
Y_uuu
January 29, 2020
Tweet
Share
More Decks by Y_uuu
See All by Y_uuu
Porting PicoRuby to Another Microcontroller: ESP32
yuuu
4
730
RubyKaigi 2025でプロポーザルが初めて採択されるまでにやったこと
yuuu
1
470
地方企業の強みを活かす!AWSを活用したIoTシステムの開発事例とその裏側
yuuu
0
95
あの重機は今どこにある?- 重機管理IoTプロダクトのバックエンドをAWSで構築した話 -
yuuu
0
940
mruby-esp32におけるペリフェラルAPIの実装検討
yuuu
1
740
育成力 - エンジニアの才能を引き出す環境とチューターの立ち回り -
yuuu
4
4.7k
committee-railsとOpenAPI Generatorでスキーマ駆動なAPI開発をする
yuuu
0
900
mrubyでマイコンの世界に足を踏み入れる
yuuu
2
2k
mruby on IoT devices.
yuuu
4
2.5k
Other Decks in Programming
See All in Programming
Benchmark
sysong
0
210
単体テストの始め方/作り方
toms74209200
0
500
GoのGenericsによるslice操作との付き合い方
syumai
2
660
Effect の双対、Coeffect
yukikurage
5
1.4k
KotlinConf 2025 現地で感じたServer-Side Kotlin
n_takehata
1
220
生成AIで日々のエラー調査を進めたい
yuyaabo
0
610
つよそうにふるまい、つよい成果を出すのなら、つよいのかもしれない
irof
1
290
ktr0731/go-mcpでMCPサーバー作ってみた
takak2166
0
170
AIコーディング道場勉強会#2 君(エンジニア)たちはどう生きるか
misakiotb
1
230
Cursor Meetup Tokyo ゲノミクスとCursor: 進化と制約のあいだ
koido
2
1k
生成AIコーディングとの向き合い方、AIと共創するという考え方 / How to deal with generative AI coding and the concept of co-creating with AI
seike460
PRO
1
310
FormFlow - Build Stunning Multistep Forms
yceruto
1
180
Featured
See All Featured
Measuring & Analyzing Core Web Vitals
bluesmoon
7
480
What's in a price? How to price your products and services
michaelherold
245
12k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.5k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Build your cross-platform service in a week with App Engine
jlugia
231
18k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.7k
Faster Mobile Websites
deanohume
307
31k
Adopting Sorbet at Scale
ufuk
77
9.4k
Practical Orchestrator
shlominoach
188
11k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
StorybookのUI Testing Handbookを読んだ
zakiyama
30
5.8k
Transcript
Ruby on Jets + Cognitoで 認証付きAPIサーバを5分でデプロイする 2019/01/29 Fukuoka.rb #167 -
新年LT⼤会︕ 株式会社Fusic 岡嵜雄平
͚͓͋Ί
⾃⼰紹介 岡嵜 雄平(@Y_uuu) RubyKaigi 2019 ローカルオーガナイザー 今年の⽬標︓Ruby on Jetsをガンガン使う。
⾃⼰紹介
最近のお仕事 • IoTサーバへデバイスの代わりにデータ送信 • さまざまな⽅法でテストデータを⾃動⽣成 • 各種クラウドサービス(AWS, GCP, Azure)やSORACOMと連携
IoTのテストを⽀援する mockmock https://bit.ly/37tA9bf で検索
Ruby on Jetsとは AWS上で動作するサーバレスアプリケーションを Rubyで書くためのフレームワーク
Ruby on Jetsとは • ORMがRailsと同じActiveRecord • MVCやルーティングの書き⽅(メソッド)が同じ • ⼀部のGemが使える
Ruby on Railsと同じように実装できる
Ruby on Jetsとは 1コマンドでAWSへデプロイできる
今⽇紹介すること サーバレスな認証付きAPIサーバを 5分で作ってデプロイする⽅法
仕様 • Fukuoka.rb API • 開催⽇時、connpassのURLを登録・取得
-FUbTUSZ
Jetsのインストール アプリケーションを作成する ❯ ruby -v ruby 2.5.7p206 (2019-10-01 revision
67816) [x86_64-darwin19] ❯ gem install jets Successfully installed jets-2.3.12 ❯ jets new fukuoka_rb_api --mode api --no-database Congrats You have successfully created a Jets project.
jets generate scaffold Scaffoldする ❯ cd fukuoka_rb_api ❯ jets
generate scaffold Ev title:string url:string --no- migration
΄΅3BJMTͱಉ͡
DynamoDBに対応(モデル) デフォルトRDB向けの実装になっているので修正 class Ev < ApplicationItem #ApplicationRecord column :id,
:title, :url # 追記 end
DynamoDBに対応(コントローラ) デフォルトRDB向けの実装になっているので修正 def index @evs = Ev.scan #Ev.all render
json: @evs end
DynamoDBに対応(コントローラ) デフォルトRDB向けの実装になっているので修正 def create @ev = Ev.new #Ev.new(ev_params) if
@ev.replace(ev_params) #ev.save render json: @ev, status: :created else render json: @ev.errors, status: :unprocessable_entity end end
DynamoDBに対応(Config) IAM PolicyにDynamoDBを追加 Jets.application.configure do # 省略 config.iam_policy =
[ʻdynamodbʼ] end
jets dynamodb:migrate マイグレーションする ❯ docker run -p 8000:8000 amazon/dynamodb-local
❯ jets dynamodb:generate evs ❯ jets dynamodb:migrate dynamodb/migrate/*
jets server ローカルサーバを起動 ❯ jets server
イベントを登録してみる JSONをPOST ❯ curl -X POST -H "Content-Type: application/json"
-d '{"ev": {"title":" Fukuoka.rb #167 - 新年LT⼤会︕", "url":"https://fukuokarb.connpass.com/event/162983/"}}' http://localhost:8888/evs {"id":"f97b50fd7d6330728ea3eea61ef6889a5035e2bb","title" :" Fukuoka.rb #167 - 新年LT⼤会︕ ","url":"https://fukuokarb.connpass.com/event/162983/","cre ated_at":"2020-01-25T19:41:00Z","updated_at":"2020-01- 25T19:41:00Z"}%
イベントを取得してみる JSONをGET ❯ curl http://localhost:8888/evs [{"created_at":"2020-01- 25T19:41:00Z","id":"f97b50fd7d6330728ea3eea61ef6889a50 35e2bb","title":" Fukuoka.rb
#167 - 新年LT⼤会︕ ","updated_at":"2020-01- 25T19:41:00Z","url":"https://fukuokarb.connpass.com/event /162983/"}]
ϩʔΧϧڥͰಈ͍ͨ
Cognitoユーザープールを作成 詳細は以下を参照 チュートリアル: ユーザープールの作成 - Amazon Cognito https://docs.aws.amazon.com/ja_jp/cognito/latest/developerguide/ tutorial-create-user-pool.html
諸々デフォルトでOK
Cognitoアプリクライアントを作成 後で使うのでメモ チェック
Authorizerを作成 app/authorizers/main_authorizer.rbを作成 class MainAuthorizer < Jets::Authorizer::Base authorizer( name: ʻMyCognitoʼ,
identity_source: ʻAuthorizationʼ, type: :cognito_user_pools, provider_arns: [ʻ(CognitoのARNを記載)'], ) end
Authorizerを有効にする config/routes.rbに追記 resources :evs, authorizer: ʻmain#my_cognitoʼ
デプロイ AWSでCloudFormationが⾛る ❯ JETS_ENV=production jets dynamodb:migrate dynamodb/migrate/* ❯ jets
deploy production
JWT Tokenを取得 aws-cliでcognitoにログイン ❯ aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH
--client-id 6nvis8bu0ehri8tsk6d3qkimef --auth-parameters USERNAME=(ユーザ名),PASSWORD=(パスワード) {"ChallengeParameters": {}, "AuthenticationResult": {”IdToken": ”xxxxx",
イベントを登録してみる JSONをPOST ❯ curl -X POST -H "Authorization: xxxxx"
-H "Content-Type: application/json" -d '{"ev": {"title":" Fukuoka.rb #167 - 新年LT⼤ 会︕", "url":"https://fukuokarb.connpass.com/event/162983/"}}' https://z6kpk9boza.execute-api.ap-northeast- 1.amazonaws.com/prod/evs {"id":"1fdb21ed1bd9ca05b36b4f5a16fa7acda3ee077e","title":" Fukuoka.rb #167 - 新年LT⼤会︕ ","url":"https://fukuokarb.connpass.com/event/162983/","create d_at":"2020-01-25T20:46:45Z","updated_at":"2020-01- 25T20:46:45Z"}%
イベントを取得してみる JSONをGET ❯ curl -H "Authorization: xxxxx" https://z6kpk9boza.execute- api.ap-northeast-1.amazonaws.com/prod/evs
[{"updated_at":"2020-01- 25T20:48:20Z","created_at":"2020-01- 25T20:48:20Z","id":"14ff588afe141e6121238214725d0e3db 51c9eca","url":"https://fukuokarb.connpass.com/event/1629 83/","title":" Fukuoka.rb #167 - 新年LT⼤会︕"}]%
まとめ • Ruby on Jetsを使ってAPIサーバを簡単に構築できた • Cognitoを使って簡単に認証機能を実現できた • RubyはRailsだけじゃない、まだまだ死なない︕
Thank you! Fusicは技術が好きなエンジニアを 募集しています