サーバーレスとは

# 概要
* サーバーレスとは何かの定義と特徴をまとめ、AWSの主なサービスおよびユースケースをまとめました
* 対象読者はサーバーレスの入門者およびサーバーレスで実装してみたいユースケースのある方です

# 定義
利用者によるサーバーのプロビジョニングやメンテナンス、耐障害性の確保が不要なサービス
> プロビジョニングとは、必要に応じてネットワークやコンピューターの設備などのリソースを提供できるよう予測し、準備しておくこと
耐障害性は、何か障害が起きたときでもシステムのパフォーマンスを落とすことなくシステムを稼働し続けられる冗長構成のこと

## 代表的なサーバーレスAWSサービス
### Amazon QuickSight
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221272/18b98166-9f96-4d09-c93c-c097b1a2da17.png)
クラウド駆動の高速なBI（ビジネスインテリジェンス）サービス

### Amazon Kinesis
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221272/92811664-8a2f-974a-7405-37b086d96f07.png)
動画とデータストリームをリアルタイムで収集、処理、分析するためのサービス

### Amazon Simple Queue Service
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221272/196115a5-c98e-6413-e9a6-98d7c37baeb6.png)
完全マネージド型のメッセージキューイングサービス

### AWS AppSync
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221272/58f6c33c-23d1-1b2d-8fab-fedce578db07.png)
GraphQLを使用してアプリケーションが必要なデータを正確に取得できるようにするマネージド型サービス

### AWS Lambda
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221272/4529ba95-799e-03ed-f2b7-6a338da4816a.png)
サーバーのプロビジョニングや管理をすることなくコードを実行できるコンピューティングサービス

### Amazon DynamoDB
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221272/edf934e6-5dc2-20ca-2760-b02b33fbd8c3.png)
規模に関係なく高速で柔軟なパフォーマンスを実現するNoSQLデータベースサービス

### Amazon Personalize
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221272/67913fd4-dc17-e365-2fe8-099aad260016.png)
アプリケーションを使用している顧客に対して開発者が個別のレコメンデーションを簡単に作成できるようにする機械学習サービス

### Amazon CloudWatch
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221272/567cc70e-8cee-97c2-7785-fc3803a48c5d.png)
AWSのリソースとアプリケーションのモニタリング/おブザーbアビリティサービス

### AWS Systems Manager
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221272/8b18816d-ae82-38f4-425a-a52729a94eba.png)
AWSで利用中のインフラストラクチャを可視化し、制御するためのサービス

### Amazon API Gateway
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221272/73749096-ec57-6224-2c6a-c4dd72195152.png)
規模に応じたAPIの作成、公開、保守、モニタリング、保護を行えるサービス

### Elastic Load Balancing
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221272/02f2f05a-7afd-bed1-2bf4-351ad72f052b.png)
アプリケーションへのトラフィックを複数のターゲットに自動的に分散するサービス

### Amazon Cognito
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/221272/edaa5f73-9e6a-46e2-4042-f4e30b4a92ef.png)
シンプルでセキュアなユーザーのサインアップ、サインイン、アクセスコントロールの機能を実現するサービス

# 主な特徴
* サーバーの管理が不要
    * 事前に調達が不要
    * 必要なときにプロビジョニング可能
    * インフラの保守・運用をクラウドサービス事業者（AWSなど）が実施
* 価値に対する支払い
    * 利用したリソースや処理時間等を元にした従量課金性
    * 初期投資不要
* 柔軟なスケーリング
    * 利用状況に応じてスケールアウト・スケールインを自動的に実施
* 自動化された高可用性
    * 冗長化構成等の可用性、耐障害性を高める仕組みが組み込み済み

# AWSにおけるユースケース
## 動的Web/モバイルバックエンド
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-DynamicWeb.3ba6461f647c5156223f5b6710f151c7c542a67a">
[関連資料](https://d1.awsstatic.com/International/ja_JP/Whitepapers/AWS-Serverless-Multi-Tier-Architectures_JA.pdf)
[チュートリアル](https://aws.amazon.com/jp/serverless/build-a-web-app/)
[チュートリアル -中級編-](https://aws.amazon.com/jp/getting-started/projects/build-modern-app-fargate-lambda-dynamodb-python/)

## リアルタイムモバイル/オフライン対応
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-InteractiveMobile.8478f61ce74367f8a92fe25caca12928baf90574">
[関連資料](https://d1.awsstatic.com/webinars/jp/pdf/services/20180523_AWS-BlackBelt_AppSync.pdf)
[AWSマンガ](https://aws.amazon.com/jp/campaigns/manga/vol4-1/)

## 業務系API/グループ企業間API
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-API.3799cfbf513ccda87b8ca7431fc43f8dd1d15dbc.png">
[Private API記事（英語）](https://aws.amazon.com/jp/blogs/compute/introducing-amazon-api-gateway-private-endpoints/)
[VPC Lambda記事](https://aws.amazon.com/jp/blogs/news/announcing-improved-vpc-networking-for-aws-lambda-functions/)
[関連事例](https://kabu.com/company/pressrelease/20180807_1.html)

## Push配信系・インタラクティブAPI
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-InteractiveAPI.98771ee49fd6949d41f3f7288c0476689ba0876b.png">
[関連サイト](https://aws.amazon.com/jp/blogs/news/announcing-websocket-apis-in-amazon-api-gateway/)
[AppRepositoryサンプル（英語）](https://serverlessrepo.aws.amazon.com/applications/arn:aws:serverlessrepo:us-east-1:729047367331:applications~simple-websockets-chat-app)

## 画像処理/シンプルなデータ加工
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-S3-processing.0a24e9465dec531156f56ce1c961d00a8e529f3a.png">
[チュートリアル](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-example.html)
[関連事例](https://speakerdeck.com/sho3334/images-object-zozo)
[ソリューション（英語）](https://aws.amazon.com/jp/solutions/serverless-image-handler/)

## 分散並列処理
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-DistProcessing.b75363f28ccf686739b931fd0a4f729ccef40ec4.png">
[関連事例1](https://d1.awsstatic.com/events/jp/2017/summit/devday/D4T8-4.pdf)
[関連事例2（英語）](https://www.slideshare.net/AmazonWebServices/serverless-design-patterns-for-rethinking-traditional-enterprise-application-approaches-aws-public-sector-summit-2017/18)
[参考アーキテクチャ（英語）](https://github.com/awslabs/lambda-refarch-mapreduce)

## イベント駆動の業務分散処理連携
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-Integration.77b207fd045bc2283fe06cb76dc934764ca7114a.png">
[SQS連携機能](https://aws.amazon.com/jp/serverless/patterns/sqs-lambda/)
[設定ガイド/チュートリアル](https://d1.awsstatic.com/serverless-jp/20181022-LambdaxSQS.pdf)
[サンプルコード](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-sqs-create-package.html)

## アプリケーションフロー処理
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-AppFlow.0a8b19cf6ca2bcd716453c29753915c1d8154a32.png">
[ワークフローチュートリアル](https://aws.amazon.com/jp/getting-started/tutorials/create-a-serverless-workflow-step-functions-lambda/)
[エラー処理チュートリアル](https://aws.amazon.com/jp/getting-started/tutorials/handle-serverless-application-errors-step-functions-lambda/)

## 流入データの連続処理
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-Streaming.7b2876deed217d21f4e4e326fe1535be25cb9603.png">
[関連資料](https://d1.awsstatic.com/International/ja_JP/Whitepapers/Serverless_Streaming_Architecture_Best_Practices_JA.pdf)
[参考アーキテクチャ](https://github.com/aws-samples/lambda-refarch-streamprocessing)
[チュートリアル1](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-kinesis-example.html)
[チュートリアル2](https://aws.amazon.com/jp/getting-started/projects/build-serverless-real-time-data-processing-app-lambda-kinesis-s3-dynamodb-cognito-athena/)

## IoTバックエンド
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-IoTcore.9240f158a1e89eadbc7b65b9023b63ae45ecf9a7.png">
[関連資料](https://d1.awsstatic.com/International/ja_JP/Whitepapers/Serverless_Streaming_Architecture_Best_Practices_JA.pdf)
[関連事例動画](https://www.youtube.com/watch?v=XOc33az3I_0)
[参考アーキテクチャ](https://github.com/aws-samples/lambda-refarch-iotbackend)
[ソリューション1（英語）](https://aws.amazon.com/jp/solutions/smart-product-solution/)
[ソリューション2（英語）](https://aws.amazon.com/jp/solutions/aws-connected-vehicle-solution/)

## チャットボット/Alexaスキル
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-chatbot.e0bda3b2aa4165f12a0a4212582d60ca86c0116d.png">
[参考アーキテクチャ](https://github.com/aws-samples/lambda-refarch-image-moderation-chatbot)

## データ変更トリガー処理
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-DDBstreams.8023bd648f68f398534551c24cb06150f216f913.png">
[活用例](https://aws.amazon.com/jp/blogs/news/anomaly-detection-on-amazon-dynamodb-streams-using-the-amazon-sagemaker-random-cut-forest-algorithm/)
[チュートリアル](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-ddb-example.html)

## ログデータ収集処理
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-LogCollection.0086ae195a23e4d1355ab9a320761b4d3be485ce.png">
[関連記事](https://aws.amazon.com/jp/blogs/news/analyze-and-visualize-your-vpc-network-traffic-using-amazon-kinesis-and-amazon-athena/)
[関連資料](https://d1.awsstatic.com/International/ja_JP/Whitepapers/Serverless_Streaming_Architecture_Best_Practices_JA.pdf)
[データ変換ブループリント](https://docs.aws.amazon.com/ja_jp/firehose/latest/dev/data-transformation.html)

## データレイク周りのデータ加工
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-DataLakeProcessing.bcb3cb96d1c8a23f3b468038fecdfefb5bc04afb.png">
[ソリューション](https://aws.amazon.com/jp/solutions/data-lake-solution/)
[DB Loader](https://github.com/awslabs/aws-lambda-redshift-loader)
[包括的ソリューション](https://aws.amazon.com/jp/lake-formation/)

## 機械学習/ETLデータパイプライン
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-MLpipeline.c41b73dbe93ea167718c3721de0e943a00f4ffb2.png">
[関連記事1](https://aws.amazon.com/jp/blogs/news/orchestrate-multiple-etl-jobs-using-aws-step-functions-and-aws-lambda/)
[関連記事2](https://aws.amazon.com/jp/blogs/news/automated-and-continuous-deployment-of-amazon-sagemaker-models-with-aws-step-functions/)
[機能紹介動画](https://www.youtube.com/watch?v=dNb5jVffzPs)
[関連事例](https://www.slideshare.net/shoujishirotori/the-design-for-serverless-etl-pipeline-489)

## スケジュール・ジョブ/SaaSイベント
<img src="https://d1.awsstatic.com/serverless-jp/pattern/Pattern-ScheduledCron_Events.00c65a9d5304400258c5eaa5f7feb3f69f71cdb1.png">
[関連資料](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/services-cloudwatchevents.html)
[SAMテンプレート](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-scheduledevents-example-use-app-spec.html)
[ソリューション（英語）](https://aws.amazon.com/jp/solutions/fraud-detection-using-machine-learning/)