AWS SAA 勉強メモ
S3においてオブジェクトは変更できない。
(これがオブジェクトストレージというものらしい)
もし中身を変更したい場合は、一度オブジェクトを削除してからもう一度アップロードを行う
S3は制限付き署名URLなどを発行出来る。
このURLはパブリックではあるため、URLの内容を知ることで誰でもアクセスすることが可能である。
S3は暗号化によって内部データが読み取り不能になる。
-
サーバー側の暗号化
オブジェクトをディスクに保存する前に暗号化して、ダウンロード時に複合する -
クライアント側の暗号化
クライアント側つまり自分のPCなどでデータを暗号化して、暗号化したデータをS3にアップロードする。
この場合暗号化キーや関連ツールはユーザーが管理する
S3には静的ホストの設定におけるバージョニングが存在する。
削除したオブジェクトの取得やロールバックが可能となる。
S3は計算と分析のためのデータストアも提供する。
S3は水平スケーリングを行うので大規模データの計算/分析にも適している
S3にはバックアップやアーカイブにも適している
S3では上書きPUT/DELETEに結果整合性が存在する
S3は現在強い一貫性を示している。
つまり書き込みを行った対象に対してすぐに読み込みをおこなっても
→これは解消済み
S3ライフサイクルポリシー
保存期間に基づいて保存場所を変更する
標準 →(30日後)→標準IA→(60日後)→Glacier→(1年後)→削除
マルチパートアップロード
大きなデータの転送を分散して行う
EBS-Backed vs Instance Store-Backed
EBS-BackedはEBS上にルートボリュームを作成する。
Instance Store-BackedはOSがインストールされるルートボリュームがインスタンスストア上に存在する。
つまりEBSは安全かつ保存性が高い。Instance Storeの方は揮発性なので、インスタンスを終了するとデータが消えてしまう。
AWS Compute Optimizerを使用するとインスタンスを最適化するための推薦事項が提示される。
JeOS AMI
Just Enough Operating System (JeOS)
AMIにOSだけ含める。他のLogの設定/Securityの設定などは起動時のダウンロードによって動的に行う。
AMIの維持コストがかからないが、起動時間がかかったりする。
構成自動化ツールなどが存在するときに重宝する。
どのくらい差が出るかが大事
多くの企業はハイブリッドを使用している
プレイスメントグループ
一つのAZ内で、インスタンスをグループ化。
そうすることで低レイテンシー、同時障害のリスクなどを実現出来る
- クラスター
低レイテンシー、高スループット - パーティション
大規模分散向け
RDSの暗号化はS3と違ってデータベースを作成するときにのみ、有効化を選択出来る
DynamoDBはリージョン毎のDBをまとめるグローバルテーブルを作成する
RDSのデータ保護
- VPCにおける制御
- IAMポリシーの追加
- セキュリティグループによる通信制御
- SSLの使用
- インスタンス/スナップショットにおける保管時のデータ保護
- DBエンジンのセキュリティ機能
AWS DMS(Data Migration Service)
同種間、異種間でのデータ移行を実装可能
同種(Oracle→Oracle)
異種(EC2 Mysql → Aurora)
踏み台ホスト
パブリックサブネットに踏み台ホストを設置し、プライベートサブネットにアクセスしたいリソースを配置する。
これにより外部から閉じたアクセス環境を提供する事ができる。
セキュリティグループ
-
ステートフルファイアウォール
往復のトラフィックに対応する。
つまり、許可されたインバウンドルールによってアクセスされた時、アウトバウンドルールに関わらず通信は許可される。
またアウトバウンドルールに対して許可された通信も復路での通信がインバウンドルールに反していたとしても許可される。 -
インスタンスまたはネットワークインターフェースレベルで動作する
インスタンス(EC2, RDS)毎にセキュリティグループの定義が可能。
ネットワークインターフェースとは
要するに、EC2などのインスタンスについているデフォルトのNICではない増設のインターフェースのこと。設定が難しいので、あまり使う機会はないかもしれない。
ネットワークアクセスコントロールリスト
ネットワークACL
- サブネットレベルでの動作
- すべてのインバウンドとアウトバウンドのトラフィックを許可
- ステートレスなので双方向の明示的なルールが必要
多層防御
SGとACLで間違えても大丈夫なように2重に防止する
AWS VPN
静的ルーティング
動的ルーティング
ボーダーゲートウェイプロトコル(BGP)を使用して、そのルートを仮想プライベートゲートウェイに付加
ボーダーゲートウェイプロトコルは経路制御プロトコルとも呼ぶ
AWS Direct Connect
オンプレ/クラウド間のハイブリッド環境で使用できる
VPC ピア接続
2つのVPC間の 1 対 1のネットワーク接続
VPC上でデータの転送が必要な場合、利用する。
VPNやゲートウェイなどは不要
VPCエンドポイント
AWSのサービスがプライベート接続で利用することが可能になる。
これによりIGW、VPN、NATなどの接続用のサービスは不要になる。
インターフェースエンドポイント
サポートされるプライベートIPを提供
ゲートウェイエンドポイント
AWSサービスを宛先とするルートテーブルを提供する
IAMポリシー
アクセス可否のドキュメント
IAMロール
サービス毎に付与できる権限形式
IDフェデレーション
IAMユーザーを作成せずに、既存のIDからアクセスできる方法
AWS STS, SAML, Cognitoなどで認証が可能
MS ADなどにログインすることで一時的なキーを入手
それでAWSのサービスやコンソールにアクセスする
開発/テスト/本番などでアカウントを別に設定することで、ロールの付与などを適切に行い、ユーザーの制限をすることが一般的となっている
水平スケーリング
- スケールアウト
インスタンスを起動して、ELBでアクセスするインスタンスを作る - スケールイン
インスタンスを終了してコストを下げる
垂直スケーリング
インスタンスサイズを拡大することで、キャパシティを確保する
Amazon Aurora Serverless
Auroraのスケーリングを自動で行う。
Aurora キャパシティユニット ACUをいくつ使うかによって課金額が変わる
シャーディングはデータ結合を行う際に、特別なスクリプトが必要となり、実行時間も長くなってしまう
DynamoDB Auto Scaling
EC2と同じでAuto Scalingが可能
ELB
可用性を向上させるロードバランシングサービス
自動的にDNSを分散する
AWS EventBridge
AWSのサービス、自身にアプリケーションなどにおいて環境が変化することを監視して、それをトリガーにしてアクションに流す事ができるサービス。
イベント駆動アーキテクチャなどに利用可能だったりする
イベントの例
- コンソールのサインイン
- EC2インスタンスの状態変更
- EC2 Auto Scalingの状態変更
- EBSボリュームの作成
- APIコール
AWS CloudFormation
AWSリソースのコレクションを簡単にモデル化、作成、管理する方法
- リソースの集合はAWS CloudFormation スタックと呼ぶ
- 追加料金なし(作成のリソースのみの料金を払う)
テンプレートを作成して、S3などに保存する
そこからスタックを作成する。
もしスタックの途中で失敗した場合は、全てのリソースの作成をロールバックをすることができる
テンプレートの構文はYAML or JSONで作成できる
ドリフト検出
CloudFormationで作成したスタックからの、手動による変更差分を検出する。
変更ステータスはMODYFIEDで表される。
↓
これにより、他のメンバーや自分が行った不必要な変更差分を是正することができる。
CloudFormer
CloudFormation上でテンプレートを作成するときに、ToolsでCloudFormerというもの選択すると、現在稼働しているVPCの構成をテンプレートに持ってきてくれる
CloudFormation Designer
GUI上でネットワークを構築すると、それに応じてテンプレートを作成することができる
AWS Systems Manager
運用タスクの自動化、管理を一括で行うことができる
Systems ManagerはゲストOS内での自動化に適している。
なので、CloudFormationで作成したEC2リソースを設定/定義することができる。
AWS OpsWorks 構成管理サービス
ChefとPuppetと呼ばれる構成管理ツール(Ansibleのようなもの)を使うサーバーを提供する。
CloudFormationはvpcなどの全てのリソースに対して、IaCが提供できるのに対し、これらの構成ツールはアプリケーションにのみ対応可能なので、適用範囲が限られる。
そのため、あまり使用することも少ないように感じる。
Amazon CloudFront
グローバルCDN
WebSocketおよびHTTP または HTTPSメソッドをサポートする。
独自のSSL証明書をamazon certificate manager を通じて利用可能
スティッキーセッション
クライアントのCookieを用いることで、元々接続していたサーバーの情報をCokkieに保存して、そのサーバーに対して接続を行うことにより情報をキャッシュ化することにより、より早いブラウザ表示などを実現することができる。
ただ、スティッキーセッションを使用するとサーバーの負荷分散が均一に行われないことにより、一方のサーバーに負荷がかかりすぎてしまうというデメリットなどが存在する。
Amazon DynamoDB Accelerator
DAX
DynamoDB用のフルマネージド型高可用性インメモリキャッシュ
特にデベロッパーは設定することなく実現できるのでとても便利
サイドキャッシュ
データベースと隣接して使用する。
より高頻度のアクセスが見込まれるデータはキャッシュに保存するという設定にすることで、レイテンシを削減することができる
疎結合アーキテクチャ
各レイヤーの中間段階でAWSマネージドソリューションを使用する。
ウェブ層とアプリケーション層などのレイヤーに挟むことで単一障害点を避けることができる
Amazon SQS
フルマネージドのメッセージキューイングサービス
キュー構造に格納することで分散化を実現する
プロデューサーとコンシューマーの間で成り立つ
Amazon Simple Notification Service (Amazon SNS)
フルマネージド Pub/Sub メッセージングサービス
AWS Cloud Map
あらかじめ設定した自分の好きな名前で、あらゆるAWSリソースに対してアクセスできます。
例えばロードバランサーを作成した時はそのDNS名がAWSから払い出され、そのDNS名を利用してアクセスしていたかと思います。これが、Cloud Mapを利用すると、IPアドレスがないAWSリソース(LambdaとかSQSとか)へのアクセスも管理できてしまいます。
色々なマイクロサービスを使用する場合に、名前を適切に管理できる仕組み。
従来であればEC2とRDSなどをつなぐ際にはhttp & portをインバウンドルールなどで制御していたが、この機能を使用することで名前を定義して通信をすることができる。
AWS App Mesh
全てのマイクロサービスに対して、メトリクス, ログ, トレースをキャプチャできるサービス。
マイクロサービス用のログ管理のサービス
AWS Fargate
kubernetesとコンテナどちらも管理できる、フルマネージド型サービス
サーバーレス
サーバーに関して悩むことなく、アプリケーションとサービスの構築や実行を行う方法
つまりlambdaのような、サーバーを自分で持たない方法だけではなく、fargateのように自動Scalingをしてくれるようなサービスに関してもサーバーレスと呼べる
lambdaは関数の実行回数、関数の実行時間に応じて課金額が設定される
課金額を調整するために、ユーザーはメモリの設定とタイムアウトの設定を行う事ができる。
- メモリの設定
メモリ量が大きくなればなるほど、100ミリ秒あたりのコストが増加する - タイムアウト
関数の最大持続時間を設定できる。
関数の実行時間に対して課金額が設定できるところから、無限ループなどの関数が発生してしまうことの危険性を鑑みるにタイムアウト設定は大事
Lambdaレイヤー
lambdaで使用するライブラリを共有化することにより、階層化プログラミングが可能になる
AWS API Gateway
バックエンドのエントリポイントとして機能するAPIの作成/公開/保守/モニタリング/セキュリティ保護が可能
EC2, Lambda, その他のアプリケーションに流すことができる。
API GatewayとELBの違いは複数ある
- GatewayはプロトコルがHTTPS, ポートが443しか取らないのに対して、ELB(ALB)は任意のポート番号を設定できる
- タイムアウト時間
- コスト
GWは実行回数における重量課金で、ある一定数のリクエストを超えるとELBの方が安く済む
https://qiita.com/unhurried/items/5a497ec81e4fefe22396
認証、ポリシー、DDoS攻撃からの保護などのセキュリティを設定することができる
AWS Step Functions
複数のlambda functionを組み合わせてマイクロサービスを作成する際に使用する事ができるサービス
ワークフローを可視化して、関数の処理の成功/失敗などのログ記録を提供したりする
災害の回避と計画
高可用性
アプリケーションとデータが使用できなくなる頻度を最小限に抑える
バックアップ
災害時のデータの安全を確保する
災害対策(DR)
災害発生後にデータを復旧し、アプリケーションをオンラインに戻す
基本的にデータはS3に保管されていることが多い
そのため、S3に耐障害を追加する必要がある。
S3をレプリケーションすることにより、これが可能になる。
パイロットライトパターン
障害が発生したときに迅速に対応できるようにセカンダリのインスタンス、レプリケートされたDBを準備しておく
マルチサイトパターン
ウォームスタンバイパターンを縮小版ではなく、完全版つまりメイン機と同等のキャパシティを備えたセカンダリ機を常に稼働させておく
パイロットライト→ウォームスタンバイ→マルチスタンバイ
上記の順番でRTOが下がり、コストがかかる