AWS Serverless デジタルバッジを取得する④　アーキテクチャ・移行編

[このデジタルバッジ](https://aws.amazon.com/jp/blogs/news/introducing-new-aws-serverless-digital-learning-badges/)取得のために、AWS Skill Builderの[このコース](https://explore.skillbuilder.aws/learn/lp/1585/serverless-learning-plan-japanese)を学習している記録

自分のスキルレベルは以下。
- SAAは取得
  - 4年前ぐらい
- 実務利用なし
  - 趣味レベルではあり





# Architecting Serverless Applications (Japanese) (Sub) 日本語字幕版

https://explore.skillbuilder.aws/learn/course/14385/architecting-serverless-applications-japanese-sub-ri-ben-yu-zi-mu-ban;lp=1585




## サーバーレスに移行する


### 移行パターン
- インフラストラクチャの抽象化とアーキテクチャのモダナイズ
  - 容量・コスト
  - 運用モデル・開発モデル
  - モノリシック
  - コンテナ化
  - イベント駆動型マイクロサービス
- サーバレス移行パターン
  - リープフロッグ
    - 中間を省略して、オンプレをサーバレスに。
  - オーガニック
    - リフトアンドシフト
  - ストラングラー
    - 徐々にAPIを作成して置き換える。
    - 新機能はサーバレスファースト。


### 移行に関する検討事項

- 検討すべき質問
  - APが何をするか、コンポーネントの構成
  - コマンドクエリ責務分離 (CQRS) パターンに基づいてデータをどのように分割できるか。
  - スケーリング方法
  - スケジュールベースのタスク
  - キューのリッスンするワーカー
  - 現在の実装に影響を及ぼすことなく、機能をリファクタリングまたは拡張できるのはどこか。
- 検討要素（コスト観点
  - インフラコスト
  - 開発コスト
  - 時間コスト


### 参考資料
https://pages.awscloud.com/NAMER-field-GC-Deloitte-TCO-whitepaper-2019-learn.html

## コンピューティングサービスとデータストアを選択する

### サーバーレスコンピューティングに AWS Fargate と AWS Lambda を使用する

- 比較
  - Fargate
    - リフトアンドシフト
    - 長い処理・大きいパッケージ
    - 予測可能・安定
    - 3GB以上メモリ
    - HTTP以外
    - Docker
  - Lambda
    - 15分未満
    - 予測不可・スパイク発生
    - 軽量・ステートレスコンピューティング
    - リアルタイムでのデータ処理
    - 開発運用の複雑さを軽減
- データストア
  - S3
    - 柔軟
    - Lambdaの取得したデータのフィルタリング（S3 Select
  - DynamoDB
    - ミリ秒単位
    - Key-Value
    - DynamoDB Streamsで変更キャプチャして、他データストア要インデックス作成
  - ElastiCache for Redis
    - リアルタイム順位表等にに最適
    - ミリ秒単位
    - インメモリデータストア
  - Amazon Quantum Ledger Database (Amazon QLDB)
    - 安全性を証明できる暗号方式で状態の変化をモデル化
    - 分散型台帳
  - Aurora
  - Aurora Serverless
    - トラフィックにおじたスケール
  - RDS
- データストアの課題
  - 部分的な実行の管理
  - 他ドメインとの共有
  - ETL
    - Glue




### 参考資料

AWS のデータベース: 最適なジョブのための最適なツール
※Skillbuilder内の埋め込み動画

https://docs.aws.amazon.com/pdfs/whitepapers/latest/microservices-on-aws/microservices-on-aws.pdf#page=16




## アプリケーションアーキテクチャパターン

### サーバーレス IT オートメーション
IT オートメーションはサーバーレスコンポーネントが最初に導入される分野の 1 つです。
IT オートメーションのサーバーレス化はリスクが非常に低く、短期間で成果が得られます。



- 例: 設定変更への自動対応
  - セキュリティグループルール
  - CloudWatchイベント
    - ルール変更をイベントとして検知
  - AWS Config
    - Lambda関数をトリガー
  - Lambda
    - 更新が許可されてるルールかを評価。
    - NGの場合はルール削除し、SNSでアラート通知。


### サーバーレスのウェブアプリケーションとモバイルアプリケーション


- 例: ウェブアプリケーション
  - クライアント
  - API Gateway
  - SQS
  - Lambda
  - DynamoDB
  - Cognito
    - ウェブアプリケーション慶友のアクセス認証
  - S3
  - CloudFront
    - 静的コンテンツ配信
- 例: モバイルバックエンド
  - ユーザーの要求
    - リアルタイムのデータと機能豊富なユーザーエクスペリエンス
    - オフライン時や低速接続時にもデータを利用できること
    - デバイス間のデータが同期されること
  - マイクロサービスベースの課題
    - 分散データを取得するのに複数の接続が必要
    - トランザクションデータとクエリデータの組み合わせもサポートする必要
  - 構成
    - クライアント
    - Congnito
    - Appsync
      - 他サービスとのHTTPリクエスト・レスポンスを管理
    - DynamoDB
    - DynamoDB Streams
      - 変更検知し、インデックスをLambda
    - Lambda
    - OpenSearch
    - Amazon Pinpoint
      - クライアントからの分析データをキャプチャし、ユーザーデータに基づいた通知を行う




### サーバーレスアプリケーションに関するベストプラクティス

- 使える技術は作り直さず、あるものを使う。
  - できる限りマネージドサービスを利用
  - 以下も活用
    - [AWS Serverless Application Repository](https://serverlessland.com/patterns)
    - [Serverless Patterns Collection](https://aws.amazon.com/serverless/serverlessrepo/)
    - [The Amazon Builders' Library ](https://aws.amazon.com/builders-library/)
- コードは移植して終わりではない。 
  - 他最初は移植でも、再検討は必要
- 最新の状態に保つ。
  - 最新のサービス・アップデート情報に対するキャッチアップ
- できる限り、べき等でステートレスな関数を使う。
  - できない場合は、ステートフルコントロール (再試行、長時間実行) が必要な Step Functions を使用します。
- イベントはできる限り AWS のサービス内で保持する。
  - できる限りコードを記述せず、AWS のサービス間直接通信させる
- すべての関連サービスの制限を確認する。
  - ほとんどの AWS クォータに関しては、[AWS Service Quotas](https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws_service_limits.html) コンソールを使用して、表示および引き上げのリクエストができます。








## まとめ・その他。

前のコースがボリュームあったのですが、このコースは比較すると少なかったです。
想定時間が同じ2hと書いてあるので、ここは結構適当かもしれません。

例がシンプルな構成パターン多く、ベストプラクティスの話もあるので、先にこっちのコースをやってからのほうが理解がしやすいかもしれません。

あと、本編とは別に、突如AWS認定の宣伝動画が追加されてました。
これもコース全体の進捗率を表示するインジケーターに含まれているようですが、一度閲覧するとロックされ、視聴を完了出来ず、100%に出来なくなりました。


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459468/a4314b87-4fd2-56f3-5994-84481691c1bb.png)





証明書のダウンロードはできるし、プランの画面からは進捗率100%になっているので、デジタルバッジ取得には影響なさそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2459468/2bd7e0ca-c3b6-816b-0780-d69a37eb2063.png)