DVA第2章　開発関連サービス

# 第2章　開発関連サービス
引き続き第2章のワードまとめもしていく。まあなんと知らない概念が多いこと。演習問題もあまり間隔を空けずに取り組みたいところだ。
## 2-1 Amazon API Gateway
### ステートレス・ステートフル通信
ステートレス通信は毎回のリクエストで自己完結してる必要があり、郵便やメールのように前後関係が途切れ、サーバーが状態を記憶しない。反対にステートフルはサーバーが記憶を保持しているので前後関係が連続している。
### エッジ最適化
通信距離を短縮してページ表示やAPI応答を高速にする。リクエストをクラウド全体に分散させず、エッジで処理・最適化することによりバックエンドの負荷を減らす。
### Mock
本物の機能、オブジェクト、APIなどの代わりに使う仮のオブジェクトや関数。
### CORS(Cross-Origin Resource Sharing)
異なるオリジン(プロトコル・ドメイン)間でデータをやり取りするために使う。
### ALB(Application Load Balancer)
アプリケーション（HTTP/HTTPS）のトラフィックを複数のサーバーに分散する。
### NLB（Network Load Balancer)
ネットワーク（TCP/UDP)のトラフィックを分散する。
### トラフィック
ネットワーク上のデータの流れや通信量。
### AWS Lambda
AWSが用意してくれたサーバーを使ってコードを実行できるサービス。サーバーのことを考えなくていいのがラク。
### REST API
一般的なWebアプリのCRUDに当たり、一方向通信で都度接続。
### WebSocket API
チャットアプリのようにリアルタイム処理に強く双方向的な通信で常時接続している。
### HTTP API
AWSにおいてREST APIの軽量版に当たる。
### ディスパッチ
もとは発送・派遣という意味でIT用語としては、CPUの実行権を渡すことで複数のタスクを並行処理しているように見せかける仕組み。
### L7レイヤー
HTTPなどのアプリケーションレベルのデータの通信を制御するレイヤー。内容を見て柔軟な処理をできるのか強み。
### JSON(JavaScript Object Notation)
テキスト形式で見やすい。
```javascript
{
  "name": "バナナ",
  "age": 28,
  "skills": ["React", "Rails", "Docker"],
  "active": true
}
```
### JWTオーソライザ（JSON Web Token）
APIアクセス時に渡されるJWTトークンの中身を検証してユーザー認証の許可・拒否を決める。
### IAMアクセス権限
AWSのユーザーやロール(署名付きリクテスト)を使ってAPIへのアクセルを制御する方法。
### Lambdaオーソライザ
API Gatewayにアクセスが来た時に自前のLambda関数によって認証処理をする仕組み。
### Congnitoオーソライザ
Amazon Congnitoユーザープールを使った、API Gatewayのネイティブな方式。
### 相互TLS認証(（Transport Layer Security)
SSLの後継版でTLSの証明書をサーバー側だけでなくクライアント側にも要求し、双方の身元を確認する認証方法。
### スロットリング
APIへの過剰なリクエストを制限する仕組み、ブレーキの役目。
### APIキーの目的
認証目的ではなくクライアントと使用量プランとを紐づけるためのもの。これを認証目的で使うのはバッドプラクティス。
### APIのキャッシュ
バックエンドの負荷を減らしレスポンスを高速にするためにAPIキャッシュを保存しておき、同じリクエストが来たらそれを再利用する。
### カナリアリリース
リスクを小さく抑えロールバックを簡単にするために、まずは一部のユーザーに対して新バージョンのAPIを提供し、問題がなければ徐々にその割合を増やしていく手法。
### WAF連携（Web Application Firewall）
APIへの攻撃(SQLインジェクション、XSS、Botアクセス)をブロックするWebアプリケーションファイアウォールとの連携であり、APIを呼び出す前のセキュリティチェックを行える。
### 監視連携
APIの動作状況やエラー・レスポンスタイムを可視化・通知する仕組みを監視ツールと連携して行うこと。
## 2-2 AWS Lambda
### ランタイム
アプリケーションを実行するために必要なライブラリやパッケージのこと。PythonやRuby、Node.jsなどのこと。
### VPCアクセス
Lambdaは本来インターネット上で動くような存在だが、プライベートなVPC内にあるリソースに接続したいときには特別な設定が必要になる。
### コールドスタート・ウォームスタート・Provisioned Concurrency
コールドスタートはLambda関数を初めて呼び出す、またはしばらく使われていなかったときに、実行環境の起動から始まる遅延のこと。Lambdaはスケーラブルなため、必要なときだけ「コンテナ環境を生成」する。反対にウォームスタートはLambdaがすでに一度呼び出されたあと、同じ実行環境（コンテナ）が再利用されて即実行される状態。起動時間ほぼゼロでパフォーマンス良好、同一環境で変数などのキャッシュが残ってることもある。Provisioned ConcurrencyではLambdaの事前起動インスタンス数を指定できる機能であり、コールドスタートを完全に防ぐことができる。
### カスタムランタイム
標準のサポートには含まれていないライブラリや言語を使ってランタイムを作成して実行することができる。
### Layers
共通ライブラリや依存ファイルをLambda関数とは別に管理できる仕組み。コードをすっきり保ち、複数関数で共有できる。
### Lambda Extensions
Lambdaのライフサイクルにフックを追加する拡張機能であり、ログ転送やモニタリング、メトリクス収集などを行うために使われる。DatadogやNew Relicなどのサードパーティツールと連携する際に利用される。
### デプロイパッケージ
Lambda関数のコードや依存ライブラリなどをまとめた実行可能な単位。ZIP形式でアップロードする方法と、Dockerコンテナ形式でデプロイする方法がある。コードの構造や使用ライブラリによって使い分ける。
### バージョニングとエイリアス
Lambda関数の変更履歴を管理するために使用される。バージョンは関数のスナップショットであり、エイリアスはそのバージョンに名前をつけて簡単に切り替えできる仕組み。これにより本番環境の段階的リリースやロールバックが容易になる。
### RDS(Relational Database Service)
AWSが提供するマネージドなリレーショナルデータベース。MySQLやPostgreSQL、Auroraなどがあり、Lambda関数からVPC経由で直接接続してデータ操作が可能。接続数の最適化にはRDS Proxyの併用が推奨される。
### AWS SDK(Software Development Kit)
AWSの各サービスをプログラムから操作するための開発者向けツールキット。JavaScript（Node.js）やPython（Boto3）など、さまざまな言語向けに用意されている。Lambda関数内でAPIを呼び出すときにも多用される。
### イベントとイベントソース
Lambda関数の実行トリガーとなるJSON形式のドキュメントデータが「イベント」であり、そのイベントを発生させるものを「イベントソース」と呼ぶ。例としてS3へのファイルアップロード、DynamoDBの更新、API Gateway経由のHTTPリクエストなどがある。
### 同期呼び出しと非同期呼び出し
Lambda関数の呼び出し方法には同期と非同期の2種類がある。同期は結果が返ってくるまで待つ方式で、API Gatewayなどが該当。非同期は呼び出し後すぐに処理が返され、結果は後から処理される。S3やEventBridgeなどが非同期に当たる。
## 2-3 Amazon DynamoDB
### プライマリーキー
DynamoDBにおける各アイテムを一意に識別するためのキー。単一の「パーティションキー」または「パーティションキー＋ソートキー」の組み合わせで構成される。パーティションキーのみの場合は単一キー、ソートキーと組み合わせると複合キーと呼ばれ、複数のアイテムをグルーピングできる。
### RDB(Relational Database)
表形式の構造でデータを管理し、SQLによる操作が可能。DynamoDBのようなNoSQLと対比され、複雑なリレーションやトランザクション処理に強みがある。代表的なサービスにRDS（MySQLやPostgreSQLなど）がある。
### キャパシティユニット
DynamoDBで使用されるスループットの単位。プロビジョニングモードで使用される概念で、RCU（Read Capacity Unit）とWCU（Write Capacity Unit）によって読み書きの性能を定義する。事前にどれくらいリクエストを処理するかを設定する必要がある。
### RCUsとWCUs
RCU（Read Capacity Unit）は1秒あたり4KBの強整合読み取りを1回行う能力。WCU（Write Capacity Unit）は1秒あたり1KBの書き込みを1回行う能力。キャパシティユニットを指定してテーブルの処理能力をコントロールする。オートスケーリングも可能。
### TimeToLive(TTL)
DynamoDBにおいて、指定した属性に設定された日時が過ぎると、そのアイテムを自動的に削除してくれる機能。ログデータや一時的なキャッシュデータなど、期限付きデータの管理に便利で、コスト削減にもつながる。
### DAX(DynamoDB Accelerator)
DynamoDBの読み取り性能を高速化するためのインメモリキャッシュ。完全マネージド型であり、アプリケーション側のコード変更なしに読み取りのレスポンスをミリ秒→マイクロ秒レベルに短縮できる。リアルタイム入札やソーシャルゲーム、トレーディングなどできる限り迅速な読み込み応答時間を必要とするユースケースに適している。
### DynamoDB StreamsとDynamoDB Trigger
DynamoDB Streamsはテーブルの変更履歴（追加・更新・削除）をストリームとして記録する機能。TriggerはこのStreamsと連携して、変更イベントをもとにLambda関数を自動実行する仕組み。イベント駆動型アーキテクチャを構成できる。
### グローバルテーブル
DynamoDBを複数のAWSリージョンにわたってレプリケーションし、マルチリージョン・マルチマスターで利用できるようにする機能。低レイテンシなアクセスとリージョン障害への耐性を実現し、グローバルなサービス展開に向いている。
## 2-4 AWS Step Functions
### ステートマシン
Step Functionsにおけるワークフロー全体を定義する構造で、各処理ステップ（タスク）を状態（ステート）として管理する。状態ごとに分岐やエラー処理、待機などの制御が可能で、複雑なビジネスロジックをコードレスで表現できる。
### ASL
Amazon States Languageの略で、JSON形式でStep Functionsのステートマシンを記述するための言語。ステートの種類や遷移先、条件分岐、リトライ処理などをASLで定義することでワークフロー全体の動作を制御できる。
## 2-5 Amazon Route 53
### DNS
Domain Name Systemの略で、ドメイン名とIPアドレスを紐づける仕組み。Route 53はAWSが提供するスケーラブルで高可用なDNSサービスであり、独自ドメインの管理やEC2、S3などのAWSリソースとの連携も可能。
### トラフィックルーティング
Route 53が提供する機能で、ユーザーの地理的位置やヘルスチェックの結果などに基づいて、最適なリソースへトラフィックを分配する方法。加重ルーティング、地理ルーティング、フェイルオーバールーティングなどがある。
### DNSフォワーダ
オンプレミスなどの独自DNSからRoute 53 Resolverを経由してAWS内のホスト名解決を行う際に使われる中継ポイント。これによりAWS外のネットワークからもVPC内部のプライベートDNS名を解決可能になる。
### Route 53 Resolverの役割
VPC内からのDNSクエリを処理するDNSサーバーで、インバウンド/アウトバウンドのDNSトラフィックを制御できる。オンプレミス連携やハイブリッドDNS構成時に重要で、VPCの外部からVPC内のホスト名解決を行えるようになる。
## 2-6 ELB(Elastic Load Balancer)
### Connection Drain
ロードバランサーを終了させる時に、残ったリクエストを処理するために遅延時間を設けて終了する。ユーザー体験を損なわないのがポイント。
### スティッキーセッション
特定のクライアントが常に同じターゲットインスタンスに接続されるようにする仕組み。ELBが発行するCookieを用いることで、セッション情報の整合性を保ったままスケーリングを実現できる。ショッピングカード機能みたいなやつ。
### OIDCプロバイダ認証
ALBにおける認証オプションのひとつで、OpenID Connect（OIDC）に準拠したIdP(Identity Provider)と連携し、アクセス制御を行う仕組み。CognitoやAuth0、Googleなどと連携して、Webアプリへのアクセスを認証ベースで制御できる。
### ネイティブなHTTP/2・gRPC通信サポート
ALBはHTTP/2やgRPCといった最新の通信プロトコルをネイティブでサポートしており、双方向通信や効率的なヘッダ圧縮、高速なAPI通信などに対応。特にgRPCはマイクロサービス間の高速通信で活躍する。
### ALBからLambdaを呼び出す
ALBのターゲットとしてLambda関数を直接指定でき、HTTP(S)リクエストをサーバーレスで処理可能。サーバーを用意せずAPIエンドポイントを作成できるため、軽量なWebアプリやWebhook受信に最適。
### TCP(Transmission Control Protocol)
インターネットでの通信を制御するプロトコル。データの順番や完全性を保証し、データの再送を行うことで信頼性を高める。
### UDP(User Datagram Protocol)
データの到達は保証せず高速な通信を目的とする。リアルタイム性を重視する用途（動画・音声・ゲームなど）に向いており、軽量かつ低レイテンシの通信が可能。
### SSL パススルー通信
ELBがSSLの通信内容を復号せず、そのまま背後のターゲットに転送する方式。セキュリティ的に強いが、ELBでは通信内容に基づくルーティングや検査ができなくなる。主にNLBで用いられる。
### SSL/TLSターミネーション
ELBがフロントエンドでSSL/TLS通信を終端し、内部は復号されたHTTPなどで通信する方式。これによりロードバランサーで暗号化解除後の内容を参照・制御できるようになる。主にALBやCLBで使われる。
### GLB
Global Load Balancerの略称。AWSにおいてはRoute 53やGlobal Acceleratorなどを用いてグローバルレベルでのトラフィック制御や冗長化を行う構成を指すことがある。明確なサービス名ではなく構成概念を表す。
### CLB
Classic Load Balancerの略で、旧世代のELB。L4/L7両方の簡易ルーティングに対応しているが、新規構築では基本的にALB（L7）またはNLB（L4）の使用が推奨される。古い環境の互換性を目的に使われるケースが多い。
## 2-7 Amazon ECS(Elastic Container Service)
### コンテナ
アプリケーションとその依存環境をひとまとめにして実行できる軽量な実行環境。Docker形式でパッケージ化され、どこでも同じ動作を保証できる。仮想マシンより起動が速く、リソース消費も少ない。
### コンテナオーケストレーション
複数のコンテナを効率的に管理・配置・スケーリング・監視する仕組み。Amazon ECSやKubernetesなどが代表例で、アプリケーションの可用性と運用効率を高める。
### ECSの構成要素
ECSはクラスター、タスク定義、サービス、タスク、コンテナインスタンス（FargateまたはEC2）などから構成される。これらを組み合わせることで、柔軟なコンテナ実行環境を構築できる。
### ECS タスク定義
コンテナの実行環境を定義するJSON形式の設計図。使用するDockerイメージ、環境変数、ポート、CPUやメモリ量などを指定する。タスク定義のリビジョン管理も可能。
### ECSサービス実行
タスクを継続的に稼働させる仕組み。指定されたタスク数を常に維持し、障害発生時には自動的に再実行される。ロードバランサーとの統合も可能で、常時稼働型のアプリケーションに適している。
### タスク配置戦略
ECSでタスクをどのインスタンスに配置するかを決定するルール。spread（均等分散）、binpack（リソース最適化）、random（ランダム配置）などがあり、ユースケースに応じて選択する。
### タスク配置制約
タスクを配置するインスタンスを制限するルール。特定の属性（例：インスタンスタイプやAZ）を持つホストのみにタスクを配置させることで、セキュリティや可用性を高める構成が可能になる。
## 2-8 Amazon RDS(Ralational Data Service)
### RDS
Relational Database Serviceの略で、AWSが提供するフルマネージドなリレーショナルデータベースサービス。MySQL、PostgreSQL、Oracle、SQL Server、Auroraなどがサポートされており、自動バックアップ、スナップショット、パッチ適用などの運用が自動化されている。
### フェイルオーバー
RDSがマルチAZ構成時に障害を検知すると、自動的にスタンバイのDBインスタンスへ切り替える仕組み。アプリケーションはDNSの再解決により接続先を切り替えることで、高可用性を維持できる。
### リードレプリカ
読み取り専用のDBインスタンスをメインのDBから非同期に複製する仕組み。読み取り負荷の分散や、バックアップ用途、将来的なマスター昇格などに使える。Auroraではリードレプリカの昇格が非常に高速。
### メトリクス
RDSインスタンスの状態やパフォーマンスを示す指標で、CPU使用率、ディスクI/O、接続数、クエリ数などがある。CloudWatchと連携して監視・アラート設定が可能。スロークエリの検出やチューニングにも活用される。
### Amazon Aurora
AWSが独自に開発した高性能なリレーショナルデータベースエンジン。MySQLおよびPostgreSQLと互換性があり、従来のRDSより最大5倍のパフォーマンスを実現。分散ストレージ、高速フェイルオーバー、グローバルデータベースなどの機能が特徴。
### Aurora Serverless
Auroraのサーバーレスバージョンで、実行中のリクエスト量に応じて自動的にキャパシティをスケールアップ・ダウンする。使用していないときはインスタンスが停止して料金も発生しないため、間欠的なワークロードに適している。
### ルーターフリート
Auroraの内部構成要素の一部で、クライアントからの接続要求を適切なDBインスタンスにルーティングする役割を持つ。高可用性・フェイルオーバーの実現に寄与するが、利用者が明示的に設定するものではなく、Aurora内部で自動的に機能する。
## 2-9 Amazon S3
### オブジェクトストレージ
ファイル単位でデータを保存・管理するストレージ形式。Amazon S3はキー（名前）、バケット（フォルダのような概念）、データ本体の組み合わせで構成され、非階層的に大容量のファイル保存が可能。
### S3の構成要素
主にバケットとオブジェクトから構成される。バケットはデータの入れ物であり、グローバルで一意な名前が必要。オブジェクトはバケット内に格納されるファイルで、キーとメタデータを持つ。
### ストレージクラス
S3ではアクセス頻度やコスト要件に応じて複数のストレージクラスが用意されている。標準、低頻度アクセス（IA）、Glacier、Glacier Deep Archiveなどがあり、ライフサイクルルールで自動的に移行も可能。
### アクセスコントロール
S3バケットやオブジェクトに対するアクセス制御を行うための機能。バケットポリシー、IAMポリシー、ACL、アクセスポイントなどを組み合わせて細かいアクセス管理が可能。
### ACL
Access Control Listの略で、バケットやオブジェクト単位でアクセス権を設定するレガシーな方法。現在は推奨されておらず、バケットポリシーやIAMポリシーの使用が推奨されている。
### ワイルドカード
バケットポリシーなどの条件指定で使える記号「*」。プレフィックス条件やリソース指定で柔軟なアクセス制御を行うときに使用される。例：arn:aws:s3:::example-bucket/*。
### ブロックパブリックアクセス
S3バケットやアカウント全体に対してパブリックアクセス（全員に公開）をブロックする設定。企業やセキュリティポリシー上、意図しない公開を防ぐ目的で有効化が推奨される。
### VPCエンドポイント
VPC内からS3へインターネットを経由せずにプライベートにアクセスするための仕組み。セキュリティを強化し、データ転送料金を抑えることができる。Gateway型とInterface型がある。
### アクセスポイント
バケットに対して、特定のユースケースごとにカスタムアクセス設定ができる新しいエンドポイント。ポリシーの柔軟な適用が可能で、大規模システムやマルチユーザー環境で有用。
### S3 Object Ownership
バケット内のオブジェクト所有権に関する設定。ACLの使用を無効化し、アップロード元ではなくバケット所有者を常にオブジェクト所有者とすることで、管理とアクセス制御をシンプルにできる。
### 署名付き URL
一時的なアクセス許可を付与するためのURL。生成時に有効期限とアクセス操作（GET/PUTなど）を指定でき、限定的に外部にファイルを共有する際に便利。CloudFrontとの併用も可能。
### 暗号化 SSE-S3とSSE-KMS
S3のサーバー側暗号化方式。SSE-S3はS3が管理する鍵で自動暗号化し、SSE-KMSはKMSと連携してカスタマイズ可能な鍵管理を実現する。セキュリティポリシーに応じて選択できる。
### 静的Webサイトホスティング
S3バケットにHTML、CSS、JSなどの静的ファイルをアップロードし、Webサイトとして公開する機能。カスタムドメインやエラーページの設定も可能で、CloudFrontと組み合わせてCDN配信もできる。
### イベント通知機能
バケット内のオブジェクトが作成・削除された際に、SNS、SQS、Lambdaなどに通知を送る機能。ファイルアップロード後の自動処理など、イベントドリブンな設計が可能になる。
### バージョン管理機能
オブジェクトの変更履歴をすべて保存する機能。上書きや削除があっても以前のバージョンを復元できる。誤操作対策やデータ保持要件に有効。バージョンIDを指定してアクセス可能。
### ライフサイクルルール設定
オブジェクトに対して一定期間後に削除したり、ストレージクラスを変更したりするルールを自動的に適用する機能。コスト最適化やデータ管理の自動化に役立つ。
### オブジェクトロック機能
S3オブジェクトの削除・上書きを一定期間または永久に禁止する機能。WORM（Write Once Read Many）要件を満たすため、法令順守や監査対策にも使われる。
### S3 Storage Lens
S3の使用状況やストレージ管理の改善点を可視化する分析ツール。ダッシュボード形式で利用状況、非推奨設定の検出、コスト最適化提案などを提供。
### S3 Transfer Acceleration
世界中のエッジロケーションを経由して、インターネット経由のS3へのアップロードを高速化する機能。大容量ファイルの国際送信時などに威力を発揮する。
### リクエスタ支払い機能
S3バケットに対してアクセスした側（リクエスタ）にデータ転送料金を課金させる仕組み。大量のダウンロードが予想されるオープンデータ配信などで使用される。
### S3インベントリ
バケット内の全オブジェクト一覧を定期的にCSV形式で出力する機能。監査、整合性チェック、コスト分析、ライフサイクルルールの適用確認などに活用される。
## 2-10 Amazon Kinesis
### ストリームデータ
リアルタイムに連続して発生するデータのことで、ログ、センサーデータ、SNS投稿、クリック情報などが含まれる。Amazon Kinesisはこれらのデータをリアルタイムに取り込み、処理、分析するためのサービス。
### データストリームとデータレコード
Kinesis Data Streamsにおける「データストリーム」はデータの流れそのものであり、「データレコード」はその中を流れる1件ごとのデータ単位。レコードにはパーティションキー、データ本体、シーケンス番号などが含まれる。
### シャード
データストリームを構成するスループットの単位。1シャードあたり毎秒1MBの書き込み、2MBの読み取りが可能。スループットに応じてシャード数を増減させることでスケーラビリティを調整できる。
### KCLワーカーの最適化
Kinesis Client Library（KCL）を用いて複数のコンシューマを自動的にシャードに割り当てて並列処理を行う設計。ワーカー数やスレッド数を適切に設定することで高効率な読み取り・処理が可能になる。
### スループット
単位時間あたりに処理できるデータ量を指し、Kinesisではシャード数に比例してスループットが決まる。プロデューサーの書き込み量とコンシューマの読み取り量がスループットの設計に影響する。
### リース
KCLがデータのシャードをどのコンシューマが処理するかを調整するために使用する仕組み。DynamoDB上にリーステーブルを作成して管理され、ワーカーのフェイルオーバーや再バランスが行われる。
### Kinesis Data Firehose
リアルタイムデータを自動的にS3、Redshift、OpenSearchなどに連携・保存できるフルマネージドなストリーミング配信サービス。バッファリング、変換、圧縮、暗号化などの前処理機能も搭載されている。
### WebRTC(Real-Time Communication)による取り込み
Kinesis Video Streamsでサポートされている、リアルタイム映像・音声の取り込みプロトコル。ブラウザやモバイル端末から低遅延で動画データを送信し、解析や監視用途に活用される。WebRTCは双方向性と低レイテンシが特長。
## 2-11 その他の関連サービス
### AWS AppSync
GraphQL APIを簡単に構築・提供できるマネージドサービス。データソースとしてDynamoDBやLambda、Auroraなどを統合でき、リアルタイムサブスクリプションやキャッシュ機能も備える。フロントエンドからの柔軟なデータ取得に適している。
### AWS Amplify
フロントエンド開発者向けに提供されるフルスタックアプリケーション開発支援サービス。ホスティング、認証、GraphQLやREST API、ストレージなどをCLIやコンソールから簡単に構築・デプロイできる。ReactやVueなどのモダンフレームワークと相性が良い。
### Amazon Athena
S3上のデータをSQLで直接分析できるサーバーレスなクエリエンジン。Prestoをベースにしており、インフラ管理不要でCSVやParquetなどの形式に対応。クエリ実行ごとの従量課金で、データレイク分析に最適。
### Amazon OpenSearch Service
Elasticsearch互換の検索・分析エンジンをマネージドで提供するサービス。ログ分析、全文検索、可視化などに活用され、Kibanaに代わるOpenSearch Dashboardsでデータを視覚化できる。リアルタイムログやメトリクス分析に適している。