51
AWSを利用した サーバーレス開発の実践 アイレット株式会社 cloudpack事業部 高橋直樹

[20171116 三木会] AWSを利用したサーバーレス開発の実践 by アイレット株式会社 cloudpack事業部 高橋 直樹 氏

Embed Size (px)

Citation preview

AWSを利用したサーバーレス開発の実践

アイレット株式会社 cloudpack事業部

高橋直樹

自己紹介

• 名前 :高橋 直樹(たかはし なおき)

• 仕事 : cloudpack エンジニア

• 好き : AWS, Python, C#, Vue.js,

• 趣味 :お酒・食事・勉強会参加・天一• Facebook : /naoki.takahashi.39501

• Twitter :@uniunix

お約束

本資料の内容と発表での発言は、あくまで個人の見解であり、所属する組織の公式見解ではありません。

AWSサービスを使用する際には、公式サイトの情報を確認の上で、使用してください。(特に費用面)

アジェンダ

• サーバーレス開発とは?• サーバーレスアーキテクチャの特徴• 主な特徴• コストについて• 使用するサービス

• サーバーレス開発で気をつけるべきこと• 制限事項• 開発のコツ

• まとめ

サーバーレス開発とは?

一般的なWebシステムでは、プログラムを動かすためのサーバーが必要となり、スケーラビリティを考えたサーバーの設計や構築、24時間稼働させるための運用方法の検討などが必要になってきます。

サーバーレスなシステムは、その常識を覆すサーバーを必要としないサービス(AWSではLambda)を使用し、サーバー自体のコストだけではなく、保守・運用のコストを削減するための手法です。

サーバーレス開発とは?

具体的には、、

• サーバーレスアーキテクチャNoWebサーバーでプログラムを実行するサービスを、処理の中心に据え、そのほかの機能についても、フルマネージドなサービスで構成するシステム

• サーバーレス開発サーバーレスアーキテクチャによる開発プロジェクト

サーバーレス開発とは?

AWSでは・・・

サーバーレスコンピューティングにより、アプリケーションとサービスを構築して実行する際に、サーバーについて検討する必要がなくなります。サーバーレスアプリケーションでは、サーバーのプロビジョニング、スケーリング、および管理は必要ありません。サーバーレスアプリケーションはほぼすべてのタイプのアプリケーションまたはバックエンドサービス用に構築でき、高可用性を実現しながら、アプリケーションの実行およびスケーリングに必要なことがすべて自動的に行われます。

サーバーレスアプリケーションを構築することで、開発者は、クラウドでもオンプレミスでも、サーバーやランタイムの管理や操作に煩わされず、コア製品に集中することができます。このようなオーバーヘッドの削減によって、開発者は、スケーラブルで信頼性の高い優れた製品の開発に費やすために時間とエネルギーを取り戻すことができます。

参考: https://aws.amazon.com/jp/serverless/

サーバーレス開発とは?

やった!!

これで勝つる!!!

サーバーレス開発とは?

と・・・おもうだろ?

サーバーレス開発とは?

本資料では、サーバーレス開発の良い面だけではなく、サーバーレス開発の課題と言える面やその対策、今後自分がどのようにサーバーレス開発を実践していくか?といったことを発表したいと思います。

アジェンダ

• サーバーレス開発とは?• サーバーレスアーキテクチャの特徴• 主な特徴• コストについて• 使用するサービス

• サーバーレス開発で気をつけるべきこと• 制限事項• 開発のコツ

• まとめ

サーバーレスアーキテクチャの特徴

• 主な特徴• イベント駆動型で実行されるためコストが低い

参照: https://cloudpack.jp/pdf/cloudpack_ServerlessWhitePaper.pdf

サーバーレスアーキテクチャの特徴

• 主な特徴• セキュリティリスクが低いLambdaの実行環境では、実行されるプログラム以外(裏で動いているWebサーバー、OS、ライブラリ等)のセキュリティアップデート等の実施をAWSが責任を持って実施します。

参照: https://cloudpack.jp/pdf/cloudpack_ServerlessWhitePaper.pdf

サーバーレスアーキテクチャの特徴

ただし、もちろん良いことばかりではありません。

サーバーレスアーキテクチャの特徴

• 主な特徴• 設計手法の違いLambdaは、イベント駆動実行され、実行時のメモリ空間(サバーも)は、物理的に独立しています。そのため、1つのWebサーバーで動作するプログラムとは違う考え方で設計しなければいけません。

複数のCPUで、各プログラムが並列に動作するイメージを持って設計する必要があります。

参照: https://cloudpack.jp/pdf/cloudpack_ServerlessWhitePaper.pdf

サーバーレスアーキテクチャの特徴

• 主な特徴• 実行時に制限があるLambdaの実行時間は、一回で最大5分となっています。そのため、実行時間を考えた設計が必要になります。

また、ファイル等の保存は実行環境ではできないため(temp領域はあります)S3などのストレージへ保存して置く必要があります。

(制限事項について、詳しくは後述します)

参照: https://cloudpack.jp/pdf/cloudpack_ServerlessWhitePaper.pdf

アジェンダ

• サーバーレス開発とは?• サーバーレスアーキテクチャの特徴• 主な特徴• コストについて• 使用するサービス

• サーバーレス開発で気をつけるべきこと• 制限事項• 開発のコツ

• まとめ

サーバーレスアーキテクチャの特徴

• コストについてサーバーレス開発では、コスト面で常にWebサーバーを起動しておかなければいけないシステムよりも安くなります。

サーバーレスアーキテクチャの特徴

例えば月にかかる費用を計算すると・・・

• EC2を4台(web x 2 , DB x 2)で構成した場合EC2(t2.medium):$0.0608 /1 時間(東京リージョン)

0.0608 x 24 x 30 = $43.776 = 4 934円 x 4台 = 約2万円

サーバーレスアーキテクチャの特徴

• LambdaとS3で構成した場合1 か月に100万リクエスト、40万 GB-秒の使用時間は無料。

S3の静的ウェブサイトホスティングを利用する場合、

データ容量 : 最初の50TBまで $0.025/GBあたり月

データ転送料: PUT, COPY, POST, LIST $0.0047 / 1000リクエスト

GET $0.0037/ 10000リクエスト

10Gの静的webサイトに、月100万アクセスがあるとして

$0.25 + アクセス($0.37) = $0.62 = 100円未満

サーバーレスアーキテクチャの特徴

立ち上げたばかりのWebサービスであれば、月のアクセスが100万を超えることは、なかなか無いと考えると、Lambdaでの構成が、いかに割安になるかわかると思います。

サーバーレスアーキテクチャの特徴

ただし、もちろん良いことばかりではありません。

サーバーレスアーキテクチャの特徴

サーバーが無いということは開発時の設計をしっかり行わなければ、システムとして破綻するため、開発にかかる費用は一般的な開発よりも高額になります。

アジェンダ

• サーバーレス開発とは?• サーバーレスアーキテクチャの特徴• 主な特徴• コストについて• 使用するサービス

• サーバーレス開発で気をつけるべきこと• 制限事項• 開発のコツ

• まとめ

サーバーレスアーキテクチャの特徴

• 使用するサービスAWSのサービスで、Lambdaと連携(イベントをきっかけにLambdaを呼び出せる)できる主なサービスは次の通りです。

参照:http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invoking-lambda-function.html

• Amazon S3• Amazon DynamoDB• Amazon Kinesis Streams• Amazon Simple Notification Service• Amazon Simple Email Service• Amazon Cognito• AWS CloudFormation• Amazon CloudWatch Logs• Amazon CloudWatch Events• AWS CodeCommit• スケジュールされたイベント (Amazon CloudWatch Events を使用)• AWS Config• Amazon Alexa• Amazon Lex• Amazon API Gateway• AWS IoT ボタン• Amazon CloudFront• Amazon Kinesis Firehose• その他のイベントソース: オンデマンドで Lambda 関数を呼び出す• イベントソースによって公開されたサンプルイベント

参照:http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/invoking-lambda-function.html

• Amazon S3• Amazon DynamoDB• Amazon Kinesis Streams• Amazon Simple Notification Service• Amazon Simple Email Service• Amazon Cognito• AWS CloudFormation• Amazon CloudWatch Logs• Amazon CloudWatch Events• AWS CodeCommit• スケジュールされたイベント (Amazon CloudWatch Events を使用)• AWS Config• Amazon Alexa• Amazon Lex• Amazon API Gateway• AWS IoT ボタン• Amazon CloudFront• Amazon Kinesis Firehose• その他のイベントソース: オンデマンドで Lambda 関数を呼び出す• イベントソースによって公開されたサンプルイベント

おおいわ・・・

サーバーレスアーキテクチャの特徴

よく使うものとしては・・・

• API Gateway

• Cloud Watch Eventsを利用したスケジューリング

この2つさえあれば、大概のことはできると思います。

サーバーレスアーキテクチャの特徴

• API Gateway

Lambdaは他のサービスやWebから直接呼び出すことはできないため、WebシステムでLambdaをフロント側から呼び出す際には、API Gatewayを必ず使用します。

サーバーレスアーキテクチャの特徴

• Cloud Watch Eventsを利用したスケジューリング定期的にLambdaを実行したい場合に使用します。

記載例)

rate(1 minute) ・・・ 1分ごとに実行rate(5 minutes) ・・・ 5分ごとに実行cron(* 2 * * ? * ) ・・・ 2時間ごとに実行

サーバーレスアーキテクチャの特徴

サーバーレスアーキテクチャでの最大のメリットは低いコストでサービスを開始できることです。 と考えると、使用するサービスも、低コストなものを選んでいった方が良いと言えます。

続いて、AWS以外でLambda(API Gateway)と連携するサービスを紹介します。

サーバーレスアーキテクチャの特徴

• データベースデータベースについては、EC2を利用してもRDSを利用しても、それなりの料金がかかります。 私の経験したサーバーレスアーキテクチャのシステムではkintoneをデータベースとして使用しています。

サーバーレスアーキテクチャの特徴

• メール送付システムの中で、メールを送付したいケースは多々あると思います。その際に使用しているサービス。AWSにもSESというサービスがあるのですが、現状ではSendGridが使いやすかったです。

アジェンダ

• サーバーレス開発とは?• サーバーレスアーキテクチャの特徴• 主な特徴• コストについて• 使用するサービス

• サーバーレス開発で気をつけるべきこと• 制限事項• 開発のコツ

• まとめ

サーバーレス開発で気をつけるべきこと

• 制限事項サーバーレス開発では、それ以外の開発では無い様々な制限事項があります。

これらを考慮せずに、開発を進めると思わぬ落とし穴にはまるので、設計時に十分考慮しておきましょう。

サーバーレス開発で気をつけるべきこと

• Lambdaの制限事項• メモリの制限 最小128M 最大1536M

• 最大実行時間 300 秒

• ファイル記述子 1024

• プロセス・スレッド 1024

• 同時実行数 1000/ アカウント

• 環境変数の容量 4 KB

サーバーレス開発で気をつけるべきこと

• Lambdaの制限事項• メモリの制限 最小128M 最大1536M

• 最大実行時間 300 秒

• ファイル記述子 1024

• プロセス・スレッド 1024

• 同時実行数 1000/ アカウント

• 環境変数の容量 4 KB

環境変数に何でもかんでもはダメ。絶対。

サーバーレス開発で気をつけるべきこと

• API Gatewayの制限事項• API数 60

• API あたりのリソース 300

• API あたりのステージ 10

• API キャッシュ TTL 0〜3600秒

• 統合のタイムアウト 30秒

サーバーレス開発で気をつけるべきこと

• API Gatewayの制限事項• API数 60

• API あたりのリソース 300

• API あたりのステージ 10

• API キャッシュ TTL 0〜3600秒

• 統合のタイムアウト 30秒

つまり30秒制限ね。

アジェンダ

• サーバーレス開発とは?• サーバーレスアーキテクチャの特徴• 主な特徴• コストについて• 使用するサービス

• サーバーレス開発で気をつけるべきこと• 制限事項• 開発のコツ

• まとめ

サーバーレス開発で気をつけるべきこと

• 開発のコツサーバーレス開発では、今まで紹介した制限事項を踏まえた上で、設計を行う必要があります。

サーバーレス開発で気をつけるべきこと

• その1 ・・・ そのアーキテクチャでいいの?

本当にサーバーレスアーキテクチャが必要かをよく考える。 正直、開発はサーバーがある場合よりも苦労が多いです。 その上、サーバーレスアーキテクチャでも、あまりにも呼び出し回数が多いようなサービスでは、あるところを境に価格が跳ね上がることがあります。

事前に、サーバーレスアーキテクチャが必要かどうかをよく検討しましょう。

サーバーレス開発で気をつけるべきこと

• その2 ・・・ Lambda関数は小さく分ける

Lambdaで実装を行う場合、大きな一つのLambdaですべてを実装するのではなく「たくさんのLambdaが次々呼び出されることで、全体のシステムが動く」ように、できるだけ小さなLambdaの集合として作るようにします。

サーバーレス開発で気をつけるべきこと

• その3 ・・・ イベントソースについて

基本的には、API GatewayとCloudwatch Eventsで事足りると思いますが、むやみやたらに呼び出すのではなく、

例えば、API Gatewayを直接呼ぶのではなく、Cloud Front経由でキャッシュを使用する。 などすることで、よりコストを抑えた設計が可能になります。

サーバーレス開発で気をつけるべきこと

• その4 ・・・ デプロイは自動化する

たくさんのLambdaを、AWS Consoleから管理するのは非常に大変です。 Serverless Frameworkを使用して管理しましょう。 この際、共通のDeployment Bucketを指定して置くことをお勧めします。

アカウントごとの S3 Bucket数には100という制限があるため、Lambdaが増えてくると制限を超えることがあります。

サーバーレス開発で気をつけるべきこと

• その5 ・・・ SEO対策について

Lambdaで動的にWebサイトを作成する際の注意点として、SEO対策に弱くなる。ということが挙げられます。

これを回避するには、あらかじめLambdaでSSRをおこなた結果をS3に保存して置くなど、一手間かける必要があります。

サーバーレス開発で気をつけるべきこと

• その6 ・・・ 保守・運用について

サーバーレスでは、開発後の保守・運用・・・とくに運用体制についてよく考えておかなければなりません。サーバーレスでのエラーは、サーバー再起動で治ることはないため、アラートが発生した場合に対応できるのは開発者(かそれに類する人)だけという場合が多くなります。 どのようにシステムを監視するか・・・そこまでをプロジェクト開始前に検討しておきましょう。

アジェンダ

• サーバーレス開発とは?• サーバーレスアーキテクチャの特徴• 主な特徴• コストについて• 使用するサービス

• サーバーレス開発で気をつけるべきこと• 制限事項• 開発のコツ

• まとめ

まとめ

• 初期の運用コストは(かなり)安く済む

• サーバー有りとは違った設計が必要

• 運用まで考えた開発を!

参考資料

• cloudpack サーバーレス開発ホワイトペーパー

https://cloudpack.jp/whitepaper/serverless.html

• サーバーレスコンピューティングとアプリケーションhttps://aws.amazon.com/jp/serverless/

• いらすと屋http://www.irasutoya.com/

ご清聴ありがとうございました!