ソリューションアーキテクト対策_サーバーレスとメッセージング他あれこれ篇

## はじめに
試験勉強した際のメモを自分用に記事化。
内容は公式やBlack Beltの写経ですので目新しいことはありません:pray:


## SESのサービスの認識
ユーザーにEメール送信機能を実装することができる。認識通りでおk


## SQS
### SQSとは
これがめっちゃわかりやすい。
https://qiita.com/miyuki_samitani/items/e46ef9452fcd73f9d240

アプリケーションとアプリケーションの間に置いて、メッセージを代わりに送ってもらう。
メッセージの送信元がプロデューサー、メッセージを受け取るのがコンシューマー。


### SQSはFIFO
よってメッセージの順序が守られる。
また、システム処理を分散して負荷分散を可能にする。なので水平スケーリングに役立つ。

キューに優先順位をつけたりもできる。なので有料会員/無料会員で処理の優先順位の差別化が実現できる。


### SQSについて
以下のようにワーカープロセスの分散処理化に使えたりする。

送信処理→メッセージを送信→キューに保存⇄受信処理(メッセージの有無を問い合わせて、あれば受信する)


### SQSの可視性タイムアウト
メッセージの重複送信を防ぐための役割とのこと。
処理担当のインスタンス以外からは一定時間(30秒〜12時間)キューが見えなくなる機能で、他のコンシューマーが同じメッセージを処理しないようにする。
OrderIDを設定したりするやり方は存在しない。


### SQSの用語
- デッドレターキュー
正常に処理できないメッセージの送信先として、他のキューが使用できるキューのこと

- メッセージ重複排除ID
よくわからない。このID(トークン)があるメッセージが送信された場合は5分間待機するらしい


### SQSの制限について
SQSキューに保存できるメッセージは無制限。
メッセージの最大サイズは256MB(拡張クライアントライブラリーを使用すると2GB)。
また、メッセージは保持期間の間は保存される。
┗ デフォルトは4日間(最小60秒〜最大14日間で設定が可能)
┗ アプリケーション上でメッセージを削除する処理を実施しないと、期間を超過するまでキューが滞留してしまう


## AWS SAMとは
Serverless Application Model、サーバーレスアプリケーション構築用のオープンソースのフレームワーク。

- IngressとEgressとは
これが詳しい
https://www.manageengine.jp/support/kb/NetFlow_Analyzer/?p=710

ネットワーク機器を空港とフライトで例えると、
ingress：パケットの出国審査
egress：パケットの入国審査
パケットがNW機器に入るタイミングと出るタイミングで、どのパケットがどこから来てどこへ行くのかを確認/記録する。

- なので
SAMを利用して構成展開をする際、CloudFormationを使って展開する。
展開にはLambdaからDynamoDBへのアクセスを許可してあげる必要がある。
なので、RDS側のセキュリティグループIngressに、Lambdaのセキュリティグループを許可する設定が必要。★これが言いたい


## SNS
### マイクロサービスアーキテクチャとSNS
マイクロサービスの複数コンポーネント間のイベント発生とトリガーとして通知連携する場合はSNSを使う。
SNSトピックにメッセージを送信(publish)すると、トピックを購読(subscribe)しているsubscriberにメッセージを一斉送信できる。
プッシュ型の連携処理や通知機能の実装にはSNSが適している。

### SNSとSQSは組み合わせることができる
例。
「クライアントがDBに登録する」をトリガーにSNSがメッセージをSQSに通知→複数のEC2インスタンスを利用した並列処理を行う

とか。もちろんSQSの後列にLambdaを配置することも可能


## OpsWorks
OpsWorksはアプリケーションレイヤーごとのスタックを定義できる。
なので`インフラの自動化`と捉える。
サービスの理解自体はRubyやChefを使った設定管理サービス。

- OpsWorksの概要★
スタックという塊の中にLBレイヤー、DBレイヤー、Webレイヤーというような形で複数配置する。
そのレイヤーを構築する手順をRubyやChefを使って書く！！
あとはレシピを実行する。


## Elastic Beanstalk
Elastic Beanstalkはアプリケーションレイヤーごとのスタックを定義できない。
なので`アプリケーションのデプロイ自動化`と捉える。

- Elastic Beanstalkの補足
使い慣れたいつものやつ。ただし、
┗ ELBとAutoscallingを利用してスケーラブルなデプロイを自動化できる
┗ アプリケーションのバージョン管理を自動化できる
┗ Dockerを使って監視の詳細を自動的に処理できる

- Elastic Beanstalkの概要★
簡単に書くと、書いたコード(アプリ)をデプロイするだけ。
それ以外のインフラは自動で構築してくれる。

Elastic Beanstalkが定番構成(ELB, EC2, RDS)をミドルウェアをインストールした状態で構築してくれる。
なのであとはコードをデプロイするだけ！というふうに理解すること。


## API GateWay
### API GateWayの権限について
IAMで権限管理ができる。IAMポリシーを使用して、開発者/管理者/ユーザーとか分けたりできる

### APIゲートウェイのスロットリングの利用
#### サーバー側のスロットリング制限
全てのクライアントに対するリクエストを制限する。
全体のリクエストが多すぎるためにバックエンドサービスが処理しきれなくなることを防げる。

#### クライアントあたりのスロットリング制限
クライアントごとに「使用量プラン」に応じて制限を行う。
特定のユーザーからのリクエストが多い場合に有効。

#### 自前のAPIプログラムをAWSにホストしたい場合
LambdaとAPI Gatewayを連携させることで実現可能。容易にAPIを生成・管理することができる。

<img width="600" alt="スクリーンショット 2022-09-21 11.56.09.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/278897/22688cfc-903b-e107-a9eb-397e158a4b71.png">


以下は間違えやすい点。

・CloudFrontをAPI Gatewayの前に置くことはできるが、GWとAPIプログラムの間に置くことはできない。
・API GatewayからバックエンドサーバーとなるEC2インスタンスを呼び出してデータ処理することはできるが、Lambdaを利用した方がコスト最適。
・また、EC2インスタンスをELB配下に設置しても同じ。Lambdaを利用した方がコスト最適。


## 10.VM Import/Exportとは
オンプレ環境をAWSにインポートしたい時に使う。
AWSにインポートした後の環境はオンプレにエクスポートが可能。


## 11.DirectConnect
Direct ConnectはオンプレとAWS間をVPN接続する時に使う。
また、オンプレとAWSの物理接続なので、環境を準備するのに時間がかかる。
時間がない場合はAWSサイト間VPN接続を利用するとインターネットを介したVPNトンネルが作成できる。
急いでいる場合は後者が良い。


## 13.AWS CloudHSMとは
安全なキーストレージや高パフォーマンスの暗号化オペレーションをAWSアプリケーションに対して簡単に追加できるようにするクラウドベースのマネージド型ハードウェアセキュリティモジュール。
米国のセキュリティ基準を超えてたりする。KMSよりセキュアで法令監査とかに向いてる。


## 14.AWS Budgetsとは
カスタム予算を設定して、コストまたは使用量が予算額や予算量を超えた時にアラートを発信できるサービス。


## 15.DataPipeline
様々なAWSデータベースやストレージ間のデータの移動と変換を自動化するサービス。定期的にタスクを実行できる。
DynamaDBストリームも同じことができるけど、イベント起動になる。定期的にデータを取得したい場合は前者を使う。

### SQSとSNS、Data PipelineをKinesisと比較してみる
- SQS
FIFOではない
重複送信されないことを保証しない
EMRに送信されたデータ解析処理にキューは使えない

- SNS
一度に送受信される大量のメッセージを処理できない可能性がある。
また、メッセージを受信した順番で送信することを保証しない。

- Data Pipeline
主にクラウドベースのデータワークフローサービスとして使用される。
異なるAWSサービスと、オンプレミスデータソース間でデータを処理・移動するのに利用される。


## 17.AWS Step Functions
サーバーレスのオーケストレーションサービス。
AWSリソースと組み合わせたワークフローを作成できる。
人間による手動アクションを組み込めるので、これが問題(タスク停滞)の原因になる可能性がある。
最長で1年実行可能。エラーが発生した時に再起動するとかは不要。

SQSはキューによるタスク処理しかできないが、Step Functionであれば人的な確認プロセスを含めたワークフローをシステム化できる。
旧版はSWF(Simple WorkFlow)。現在は一部のワークフローを除き、利用を推奨されていない。

Step FunctionとSQSはオンプレ〜AWSリソースを利用した分散アーキテクチャ環境でも利用できる。


## 18.サーバレスアーキテクチャとRDB
サーバレスアーキテクチャとRDBは互換性が低いらしい。
なのでAWSでサーバレスアーキテクチャを実装するときはRDSとAuroraは向かない。
そういう場合はDynamoDBが適している。ElastiCacheはインメモリ型でキャッシュとして機能する。
Lambda関数を起動するデータ処理イベントには不向き。


## 17.Amazon DLM(Data Lifecycle Manager)
EBSのスナップショットの作成、保存、削除を自動的に行うためにDLMで設定を行う。
EBSの自動バックアップでもスナップショットは取れるが、ライフサイクルの設定はできない。


## 19.Cognito
アプリケーションにユーザー認証機能を付与するサービス。
モバイルアプリにMFA認証を要求する機能を実現できる。
CloudHSMはAWSサービスで利用できる暗号化キーの生成が可能。ただしCloudHSMでMFA認証は実現できない


## 21.CloudFormation(暗記)
### CloudFormationの特徴(の一部)
- スタック
テンプレートによって作成された環境群のこと

- 変更セット
スタックの更新を行う時の概要。変更による影響度を確認するためのスタック

- ドリフト
テンプレートによって展開したAWSリソースを展開後に変更した場合に、元テンプレートとの差分を検出するチェック機能

- スタックセット
複数のAWSアカウントと複数のリージョンに対してスタックを作成できる機能

- スタック間のリソース参照機能(エクスポート/インポート)
テンプレートの参照値をエクスポートして値を抽出し、参照先のテンプレートのインポートによりリソース参照を行うことで連携したインフラ展開が可能になる機能


### CloudFormationのセクションについて
まず、WSDLとは、XMLの記法を用いてAPIに関するあれこれを記述することができる

以下のセクションがある。。
- Description
テンプレートを説明するテキスト文字列。必須。

- リソース
プロパティの指定。必須。

- メタデータ
テンプレートに関する追加情報を提供するオブジェクト

- パラメータ
実行時にテンプレートに渡すことができる値

- ルール
実行時にテンプレートに渡されたパラメータを検証する

- マッピング
条件パラメータ値の指定に使用できる、キーと関連する値のマッピング。条件、変換、出力


## 22.AWS IoT Core
インターネットに接続されたデバイスから、クラウドアプリケーションやその他のデバイスに簡単かつ安全に通信するためのマネージド型クラウドサービス。
車両管理アプリケーションを容易に構築することが可能となる。


## 23.Amazon MQ
Apache ActiveMQとマッチしたマネージド型のメッセージブローカーサービス。
業界標準に沿ったメッセージングAPIを使用している場合は、そのメッセージング機能をそのままAWSに移行できる。


## 24.AWS STS(Security Token Service)
限定的で一時的なセキュリティ認証情報を提供するサービス。
ウェブIDフェデレーションによるアクセス認証を実施することで、一時的なアクセス認証を実現できる。


## 25.さらりとEKS
勘違いしてた。

- ECS
EC2タイプとFargate起動タイプ

- EKS
EC2タイプとFargate起動タイプ

で、EKSはプラグインとかツールが利用可能。
なのでKubernetes基盤でもFargateを使うことである程度の設定の自動化・マネージド化が可能。


## 26.AWS Config
リソースに設定したパラメータとかの評価、監査、審査。
概要だけ覚えておく。


## 27.AWSのマネージドサービスあれこれ(暗記)
- AWS DMS(Database Migration Service)
オンプレにあるDBを短期間で安全にAWSに移行できる

- AWS SMS(Server Migration Service)
オンプレのVMやAzureとかをAWSに移行する

- Amazon SWF(Simple Workflow Service)
Step Functionの旧サービス。
ステップまたは連続したステップがあるバックグラウンドジョブを構築・実行・スケールすることができるクラウド内の完全マネージド状態の状態トラッカーおよびワークフローシステム。

- AWS SAM(Serverless Application Model)
サーバーレスアプリケーション構築用のデプロイツール


## 28.AWS Shield(暗記)
DDoS型の攻撃に対するマネージド型の保護サービス。AWSで実行しているアプリケーションを保護する。
直接的なDDoS型においてはAWS WAFよりShieldを利用する。
CloudFrontとRoute53が適用対象で、エッジロケーションの前にインラインで配置される。


## 29.AWS X-Ray
問：API Gatewayを使用してサービスを呼び出した。そのユーザーリクエストを追跡、分析したい。
回答：AWS X-Rayを使いましょう。


## 30.ActiveDirectoryとAWS
- AWS Directory Service Simple AD
AWS側にフルマネージドのADを新規作成する時に使うサービス

- AWS Directory  Seveice AD Connector
オンプレのADとAWSのIAMを統合する。AWS側のゲートウェイがオンプレ側のADにリダイレクトする

- AWS Managed Microsoft AD
AWS側にADとの互換性があるフルマネージド型のADを作成。SSOが使える。

### オンプレのADとAWSのIAMを連携するには
AWS側のAD Connectorを使う。
AD ConnectorはIAM側のディレクトリ・リクエストをオンプレミスのADへリダイレクトするのに使用するディレクトリゲートウェイ。
また、Simple ADはスタンドアロンのマネージド型ディレクトリ。
これを利用してAWS上にADを構成できる。


## 31.AWSとDR
概ね現在の認識通りでおk！！
ただしパイロットライトとマルチサイトについて覚えておくこと。以下。

- パイロットライト
停止した状態のサーバーを別のリージョンに用意しておき、障害発生時に立ち上げる。

- マルチサイト
マルチAZ構成や、マルチリージョン展開など複数サイトにインフラを構成する


## 32.AWSとオンプレ
- AWSとオンプレをVPN接続したい時は
AWS側に仮想プライベートGW、オンプレ側にカスタマーGWを設置する。

- オンプレとAWSを接続できるサービス
できる：ストレージゲートウェイ
できない：S3バケット、EBS、Glacierなど


## 33.AWSとユーザーの責任範囲
- AWS側
ハードウェアの物理セキュリティ、ネットワークインフラ、仮想化インフラストラクチャ

- ユーザー側
AMI、OS、アプリケーション、輸送中のデータ、保管時のデータ、データストア、資格情報、ポリシーと設定


## 35.サービスの使い分け、違い系
### EC2のAutoScallingとCloudFrontの使いわけ
スケーリングでWebサーバのパフォーマンスを向上させることは可能。
ただしWebアプリケーションのコンテンツ配信処理を向上したい場合はCloudFrontの利用が推奨されている。


## 36.AWSのアンマネージド型/マネージド型サービスの責任分界点
- アンマネージド型 (EC2とか)
ソフトウェア設定、スケーリング、バックアップ、メンテナンス | OS設定、物理サーバー管理

- マネージド型(RDSとか)
ソフトウェア設定 | スケーリング、バックアップ、メンテナンス、OS設定、物理サーバー管理

## Amazon EMR(Elastic MapReduce)
Amazon EMRは大規模環境で大量のデータを迅速かつコスト効率よく処理できる、ビッグデータ処理用のプラットフォーム。
Apache系オープンソースのツールと、EC2の動的なスケーラビリティおよびS3によるスケーラブルなストレージを組み合わせて、伸縮自在なデータ処理・分析エンジンを提供する。
ペタバイト規模の分析が従来のオンプレミスクラスターと比べてわずかなコストで実行できる。
ユースケースは以下の通り。

・マシーンラーニング
・抽出、変換、読み込み(を行うプロセスをETLと呼ぶ)
・クリックストリーム分析
・リアルタイムストリーミングデータ処理
・インタラクティブ分析(対話、双方向性という意味)
・ゲノミクス(ゲノムと遺伝子について研究する生命化学の一分野…？)


## 37.用語
### ピークロード
最大負荷

### Route Origin Authorization(ROA)とは
RIR(Regional Internet Registry, 地域インターネットレジストリ)を介して作成されるドキュメント。
これを用いてAmazonが特定のAS番号のアドレス範囲を公開することを承認する。
┗ AS番号：インターネットの世界における、個々の小さなNWに付与された管理番号のこと。これが集合した大きなNWがインターネットである


### SAML
インターネット上でIDやパスワードなどの認証情報を連携するためのXMLベースの仕様。
SAMLはActiveDirectoryを使用しているため、AWSクラウドへのAPIアクセス用にSAMLベースのフェデレーションを設定できる。


### APIのスロットリングとは
一定の時間内に、事業者(クライアント？)が特定の操作に対して送信できるリクエストの数を制限するプロセス。
スロットリングは、リクエストが殺到するのを防ぎ、許可された開発者全員がWebサービスにアクセスできるようにする。

### Egress-Only Internet GW
IPv6向けのインターネットGW。IPv6経由でのVPCからインターネットへの送信を可能にし、インターネットからインスタンスへの接続は防ぐ。

### カスタマーGW
オンプレミス環境と接続する際に利用するGW。

### 仮想プライベートGW
VPN接続時に利用する、VPNトンネルのAWS側にあるルーター。

### TCPとUDPの違い
- TCP
速度を重視しないちゃんとした通信。セキュリティグループで22を指定する時はTCPを選択する。

- UDP
速度を重視する通信で用いる。データが欠けてもよい時に。


## 38.その他
- いつも忘れるNotIpAddress
「このIP以外からのアクセスを拒否する」な！！！！

- MySQLのベストプラクティス
①ストレージエンジンにはInnoDBを用いる。MyISAMではない。
②自動バックアップを有効にする。
③大きなテーブルのパーティションは16TBを超えないようにする。

## おわりに
引き続き追記します！

以上です。