Home
Slides
Blog
slide.seike460.com
Home
Slides
Blog
Home
Slides
Fukuoka Developers #3
Fukuoka Developers #3
Fukuoka Developers #3
2019年3月15日
General
Development
Serverless
AWS
Keyboard Shortcuts
←
→
Navigate slides
Space
Next slide
F
Fullscreen
ESC
Exit fullscreen
Home
First slide
End
Last slide
B
.
Pause
S
Speaker notes
?
Reveal.js help
Close
## Goで利用するAWS fukuoka_dev #3 清家史郎(@seike460)
## Who? ### 清家史郎 @seike460   ##### Fusic Co., Ltd. Evangelist ###### AWS Certified SA Professional
## tech - Program Language - PHP - Go - infrastructure - Server, Network - IaC - AWS - Other - Serverless - Vue.js、React
## OSS products - AWS Tools (Go) - [s3ry](https://github.com/seike460/s3ry) - S3 prompt cli - [utakata](https://github.com/seike460/utakata) - Serverless Slack iCal Notificator - [FictionBase](https://github.com/fictionbase/fictionbase) - Serverless Runtime Base
### このスライドにて伝えたいこと - AWSにて選択出来る実行環境の整理 - Go & AWS Serverlessを選択する理由 - 何でもLambdaではない
### Agenda - 従来のWEB開発とAWSを利用した開発 - Go x Serverless - Lambdaの失敗例 - まとめ
## 従来のWEB開発 - HTTP Server - Apache - Nginx - Application - PHP - Ruby - Memory Store - memcached - Redis - DB - MySQL - Postgresql - SMTP - Postfix - Sendmail
### ツラミ - サーバーの保守 - OS側の各種アップデート - ソフトウェアの各種アップデート - スパイクに対する対応 - サーバー管理 - 各Roleのサーバ状況を均一に (setup.sh) - あるサーバーのみSSHにて手動で変更を加えズレたり...
僕たちがやりたい事はインフラの管理じゃなくて 顧客に価値を届ける事なんだ... 
## マネージドサービスを利用した開発 - HTTP Server - S3 & CloudFront - Application - ECS - Lambda - Memory Store - Amazon ElastiCache - DB - Amazon RDS - Amazon DynamoDB - SMTP - Amazon SES
###### インフラ管理からの解放 - サーバー管理からの解放 - セキュリティパッチからの解放 (諸説有) ###### 運用負荷の大幅軽減 - Auto Scaling - オペレーションの低減 ###### 費用の最適化 - リクエスト、利用に対する支払い
## ビジネスロジックへの集中 #### Serverless
## Serverless 一つのタスクの実行期間を超えて、ファイルシステムやメモリ上の変数など サーバ固有のリソースに依存しない制約を満たすプログラミングモデル 参考:[もう「サーバーレスだけどサーバあるじゃん」という話をしたくない](https://d.nekoruri.jp/entry/2019/05/10/serverless)
## AWSにおける3つのRuntime環境 - 仮想サーバー - 文字通りサーバーとして利用 - 自由度が高い ≒ 管理の手間が多い #### EC2 - コンテナ - 各アプリケーションに閉じたコンテナとして利用 - 自由度はサーバーより下がるが、スケールコントロールしやすい #### ECS (fargate、AWS Batch) - FaaS - 関数単位での利用 - 自由度は下がるが管理のコストは極小 #### Lambda
### Serverless プログラミングモデルを利用する
## 例 
## ステートレスな関数 Lambdaもコンテナで有り、一定期間アクセスが無いとstopする 関数外リソースへに頻繁にアクセスする必要があり 処理待ち(ブロック)は避けられない
## Go x Lambda Lambdaはスレッドを利用出来る -> goroutine (軽量スレッド) の利用が可能なので、 関数外リソースアクセス時の処理ブロック時間を有効活用可能
## goroutineとは Goにて利用出来る軽量スレッドで、非常に簡単に利用出来る ``` ch := make(chan string) go func() { … ① time.Sleep(100 * time.Millisecond) fmt.Println("Hello") ch <- "World" }() fmt.Println("Go") ... ② fmt.Println(<- ch) ... ③ fmt.Println("!!!") ... ④ ``` 1. goroutine 発行してtime.SleepdでWaitして「Hello」出力 2. goroutineを発行後、その結果を待たず「Go」を出力 3. 「ch」の値を待ってから、「World」を出力 4. 「!!!」を出力 出力結果 ``` Go Hello World !!! ```
## Lambdaの実行速度 Lambdaは実行時間単位課金なので早く終了したい - Goの単純な速度 - goroutineを利用した関数リソースアクセス GoとLambdaの相性は良い!
Full Lambda のみで構築を極めると幸せになるのでは...?🤔 当たり前だけどそんな事はない
## 定期Batch処理 - Lambda - ECS - AWS Batch
##### ある案件を引き継いだ Lambdaを定期実行して外部APIから取得した結果をRDSに保存 実行完了ファイルをS3に配置  とてもシンプルそう
.....!!!!!!!!!!!!!!! 
###### どうしてこうなった - Lambdaで行こうと決まった - 思ったよりAPIのデータ取得時間かかる - 実行時間制限あるので並列でガガッとデータ取ってよいか? - ダメ、秒間〇〇アクセスまで - 処理の中間ファイルをS3置いてそのイベントを元に次の処理実行 - どんどん機能増える - 複雑化 - どんどんユーザ増える - 遅くなっていく
## 何を解消しないといけないのか - ログがもうわけわかんない - 複雑さを解消したい - 速度を出したい
## どうするか - そもそもLambdaである必要がない - だけどEC2を常時立てておくのは避けたい ###### Lambdaを捨ててAWS Batch化 & Go化しました
 - AWS Batchのみで完結するようにシンプルな構成へ - 中間ファイルが無くなりシンプルに - goroutine の数を制御しながら外部APIアクセス Lambda(と追加要件等)により複雑化してしまった定期処理を改善出来た
## 今ある問題点 AWS Batchの動作として以下の通り 1. 起動 2. EC2が立ち上がる 3. ECSよりコンテナイメージ取得 4. 実行 ②がなかなか趣のある起動速度なので fargate化したいと思う今日この頃
###### まとめ - マネージドサービスを利用した開発は当たり前になってきている - 自分たちの管理範囲を絞った開発を行い、管理レスを進める - Serverlessなアーキテクチャは各種ServiceへのRequestが多発 - Goならgoroutineでブロック時間を簡単に有効活用 - 何でもLambdaにすれば良い訳ではない - 実行時間、要件に応じてコンテナを利用するとよい
###### 宣伝  - ServerlessDays 2019 Tokyo - 2019年10月21日 ワークショップ@DMMラボ - 2019年10月22日 カンファレンスデイ@Tabloid - ServerlessDays 2019 Fukuoka - 2019年12月13日 ワークショップ@会場最終調整中 - 2019年12月14日 カンファレンスデイ@LINE Fukuoka [福岡はまだCFPオープンしています!!!!](https://www.papercall.io/slsdaysfukuoka2019)
Thank you! Fusicは技術が大好きなエンジニアを募集しています  https://fusic.github.io
Swipe to navigate
Previous
Next
Related Slides
Fukuoka LT 2019
2019/12/20
View
kixs vol.8
2019/10/26
View
ちびでべろっぱぁ〜ず #11
2019/8/3
View