Closed110

AWS SAA 勉強メモ

bayamasabayamasa

S3においてオブジェクトは変更できない。
(これがオブジェクトストレージというものらしい)

もし中身を変更したい場合は、一度オブジェクトを削除してからもう一度アップロードを行う

bayamasabayamasa

S3は制限付き署名URLなどを発行出来る。
このURLはパブリックではあるため、URLの内容を知ることで誰でもアクセスすることが可能である。

bayamasabayamasa

S3は暗号化によって内部データが読み取り不能になる。

  • サーバー側の暗号化
    オブジェクトをディスクに保存する前に暗号化して、ダウンロード時に複合する

  • クライアント側の暗号化
    クライアント側つまり自分のPCなどでデータを暗号化して、暗号化したデータをS3にアップロードする。
    この場合暗号化キーや関連ツールはユーザーが管理する

bayamasabayamasa

S3には静的ホストの設定におけるバージョニングが存在する。
削除したオブジェクトの取得やロールバックが可能となる。

bayamasabayamasa

S3は計算と分析のためのデータストアも提供する。
S3は水平スケーリングを行うので大規模データの計算/分析にも適している

S3にはバックアップやアーカイブにも適している

bayamasabayamasa

S3ライフサイクルポリシー
保存期間に基づいて保存場所を変更する
標準 →(30日後)→標準IA→(60日後)→Glacier→(1年後)→削除

bayamasabayamasa

マルチパートアップロード
大きなデータの転送を分散して行う

bayamasabayamasa

EBS-Backed vs Instance Store-Backed

EBS-BackedはEBS上にルートボリュームを作成する。
Instance Store-BackedはOSがインストールされるルートボリュームがインスタンスストア上に存在する。

つまりEBSは安全かつ保存性が高い。Instance Storeの方は揮発性なので、インスタンスを終了するとデータが消えてしまう。
https://awsjp.com/AWS/hikaku/Amazon-EBS-Backed_Instance-Store-Backed-hikaku.html

bayamasabayamasa

AWS Compute Optimizerを使用するとインスタンスを最適化するための推薦事項が提示される。

bayamasabayamasa

JeOS AMI
Just Enough Operating System (JeOS)

AMIにOSだけ含める。他のLogの設定/Securityの設定などは起動時のダウンロードによって動的に行う。

AMIの維持コストがかからないが、起動時間がかかったりする。
構成自動化ツールなどが存在するときに重宝する。

どのくらい差が出るかが大事

bayamasabayamasa

プレイスメントグループ
一つのAZ内で、インスタンスをグループ化。
そうすることで低レイテンシー、同時障害のリスクなどを実現出来る

  • クラスター
    低レイテンシー、高スループット
  • パーティション
    大規模分散向け
bayamasabayamasa

RDSの暗号化はS3と違ってデータベースを作成するときにのみ、有効化を選択出来る

bayamasabayamasa

DynamoDBはリージョン毎のDBをまとめるグローバルテーブルを作成する

bayamasabayamasa

RDSのデータ保護

  1. VPCにおける制御
  2. IAMポリシーの追加
  3. セキュリティグループによる通信制御
  4. SSLの使用
  5. インスタンス/スナップショットにおける保管時のデータ保護
  6. DBエンジンのセキュリティ機能
bayamasabayamasa

AWS DMS(Data Migration Service)
同種間、異種間でのデータ移行を実装可能
同種(Oracle→Oracle)
異種(EC2 Mysql → Aurora)

bayamasabayamasa

踏み台ホスト
パブリックサブネットに踏み台ホストを設置し、プライベートサブネットにアクセスしたいリソースを配置する。
これにより外部から閉じたアクセス環境を提供する事ができる。

bayamasabayamasa

セキュリティグループ

  • ステートフルファイアウォール
    往復のトラフィックに対応する。
    つまり、許可されたインバウンドルールによってアクセスされた時、アウトバウンドルールに関わらず通信は許可される。
    またアウトバウンドルールに対して許可された通信も復路での通信がインバウンドルールに反していたとしても許可される。

  • インスタンスまたはネットワークインターフェースレベルで動作する
    インスタンス(EC2, RDS)毎にセキュリティグループの定義が可能。

bayamasabayamasa

ネットワークアクセスコントロールリスト
ネットワークACL

  • サブネットレベルでの動作
  • すべてのインバウンドとアウトバウンドのトラフィックを許可
  • ステートレスなので双方向の明示的なルールが必要
bayamasabayamasa

多層防御
SGとACLで間違えても大丈夫なように2重に防止する

bayamasabayamasa

AWS VPN
静的ルーティング

動的ルーティング
ボーダーゲートウェイプロトコル(BGP)を使用して、そのルートを仮想プライベートゲートウェイに付加

ボーダーゲートウェイプロトコルは経路制御プロトコルとも呼ぶ

bayamasabayamasa

AWS Direct Connect

オンプレ/クラウド間のハイブリッド環境で使用できる

bayamasabayamasa

VPC ピア接続
2つのVPC間の 1 対 1のネットワーク接続
VPC上でデータの転送が必要な場合、利用する。

VPNやゲートウェイなどは不要

bayamasabayamasa

VPCエンドポイント
AWSのサービスがプライベート接続で利用することが可能になる。
これによりIGW、VPN、NATなどの接続用のサービスは不要になる。

bayamasabayamasa

インターフェースエンドポイント
サポートされるプライベートIPを提供

ゲートウェイエンドポイント
AWSサービスを宛先とするルートテーブルを提供する

bayamasabayamasa

IAMポリシー
アクセス可否のドキュメント

IAMロール
サービス毎に付与できる権限形式

bayamasabayamasa

権限の優先順序

  1. 明示的な拒否
  2. 明示的な許可
  3. 暗黙的な拒否

何も記載されていない場合は、拒否のルールが適用される

bayamasabayamasa

属性はチーム、プロジェクトなどをタグとして使用する。
チーム/プロジェクトなどが変更された場合などにおいて、ポリシーが変更になったりするので、ルールを維持しやすい。

bayamasabayamasa

IDフェデレーション
IAMユーザーを作成せずに、既存のIDからアクセスできる方法

AWS STS, SAML, Cognitoなどで認証が可能

bayamasabayamasa

MS ADなどにログインすることで一時的なキーを入手
それでAWSのサービスやコンソールにアクセスする

bayamasabayamasa

開発/テスト/本番などでアカウントを別に設定することで、ロールの付与などを適切に行い、ユーザーの制限をすることが一般的となっている

bayamasabayamasa

水平スケーリング

  1. スケールアウト
    インスタンスを起動して、ELBでアクセスするインスタンスを作る
  2. スケールイン
    インスタンスを終了してコストを下げる

垂直スケーリング
インスタンスサイズを拡大することで、キャパシティを確保する

bayamasabayamasa

EC2 Auto Scaling
ロードバランサーに新しいインスタンスを登録
ELBの負荷に応じてインスタンスを増減させる。

bayamasabayamasa

スケーリングのオプション

  1. スケジュール
  2. 動的
  3. 予測的(機械学習)
bayamasabayamasa

スケーリングのポリシータイプ

  1. 簡易スケーリング
  2. ステップスケーリング
    アラーム超過のサイズに応じて、段階的に調整
  3. ターゲット追跡スケーリング
    Cloudwatchなどで追跡しているメトリクスに応じて調整
bayamasabayamasa

Amazon Aurora Serverless
Auroraのスケーリングを自動で行う。

Aurora キャパシティユニット ACUをいくつ使うかによって課金額が変わる

bayamasabayamasa

シャーディングはデータ結合を行う際に、特別なスクリプトが必要となり、実行時間も長くなってしまう

bayamasabayamasa

ELB
可用性を向上させるロードバランシングサービス
自動的にDNSを分散する

bayamasabayamasa

Application Load Balancer
OSIレイヤー 7 HTTP/HTTPSトラフィックを分散する

bayamasabayamasa

Network Load Balancer
OSI レイヤー4 (TCP/UDP/TLS)にて動作

静的IPアドレスに対して有効

bayamasabayamasa

Route53
複数のアルゴリズムによってルーティングを行う

bayamasabayamasa

フェイルオーバーは基本的にRoute53によって行うものとされる

bayamasabayamasa

AWS EventBridge

AWSのサービス、自身にアプリケーションなどにおいて環境が変化することを監視して、それをトリガーにしてアクションに流す事ができるサービス。

イベント駆動アーキテクチャなどに利用可能だったりする
https://d1.awsstatic.com/webinars/jp/pdf/services/20200122_BlackBelt_EventBridge.pdf

bayamasabayamasa

イベントの例

  • コンソールのサインイン
  • EC2インスタンスの状態変更
  • EC2 Auto Scalingの状態変更
  • EBSボリュームの作成
  • APIコール
bayamasabayamasa

AWS CloudFormation

AWSリソースのコレクションを簡単にモデル化、作成、管理する方法

  • リソースの集合はAWS CloudFormation スタックと呼ぶ
  • 追加料金なし(作成のリソースのみの料金を払う)
bayamasabayamasa

テンプレートを作成して、S3などに保存する
そこからスタックを作成する。

もしスタックの途中で失敗した場合は、全てのリソースの作成をロールバックをすることができる

bayamasabayamasa

ドリフト検出
CloudFormationで作成したスタックからの、手動による変更差分を検出する。
変更ステータスはMODYFIEDで表される。


これにより、他のメンバーや自分が行った不必要な変更差分を是正することができる。

bayamasabayamasa

CloudFormer

CloudFormation上でテンプレートを作成するときに、ToolsでCloudFormerというもの選択すると、現在稼働しているVPCの構成をテンプレートに持ってきてくれる

bayamasabayamasa

CloudFormation Designer
GUI上でネットワークを構築すると、それに応じてテンプレートを作成することができる

bayamasabayamasa

AWS Systems Manager
運用タスクの自動化、管理を一括で行うことができる

bayamasabayamasa

Systems ManagerはゲストOS内での自動化に適している。
なので、CloudFormationで作成したEC2リソースを設定/定義することができる。

bayamasabayamasa

AWS OpsWorks 構成管理サービス
ChefとPuppetと呼ばれる構成管理ツール(Ansibleのようなもの)を使うサーバーを提供する。

CloudFormationはvpcなどの全てのリソースに対して、IaCが提供できるのに対し、これらの構成ツールはアプリケーションにのみ対応可能なので、適用範囲が限られる。

そのため、あまり使用することも少ないように感じる。

bayamasabayamasa

Amazon CloudFront
グローバルCDN
WebSocketおよびHTTP または HTTPSメソッドをサポートする。
独自のSSL証明書をamazon certificate manager を通じて利用可能

bayamasabayamasa

エッジロケーションにコンテンツが存在する場合は、それを返しない場合は、オリジンサーバーにアクセスしてそれを返す

bayamasabayamasa

コンテンツを失効させる方法

  • 有効期限を設ける
  • オブジェクト名を変更する
  • オブジェクト無効化を支持する
    (無効化は非効率で高価)
bayamasabayamasa

スティッキーセッション
クライアントのCookieを用いることで、元々接続していたサーバーの情報をCokkieに保存して、そのサーバーに対して接続を行うことにより情報をキャッシュ化することにより、より早いブラウザ表示などを実現することができる。

bayamasabayamasa

ただ、スティッキーセッションを使用するとサーバーの負荷分散が均一に行われないことにより、一方のサーバーに負荷がかかりすぎてしまうというデメリットなどが存在する。

bayamasabayamasa

Amazon DynamoDB Accelerator
DAX
DynamoDB用のフルマネージド型高可用性インメモリキャッシュ

特にデベロッパーは設定することなく実現できるのでとても便利

bayamasabayamasa

サイドキャッシュ

データベースと隣接して使用する。
より高頻度のアクセスが見込まれるデータはキャッシュに保存するという設定にすることで、レイテンシを削減することができる

bayamasabayamasa

Amazon ElastiCache
フルマネージド型のインメモリデータストア

memcachedとredisがサポートされている

bayamasabayamasa

TTL (Time to live)

有効期限のこと
キャッシュの有効期限を設定することで、有効期限を過ぎた値は廃棄するようにする。
そうすることで、キャッシュに入っているデータが古すぎるといったことを防げる・

bayamasabayamasa

疎結合アーキテクチャ
各レイヤーの中間段階でAWSマネージドソリューションを使用する。
ウェブ層とアプリケーション層などのレイヤーに挟むことで単一障害点を避けることができる

bayamasabayamasa

Amazon SQS
フルマネージドのメッセージキューイングサービス
キュー構造に格納することで分散化を実現する

プロデューサーとコンシューマーの間で成り立つ

bayamasabayamasa

ユースケース
ワークキュー(バッチ処理)
バッチ処理のバッファリング
AutoScalingのトリガー

bayamasabayamasa

キューのタイプは以下
標準キュー
順序はベストエフォートである。
FIFOキュー
正確な順序ですすめる

bayamasabayamasa

色々な副次的な機能がある。
ロングポーリング
デッドレター対応

bayamasabayamasa

Amazon Simple Notification Service (Amazon SNS)
フルマネージド Pub/Sub メッセージングサービス

bayamasabayamasa

CMK(カスタマーマスターキー)を用いてsubはメッセージを受け取る

bayamasabayamasa

SNSがサポートをしているプロトコル

  • Eメール
  • http
  • ショートメッセージサービス(SMS)
  • SQS キュー
  • Lambda
bayamasabayamasa

SNSのユースケース
システムのアラート
プッシュEメールとテキストメッセージ
モバイルプッシュ通知

bayamasabayamasa

AWS Cloud Map

あらかじめ設定した自分の好きな名前で、あらゆるAWSリソースに対してアクセスできます。

例えばロードバランサーを作成した時はそのDNS名がAWSから払い出され、そのDNS名を利用してアクセスしていたかと思います。これが、Cloud Mapを利用すると、IPアドレスがないAWSリソース(LambdaとかSQSとか)へのアクセスも管理できてしまいます。

色々なマイクロサービスを使用する場合に、名前を適切に管理できる仕組み。
従来であればEC2とRDSなどをつなぐ際にはhttp & portをインバウンドルールなどで制御していたが、この機能を使用することで名前を定義して通信をすることができる。

bayamasabayamasa

AWS App Mesh
全てのマイクロサービスに対して、メトリクス, ログ, トレースをキャプチャできるサービス。
マイクロサービス用のログ管理のサービス

bayamasabayamasa

AWS Fargate
kubernetesとコンテナどちらも管理できる、フルマネージド型サービス

bayamasabayamasa

サーバーレス
サーバーに関して悩むことなく、アプリケーションとサービスの構築や実行を行う方法
つまりlambdaのような、サーバーを自分で持たない方法だけではなく、fargateのように自動Scalingをしてくれるようなサービスに関してもサーバーレスと呼べる

bayamasabayamasa

lambdaは関数の実行回数、関数の実行時間に応じて課金額が設定される

bayamasabayamasa

課金額を調整するために、ユーザーはメモリの設定とタイムアウトの設定を行う事ができる。

  • メモリの設定
    メモリ量が大きくなればなるほど、100ミリ秒あたりのコストが増加する
  • タイムアウト
    関数の最大持続時間を設定できる。
    関数の実行時間に対して課金額が設定できるところから、無限ループなどの関数が発生してしまうことの危険性を鑑みるにタイムアウト設定は大事
bayamasabayamasa

Lambdaレイヤー

lambdaで使用するライブラリを共有化することにより、階層化プログラミングが可能になる

bayamasabayamasa

AWS API Gateway
バックエンドのエントリポイントとして機能するAPIの作成/公開/保守/モニタリング/セキュリティ保護が可能

EC2, Lambda, その他のアプリケーションに流すことができる。

API GatewayとELBの違いは複数ある

  • GatewayはプロトコルがHTTPS, ポートが443しか取らないのに対して、ELB(ALB)は任意のポート番号を設定できる
  • タイムアウト時間
  • コスト
    GWは実行回数における重量課金で、ある一定数のリクエストを超えるとELBの方が安く済む
    https://qiita.com/unhurried/items/5a497ec81e4fefe22396
bayamasabayamasa

認証、ポリシー、DDoS攻撃からの保護などのセキュリティを設定することができる

bayamasabayamasa

AWS Step Functions
複数のlambda functionを組み合わせてマイクロサービスを作成する際に使用する事ができるサービス

ワークフローを可視化して、関数の処理の成功/失敗などのログ記録を提供したりする

bayamasabayamasa

ワークフローの条件分岐などを調整することもできる

bayamasabayamasa

災害の回避と計画

高可用性
アプリケーションとデータが使用できなくなる頻度を最小限に抑える

バックアップ
災害時のデータの安全を確保する

災害対策(DR)
災害発生後にデータを復旧し、アプリケーションをオンラインに戻す

bayamasabayamasa

RPO 目標復旧時点
過去のどの時点までのデータを復旧させるかという目標値

例えばRPOが1hだったとすれば、復旧させなければならないデータは最長1h、つまり1h前のデータは必ず復旧させないといけないということになる

このことから、このシステムは1h毎にバックアップを取らないとならないということになる

bayamasabayamasa

RTO 目標復旧時間
いつまでに復旧させるかという目標時間
障害が発生してからどれくらいで、データの復旧とアプリケーションの復旧を行うかと言う時間

bayamasabayamasa

基本的にデータはS3に保管されていることが多い
そのため、S3に耐障害を追加する必要がある。

S3をレプリケーションすることにより、これが可能になる。

bayamasabayamasa

EBSボリュームに置いてもポイントインスナップショットを作成することでデータ復旧を迅速に行う事が可能

bayamasabayamasa

S3ではライフサイクルポリシーを使用することにより、低コストでバックアップを格納することができる

bayamasabayamasa

パイロットライトパターン
障害が発生したときに迅速に対応できるようにセカンダリのインスタンス、レプリケートされたDBを準備しておく

bayamasabayamasa

ウォームスタンバイパターン
メイン機の縮小版のサーバーが常に起動している状態である。
パイロットライトパターンはセカンダリのインスタンスが起動していないのに対して、こちらのパターンは常に起動している状態のため、復旧までの速度が迅速に行われる。

メイン機が障害発生した場合Route 53のトラフィックを切り替えて起動しているセカンダリサーバーに切り替わる。
このサーバーは縮小版であるので、auto scalingによってサーバーを拡張して本番環境に耐えうるだけのサーバーを用意する

bayamasabayamasa

マルチサイトパターン
ウォームスタンバイパターンを縮小版ではなく、完全版つまりメイン機と同等のキャパシティを備えたセカンダリ機を常に稼働させておく

bayamasabayamasa

パイロットライト→ウォームスタンバイ→マルチスタンバイ
上記の順番でRTOが下がり、コストがかかる

このスクラップは2021/11/02にクローズされました