Slide 1

Slide 1 text

Goで作るAWSツール JAWS-UG福岡
 6度目もちょっと濃い目にAWSの話をしてみよう !1 株式会社Fusic @seike460

Slide 2

Slide 2 text

seike460 seike460 seike460 seike460 株式会社Fusic 清家史郎 (@seike460) !2 # 得意な技術 - PHP - Server - AWS - Backend # 得意になりたい技術 - golang - Serverless

Slide 3

Slide 3 text

皆さん、AWS使ってますか? !3

Slide 4

Slide 4 text

最高ですよね! !4

Slide 5

Slide 5 text

でもたまにもっと自分色に染めたい
 って思うことありませんか? !5

Slide 6

Slide 6 text

私の体験例を少し… !6

Slide 7

Slide 7 text

!7 みんな大好き

Slide 8

Slide 8 text

!8 こんなサーバレス作りました • API Gatewayで送信データを受け取る • Lambdaでデータをバリデーション、問題なければS3に保存

Slide 9

Slide 9 text

バグってるっポイとの報告
 ↓
 S3データの調査
 (結果バグでは無くて勘違い !9 運用中…

Slide 10

Slide 10 text

!10 バケット選んで

Slide 11

Slide 11 text

!11 ディレクトリ選んで

Slide 12

Slide 12 text

!12 ディレクトリ選んで × 階層分(メンドイ)

Slide 13

Slide 13 text

!13 ファイルを選んで 多い…検索だ!

Slide 14

Slide 14 text

!14 プレフィックス。。。部分一致がイイな ҎԼ༷ʹϑΝΠϧ໊ΛΧςΰϥΠζͯͨ͠
 JEUZQFBDUJPOKTPO
 ॊೈʹݕࡧ͍ͨ͠ɻɻɻ

Slide 15

Slide 15 text

CLI | grepでも解決出来る
 何度も実行しなければならない
 リアルタイム検索あったらなー… !15

Slide 16

Slide 16 text

作りました !16

Slide 17

Slide 17 text

s3ry !17

Slide 18

Slide 18 text

• Go製のAWS S3 操作CLI • https://github.com/seike460/s3ry • アップロード • ダウンロード • 削除 • ファイルリスト作成 !18 s3ry(エスリー)

Slide 19

Slide 19 text

デモ !19

Slide 20

Slide 20 text

• Go製のAWS S3 操作CLI • https://github.com/seike460/s3ry • アップロード • ダウンロード • 削除 • ファイルリスト作成 • 凄くコンパクトにCLIツールが作れた
 Goはミニマム利用しやすいパッケージが多い
 ■プロンプトツール
 https://github.com/manifoldco/promptui
 ■みんな大好きSDK
 https://github.com/aws/aws-sdk-go
 ※https://github.com/aws/aws-sdk-go-v2もあります
 • 鋭意機能追加中(現在東京region固定、syncが無い等… !20 s3ry(エスリー)

Slide 21

Slide 21 text

次の体験例 !21

Slide 22

Slide 22 text

• 弊社、Slack無いと生きてきません。常に開いています • Todoは無料アプリ
 スケジュールはicalで出力出来るグループウェアで管理してました • 僕の頭にはこの情報を保持できるメモリ容量はありませんでした
 (内部MTGスッポカシた事あります • 記憶も大事ですよ?でも時代はpollingではなくてpushですよね
 (僕は悪くない
 • Slackが通知してくれる事で業務中にコードに集中出来る
 (むしろ予定を忘れていた方が効率的なんだ • この課題を解決するServerlessで作ろう(お金は書けたくない
 (嘘です、本当にごめんなさい !22

Slide 23

Slide 23 text

AWS S3で運用するSPA !23

Slide 24

Slide 24 text

utakata !24

Slide 25

Slide 25 text

!25 utakata Architecture

Slide 26

Slide 26 text

なに使ってるの? !26

Slide 27

Slide 27 text

react-redux !27

Slide 28

Slide 28 text

• React • Facebook社製のViewライブラリ • Redux • 状態管理を行なうライブラリ • React+Reduxすると何が良いのか? • Reduxが状態管理してReactは描画だけに集中出来る !28 react-redux

Slide 29

Slide 29 text

!29 人気 + α(後述)

Slide 30

Slide 30 text

AWS Amplify !30

Slide 31

Slide 31 text

• AWS製のJavaScriptライブラリ • Amazon Cognitoと連携した認証部分を行なってくれる • React用のComponentを利用するだけでログイン画面が完成 !31 AWS Amplify

Slide 32

Slide 32 text

lestrrat-go/ical !32

Slide 33

Slide 33 text

• @lestrratさんが作成しているical読み込みライブラリ
 面倒なicalをmapに展開してくれる為、凄く助かった !33 lestrrat-go/ical

Slide 34

Slide 34 text

Serverless Framework !34

Slide 35

Slide 35 text

• 主にAWS LambdaとAWS API Gatewayを使った
 いわゆるServerlessを作成出来るFramework • AWS LambdaがGo対応したら即Go対応取り込んでくれた(最高) • npmを利用してインストールすることができます • 簡単にServerless Architectureを作成して、
 Serverlessすることが可能 !35 Serverless Framework

Slide 36

Slide 36 text

serverless.ymlを設定 • runtimeをgo1.xにする • handlerをコンパイルした
 Goバイナリを指定する !36

Slide 37

Slide 37 text

go buildする時の注意点 • Serverless Frameworkが指定するバイナリをbuildする時は
 GOOS=linuxをつける事を忘れずに! • build用のシェルを npm run deploy時に実行するようにしました
 (もっと良い方法あれば是非教えてください!) !37

Slide 38

Slide 38 text

!38 npm run deploy

Slide 39

Slide 39 text

デモ !39

Slide 40

Slide 40 text

• Go製のAWS S3 SPA • https://github.com/seike460/utakata • react-reduxを使ったSPA • AWS Amplifyを使った認証機構 • Serverless Frameworkを使ったデプロイ • α版 鋭意作成中
 諸事情によりプログラムは最新ではないです(主にセキュry) • WEBUIを利用しなくても利用できる様に
 Slack通知部分等は別パッケージにしようと構想中 !40 utakata(泡沫)

Slide 41

Slide 41 text

これで俺のスケジュール 管理は完璧だ!!!!! !41

Slide 42

Slide 42 text

待てよ…
 システムが止まったら… !42

Slide 43

Slide 43 text

エラーに怯える日々は嫌だ… !43

Slide 44

Slide 44 text

Fusicではある
 エラートラッキングツール を使ってます !44

Slide 45

Slide 45 text

!45 Faultline

Slide 46

Slide 46 text

!46 faultline Architecture • @k1LoWさんが作っているエラートラッキングツール • Error発生時にそのエラー情報をDynamoDBに保存 (WEBUI有 • Slackにも通知してくれ、即座にWEBUIから状況分析、対応が可能

Slide 47

Slide 47 text

Go版を使おう! !47

Slide 48

Slide 48 text

!48 なるほど…

Slide 49

Slide 49 text

OSSの借りはOSSで返すんだ! !49

Slide 50

Slide 50 text

faultline-go !50

Slide 51

Slide 51 text

• Go製のfaultline sender
 エラー発生時にfaultlineにデータを送付 • Slackにもデータ送付
 • …を作ってたのですが発表駆動開発に失敗…
 Go力不足でした。。。 !51 faultline-go

Slide 52

Slide 52 text

• AWS Lambdaが golang 対応したことをきっかけに
 AWS + golangを試したが相性が良い • コンパクトにAWSツールを作成出来る
 • AWSにこんな機能があれば…と思っているあなた
 →作っちゃいましょう • 一緒に AWS + golang 盛り上げて行きましょう!!!! !52 まとめ

Slide 53

Slide 53 text

ご清聴ありがとうございました! !53 株式会社Fusicは技術の大好きなエンジニアを募集してます!