AWS(4)Well-Architectedフレームワーク

Well-Architected Framework

AWS Well-Architected フレームワークは、以下の5つの評価項目で構成されている。

  • 必要なキャパシティを勘に頼らない
  • 本番規模でシステムをテスト
  • 自動化
  • 発展的なアーキテクチャを受け入れる
    • クラウドは自動化とテストが容易で設計変更のリスクを低減できる
    • システムを継続して進化させる
  • データ計測に基づいてアーキテクチャを決定する
  • 本番で想定されるトラブルをあらかじめテストする

1. 運用上の優秀性

設計の原則

  • 運用のコード化を行う
  • ドキュメントに注釈を付ける
  • 頻繁に小さく可逆的な変更を行う
    • システムを小さく設計
    • 失敗した場合に戻せるように
  • 運用手順を頻繁に見直す
  • 発生しうる障害を予想する
  • 運用の失敗を改善に役立てる

ベストプラクティス

準備(本番環境への移行)

  • チェックリストによる検証
  • イベントと障害に対するテスト
  • CloudFormationの利用
  • CloudWatch等を利用した解析
  1. 運用の優先順位を決定する要因は明確ですか?
    • リスクを評価して優先事項を決定することが重要である。
    • ビジネスニーズを評価する
      • 運用事項の決定には、ビジネスチームと開発チームの両方が参加する
    • コンプライアンス要件を評価する
      • 規制や業界標準のルールを考慮する
  2. 運用性を向上させるワークロード設計をしていますか?
    • 設計標準を共有する
      • システム設計に共通の設計標準を取り入れることで複雑性を軽減する
      • 設計標準に対する変更や追加をリクエストする手順を作成し継続的に改善する
    • クラウド運用に向けて設計する
      • 伸縮性や従量課金制などのクラウドの特徴を活用して迅速な改善やテストなどの運用を実現する
    • ワークロードの動作を深く理解する
      • 計測ツールを用いてシステムで何が起こっているかを計測する
    • 顧客の行動を深く理解する
      • 計測ツールを用いてシステムの使用状況を計測する
    • 障害を軽減しフローを改善するための手法を確立する
      • フローを改善して品質向上やバグ修正を迅速に行えるアプローチを確立する
    • デプロイのリスクを軽減する
      • 頻度の高い変更、自動デプロイ、テスト、カナリアデプロイワンボックスデプロイブルーグリーンなどの手法を導入する
  3. ワークロードが運用可能であることをどのように確認していますか?
    • 継続的改善の文化を育てる
    • ビジネスに対する価値の理解を共有する
      • ビジネスにとってシステムがどの程度重要であるのかをチーム全体で共有する
      • 運用上の問題に対応するために必要なリソースを全てのチームが活用できる環境の提供
    • 担当者の能力を確保
      • トレーニングを受けた担当者を適切な人数配置する
    • ガバナンスとガイダンスを文書化し共有する
      • コンプライアンスについて理解しやすく評価可能な標準ルールを共有する
      • 標準ルールの変更、追加をリクエストする手順を作成する
    • チェックリストを使用する
    • 運用手順書ランブック)を使用する
    • 障害対応手順書プレイブック)を使用する
    • 復旧演習を行う

運用

期待されている成果、およびその測定方法を決定し、システムと運用に関する測定基準(メトリクス)を特定する。システムとそのシステムに対する運用の正常性の双方を考慮する。イベント対応の優先度を定めて、影響の度合いに応じて追加の担当者を巻き込むエスカレーショントリガーも含める。計画外のイベントが発生した原因と影響範囲を確認し、今後の運用に反映させるとともに、計画外のイベントであっても自動的に処理されるようにシステムの設計を行う。デプロイやリリース管理、変更ロールバックなどはマニュアルで行なってはならない

  1. 運用状態をどのように確認していますか?
    • ビジネスと顧客について求められる成果を定義する
      • 成功とはどのようなことを指すのか定義し文書化する
    • 成功のメトリクスを特定し達成されているかどうかを確認する
    • ワークロードのメトリクスを特定し達成されているかどうかを確認する
    • 運用のメトリクスを特定し達成されているかどうかを確認する
    • 基準値を定める
    • メトリクスを収集および分析する
    • 分析結果をレビューし対応を確認する
    • 運用のビジネスレベルレビュー
      • ビジネスの目標を達成するために改善が必要な分野を特定する
  2. 運用上のイベントをどのように管理していますか?
    • ビジネスへの影響に基づいて運用イベントの優先順位を決定する
    • イベントやインシデントを管理する方法を確立する
    • アラートを設定したイベントごとの運用手順書(ランブック)を確立する
    • 意思決定者を確立する
    • 障害報告ルートエスカレーションパス)を定義する
    • プッシュ通知
    • ダッシュボードを通じてステータスを通知
    • 根本原因分析のためのプロセスの確立

進化

システムを継続的に少しずつ改善していくことが必要。システムと運用の両方に関して改善できる部分を洗い出し、優先順位を付ける。また、チームを超えて、運用から学んだ知見を共有する。

  1. 運用をどのように進化させていますか?
    • 継続的な改善プロセス
    • 改善の要因の定義
    • フィードバックループを取り入れる
    • 得られた知識を文書化して共有
    • 運用メトリクスの評価を行う

AWSのサービス

AWS CloudFormationを用いてシステム構築を行う。またそれぞれのフェーズで以下のサービスを活用する。

フェーズ AWSサービス 目的
準備 AWS Config システム標準を作成しそれに準拠しているか確認する
運用 Amazon CloudWatch システムの運用状態をモニタリング
進化 Amazon Elasticsearch Service ログデータを分析

2. セキュリティ

設計の原則

  • 強固な認証基盤を整備する
  • 追跡可能性を実現する
  • 全てのレイヤーにセキュリティを適用する
  • セキュリティのベストプラクティスを自動化する
  • 転送中および保管中のデータを保護する
  • データへの直接的なアクセスや手動処理を減らす
  • セキュリティイベントに対して準備を行う

ベストプラクティス

アイデンティティとアクセス管理

権限を持つユーザのみが管理者の意図した方法でリソースにアクセスできるようにする。IAMを用いてきめ細やかなポリシーを適用し、ユーザやグループ、ロール、リソースにアクセス許可を割り当てる。認証情報はシステム間で共有しない。プログラムによるAPIアクセスなどには、STSを用いた一時的な認証情報の利用も検討する。

  1. ワークロードの認証情報をどのように管理していますか?
    • MFAの導入
    • パスワードの要件を決定
    • 認証情報を定期的に更新
    • 認証情報を定期的に監査
    • 一元化されたIDプロバイダーを使用
  2. AWSサービスへの人為的なアクセスをどのように制御していますか?
    • 認証情報を共有しない
    • ユーザのライフサイクルポリシを定義
    • 最小権限を付与
    • アクセス要件を明確に定義
    • ロールやフェデレーションを用いてアクセス権を付与
  3. AWSサービスへのプログラムによるアクセスをどのように制御していますか?
    • 認証情報を共有しない
    • 動的な認証
    • 最小権限を付与
    • アクセス要件を明確に定義

発見的統制

発見的統制には様々な手法があり、アセットとその詳細な属性の一覧を作成し、意思決定やライフサイクル管理を促進することで、運用の基準を確立する手法や、内部監査を使用して、実態がポリシーと一致しているかの確認を行う手法などが存在する。AWSにはこれらを実現するために、Cloud TrailCloudWatchAWS ConfigAWS GuardDutyなどの様々なサービスが提供されている。

またログ管理も非常に重要である。また、潜在的なセキュリティインシデントを特定するためにログを分析することも重要である。

  1. ワークロードのセキュリティイベントをどのように検知していますか?
    • 利用可能なロギングを有効化する
    • AWS CloudTrailを分析する
    • ログを一元的に収集し自動的に分析する
    • 重要なメトリクスとイベントをモニタリングし、アラートを送信する
    • AWS Marketplace や APNパートナーのソリューションを活用する

インフラストラクチャ保護

多層に渡る防御などによって組織や規則上の義務を果たす必要がある。AWSが提供しているサービスやパートナーが提供するサービスを利用して、境界保護の強化、出入口のモニタリング、広範囲のロギング、モニタリング、アラート等を行う必要がある。

  1. ネットワークをどのように保護していますか?
    • VPCを使用してトラフィックを分離・制御する
    • 境界でトラフィックを制御する
    • 利用可能な機能を使用してトラフィックを制御する
      • セキュリティグループ
      • ネットワークACL
      • サブネット
    • AWS Marketplace や APNパートナーのソリューションを活用する
  2. AWSのセキュリティ機能と一般的なセキュリティ脅威に関する最新情報をどのように認識していますか?
    • リリース毎に新しいセキュリティサービスを評価する
    • セキュリティサービスを使用する
  3. コンピューティングリソースをどのように保護していますか?
    • デフォルトの設定を強化する
    • ファイルの整合性を確認する
    • 侵入検知を利用する
    • AWS Marketplace や APNパートナーのソリューションを活用する
    • 設定管理ツールを使用する
    • 定期的パッチ適用脆弱性スキャンを実行する

データ保護

AWSでは、データの暗号化やキーローテーション、ロギング、高い耐久性、バージョニングなどのデータを保護するための様々な機能を提供している。また、保管中と転送中の暗号化を複数の手段で実現できる。

  1. データをどのように分類していますか?
    • データ分類スキーマを使用する
    • データ分類を適用する
  2. データ保護メカニズムをどのように管理していますか?
    • KMSCloudHSMなどのキー管理サービスを使用する
    • サービス内に存在する制御機能を利用する
    • クライアントサイドのキー管理を使用する
    • AWS Marketplace や APNパートナーのソリューションを活用する
  3. 保存中のデータをどのように保護していますか?
    • データの暗号化
  4. 転送中のデータをどのように保護していますか?
    • データの暗号化

インシデント対応

インシデント発生時に、システムの分離影響範囲拡大の抑制通常運用への復帰フォレッジング(証拠保全)などの対応を行うことが可能な体制を確立しておく必要がある。

  1. インシデントに対してどのように備えていますか?
    • セキュリティチームに事前にアクセス件を付与しておく
    • ツールの準備
    • ゲームデーの実施

AWSのサービス

内容 AWSサービス 備考
アクセス管理 IAM リソースへのアクセス管理
発見的統制 CloudTrail APIコールの記録
発見的統制 Config リソース設定インベントリ
発見的統制 Guard Duty 悪意のある動作や不正な動作の検出
発見的統制 CloudWatch リソースのモニタリング
インフラストラクチャの保護 VPC
インフラストラクチャの保護 CloudFront 安全な配信、DDoS攻撃を緩和するSieldとの結合
インフラストラクチャの保護 WAF アプリケーションファイアウォール
データ保護 KMS 暗号化キーの作成と管理
インシデント対応 CloudFormation クリーンルームの作成

3. 信頼性

高い信頼性を維持するためには、システム基盤を十分にモニタリングして、需要や要件の変更を処理するメカニズムを設けることが必要である。具体的には、インフラやサービスの障害からの復旧、必要に応じたリソースの動的な取得、設定ミスや一時的なネットワーク問題などの障害軽減などを検討する必要がある。

設計の原則

  • 復旧手順をテストする
  • 障害から自動的に復旧する
  • 水平方向にスケールして統合的なシステムの可用性を向上させる
  • キャパシティを勘に頼らない
  • 自動化の変更を管理する

ベストプラクティス

基盤

システムのアーキテクチャを設計する前に、信頼性に影響を与える基盤についての要件が整っていることが重要で、AWSの場合はこれらの要件は最初から組み込まれているか、必要に応じて対処できるようになっている。一方で、AWSでは意図せずに過剰にリソースをプロビジョニングしてしまわないように、サービスの上限が設定されている。

  1. AWSサービスの制限をどのように管理していますか?
    • 能動的にモニタリングし制限事項を管理する
    • 制限のモニタリングを自動化する
    • 変更できない制限に注意する
    • フェールオーバに備えて十分余裕をもったリソースを確保しておく
  2. AWS上でのネットワーク構成をどのように設計していますか?
    • オンプレミスと接続しない構成を検討する
    • AWSとオンプレミス間に可溶性の高い接続を実装する
    • 可用性の高いネットワーク接続を実装する
    • 複数のVPCで重複しないプライベートIPアドレス範囲を使用する
    • 拡張性と可用性を考慮してサブネットの割り当てを行う

変更管理

変更がシステムに及ぼす影響を把握し、KPIへの対応を自動化することができる。需要の変更に対応してリソースの追加や削除が自動的に行われるようシステムを設計しておくことで、信頼性が向上しビジネスの成功が運用の負担になることも避けられる。適切にモニタリングされていれば、KPIが予測された基準から逸脱したときにアラートを送ることができる。

  1. システムに対する需要の変化にはどのように対応していますか?
    • 自動的にスケールするワークロードとする
    • 負荷テストを実施する
  2. AWSリソースをどのようにモニタリングしていますか?
    • 全ての階層でモニタリングする
    • モニタリングに基づいて通知を行う
    • イベント発生時にイベントに自動で対応する
    • 定期的にレビューを実施する
  3. 変更をどのように実施していますか?
    • 自動化する

障害管理

障害が発生した場合にそのまま本番環境で診断して修復するのではなく、本番環境外で新しいリソースに置き換えて分析することが重要である。論理エラーと物理エラーの両方から確実に復旧できるように、定期的にデータをバックアップし、バックアップファイルをテストしておく目標復旧時間(RTO)や目標復旧時点(RPO)を定め、システムの回復性を事前に評価する。

  1. データをどのようにバックアップしていますか?
    • 手動のバックアップ
    • 自動化したバックアップ
    • 復旧テストの実施
    • バックアップの暗号化
  2. システムがコンポーネントのエラーに耐えるようにどのように設計していますか?
    • 全ての階層でモニタリングを行いエラーを検知する
    • 複数のAZにデプロイする
    • 疎結合のシステムにする
    • グレースフルデグラデーション
    • 自動機能を使用して修復を行う
    • 可用性に影響するイベント発生時に通知を行う
      • 自動修復された後でも通知を送信する
  3. システムの弾力性をどのようにテストしていますか?
    • 障害対応に備えた障害対応手順書(プレイブック)を用意する
    • 障害注入テストを行う
    • ゲームデーの実施
    • RCA(Root Cause Analysis)の実施
  4. 災害時のリカバリプランはどうなっていますか?
    • 目標復旧時間(RTO)や目標復旧時点(RPO)を定義する
    • 上記を達成するために災害対策(DR)戦略を定義する
    • 本番サイトとDRサイトのずれを管理する
    • DRサイトへのフェイルオーバを定期的にテストする
    • 復旧を自動化する

AWSのサービス

内容 AWSサービス 備考
基盤 IAM リソースへのアクセス管理
基盤 Config リソース設定インベントリ
基盤 Trusted Advisor サービスの制限を把握
基盤 Shield DDoSからの保護
変更管理 CloudTrail APIコールの記録
変更管理 Config リソース設定インベントリ
変更管理 Auto Scaling 需要管理の自動化
変更管理 CloudWatch リソースのモニタリング
障害管理 CloudFormation リソースを規則的にプロビジョニング
障害管理 Glacier 耐久性の高いアーカイブ

4. パフォーマンス効率

需要や技術の進歩に合わせてパフォーマンスを維持することが重要である。

設計の原則

  • 最新テクノロジーの標準化
  • グローバル化を即時に実現
  • サーバレスアーキテクチャの使用
  • 実験の頻度の増加
  • 適合したテクノロジーアプローチ

ベストプラクティス

選択

特定のシステムに最適なソリューションは、ワークロードの種類によって異なり、多くの場合は複数のアプローチを組み合わせたものとなる。複数のソリューションを使用して、様々な機能を有効化することで、パフォーマンスを向上させることができる。アーキテクチャを選択する際には、データ駆動型のアプローチを使用して判断を行う。

  1. 最も良いパフォーマンスのアーキテクチャをどのように選択していますか?
    • テストの結果(ベンチマーク)を元に検討する
    • 負荷テストの結果を元に検討する
  2. コンピューティングソリューションをどのように選択していますか?
    • 複数のサービスの中から検討する
    • インスタンスの設定オプションを検討する
    • コンテナの設定オプションを検討する
    • 関数の設定オプションを検討する
    • 伸縮性を活用する
  3. ストレージソリューションをどのように選択していますか?
    • ストレージ特性を検討する
    • 設定オプションを検討する
    • アクセスパターンを検討する
  4. データベースソリューションをどのように選択していますか?
    • データベース特性を検討する
    • 設定オプションを検討する
    • アクセスパターンを検討する
    • データベース以外の他のアプローチを検討する
  5. ネットワークソリューションをどのように選択していますか?
    • ロケーションを検討する
    • サービスを検討する
    • ネットワーク機能を検討する

レビュー

システム導入から時間が経つと、新しい技術とアプローチが利用できるようになる。AWSの新たなサービスや機能を利用することで、パフォーマンスを大幅に改善できる可能性がある。アーキテクチャのパフォーマンスが何で制約されているかを把握しておくことで、その制約を解決するリリースに気づくことができる

  1. 新しいサービスや機能をどのように取り入れていますか?
    • 評価するプロセスを作成する

モニタリング

システムを実装したらパフォーマンスをモニタリングし、エンドユーザが認識する前に問題を解決する必要がある。モニタリングメトリクスを利用して、閾値を超えたときにアラームを送信するようにする。誤検出が大量に発生していないかや、データを処理しきれなくなっていないかなどを確認する。

  1. 期待通りのパフォーマンスを発揮しているかをどのようにモニタリングしていますか?
    • モニタリング
    • 安全な境界を超えた場合にアラートを送信する
    • 問題の修正を自動化する

トレードオフ

ソリューションを構築する際にトレードオフを考慮することで最適なアプローチを選択できる。トレードオフによりアーキテクチャの複雑さが増す可能性があることに留意する。

  1. パフォーマンスを向上させるためにトレードオフをどのように利用していますか?
    • AWSサービスを利用する
    • パターンを使用する
      • キャッシュ
      • リードレプリカ
      • シャーディング
      • 圧縮
      • バッファリング

AWSのサービス

内容 AWSサービス 備考
レビュー AWSブログ 新しいサービス情報の取得
モニタリング CloudWatch リソースのモニタリング

5. コスト最適化

設計の原則

  • 消費モデルを導入する
  • 全体的な効率を評価する
  • データセンターの運用費を排除する
  • 支出を分析し帰属させる
  • 所有コストを削減するためにマネージドサービスとアプリケーションサービスを利用する

ベストプラクティス

コスト効率に優れたリソース

適切なサービスを用いた優れた設計システムでは、最もコスト効率に優れたリソースが使用されており、優れたコスト効果が得られる

  1. AWSサービス選択の際にコストをどのように評価していますか?
    • サービスを選択する
    • ライセンスコストを最適化する
    • サーバレスとコンテナベースのアプローチを使用する
    • 適切なストレージを使用する
    • 適切なデータベースを使用する
  2. コスト目標を達成するためにインスタンスタイプとサイズをどのように選択していますか?
    • メトリクスに基づいてリソースをサイジングする
  3. コスト削減のために料金モデルをどのように選択していますか?
    • リザーブドインスタンスとリザーブドキャパシティ
    • スポットインスタンス
    • リージョンごとのコスト差を考慮
  4. データ転送料金についてどのように計画していますか?
    • 最適化
    • CDNの利用
    • Direct Connectの利用

需要と供給の一致

需要と供給を最適に一致させることが最もコストが掛からないが、その一方で障害に備えて供給に十分な余力を残しておくことも重要である。AWSでは需要に応じて自動的にリソースをプロビジョニングできる。使用するパターンやプロビジョニングに掛かる時間についてもよく考慮する必要がある。

  1. リソースの供給と顧客の需要をどのように一致させていますか?
    • Autoscalingの利用
    • KinesisやSQSなどのバッファサービスの利用
    • 時間ごとに調整する

費用の把握

それぞれのビジネスオーナまたは製品オーナに属するコストを明確にすることで、リソースを効率的に使用して無駄を削減できる。コストの帰属を明確化することが必要。コスト配分タグを使用してAWS使用料とコストを分類および追跡できる。

  1. AWS使用量とコストをどのようにモニタリングしていますか?
    • リソースのタグ付け
    • Cost Exploerの使用
    • 予算超過の通知
    • ビジネス成果に基づいてコストを配分
  2. AWS使用量をどのように管理していますか?
    • グループとロールを定義
    • プロジェクトのライフサイクルを追跡
  3. 不要なリソースをどのように排除していますか?
    • 削除の自動化
    • 削除プロセスを定義

継続した最適化

AWSによる新たなサービスや機能のリリース時に、既存の決定事項を見直すことで、よりコスト効率のよいシステムとすることができる。定期的にデプロイについてレビューする際には、コストを削減する上でどのサービスが役にたつか評価する

  1. 新しいAWSサービスをどのように評価していますか?
    • 定期的なレビュー
    • コスト最適化を行う担当者を置く
    • ワークロードのレビューと分析
内容 AWSサービス 備考
コスト効率に優れたリソース Cost Explorer リザーブドインスタンス導入
需要と供給の一致 Auto Scaling 需要管理の自動化
費用の把握 Cost Explorer 使用状況の確認および追跡
継続した最適化 AWSブログ 新しいサービス情報の取得

AWS認定(1)ソリューションアーキテクト(アソシエイト)に合格するまで

AWS認定ソリューションアーキテクト試験合格に向けての資料集。以下の資料を何度も読み込んで、手を動かしながら実践を繰り返すことが合格の近道となる。

出題範囲と学習法

AWS認定ソリューションアーキテクト試験の問題は、システムを構築する際に、可用性や拡張性コストなどの観点から、どのAWSサービスをするべきかについて問われることが多い。AWSが提供するサービスは100を超えるが、本試験でよく出題されるサービスは、EC2ELB, Autoscaling, S3(Glacier), EBS, RDS, Cloudfront, SQSなど。

勉強法は、

  1. サンプル問題集に目を通してレベルを確認する
  2. 以下の資料を読みながら実際に各サービスに触れる
  3. 模擬試験を受講する

で十分合格ラインに行くかと。ちなみに学習時間は2週間ほど。

対策本

対策本はほとんど発売されていない。以下の本が唯一の試験対策本。この本には、各サービスの概要や特徴が簡潔に書かれており、AWSの各サービスの概要を学ぶためには非常に有効。一方で、章末問題と実際の試験問題は異なるので、実際の問題に慣れるためには、模擬試験の受講が必要である。

AWSの概要とセキュリティ

AWS(1)AWSの概要とメリット
AWS(4)Well-Architectedフレームワーク
AWS(5)セキュリティのベストプラクティス

AWS Identity and Access Management

AWS(2)セキュリティの概要
AWS Identity and Access Management(1)IAMの概要
AWS Identity and Access Management(4)STS

AWSの基本サービスの概要

Amazon EC2 と Elastic Load Balancing

AWS EC2(1)EC2の概要
AWS EC2(3)AMIとインスタンス
AWS EC2(6)Elastic Load Balancing

Amazon VPC

AWS VPC (1)Amazon Virtual Private Cloud とは

Amazon S3

AWS S3(3)S3の概要
AWS S3(4)使用する上で注意すること

Amazon RDS

AWS RDS(1)Relational Database Serviceの概要

データベース

DynamoDB

AWS DynamoDB(1)DynamoDBの概要

モニタリングと通知

Amazon CloudWatch

AWS CloudWatch(1)CloudWatchの概要

Amazon SNS

AWS SNS(1)Simple Notification Serviceの概要
AWS SNS(2)モバイルプッシュ通知

分析

Amazon Kinesis Data Streams

AWS Kinesis(1)Kinesisの概要

開発者ツール

AWS CLI

AWS CLI(1)初期設定とコマンド例

モバイル

Amazon Cognito

AWS Cognito(1)Cognitoの概要

AWS RDS(1)Relational Database Serviceの概要

RDSとは

RDSは、AWS内でRDBSを簡単に設定、運用、スケールできるサービスで、データベースのセットアップやパッチ適用、バックアップなどの管理タスクを自動化している。対応しているRDBSは、Amazon AuroraMySQLMariaDBOracleMicrosoft SQL ServerPostgreSQLの6種類である。一部制限事項も存在するため、この制限事項とのトレードオフが許容できない場合は、EC2上でRDBSを稼働させることも検討する。

管理負荷を軽減

RDBSにわずか数分でアクセス可能で、CloudWatchによる監視にも対応しているため、パフォーマンスの問題を簡単に検出することが可能である。また、ソフトウェアのパッチが自動的に適用されるために、常に最新の状態が維持されている。

パフォーマンス

汎用(SSD)ストレージプロビジョンドIOPS(SSD)ストレージから選択することが可能である。

スケーラビリティ

最大32vCPUおよびRAM244GiBまで拡張することが可能で、数分以内にスケーリングすることができる。また、ストレージサイズも柔軟に拡大が可能で、稼働中にダウンタイムなしに最大16TBまでストレージの拡張を行うことができる。また、リードレプリカを使用(=Amazon AuroraMySQLMariaDBPostgreSQLのみ対応)することで、読み込み負荷の高い処理をスケールアウトすることができる。

可用性と耐久性

自動バックアップ機能によって自動的(=1日に1回)に、もしくは任意の時点のスナップショットを保存することもでき最大35日(デフォルトは7日間保持)まで保存可能。また、RDは、5分に1回トランザクションログを保存しているため、これを用いて新たなインスタンスを起動(ポイントインタイムディカバリ)が可能。マルチAZ配置オプションを使用することで、異なるAZのスタンバイインスタンスにデータを複製し、可用性を向上させることができ、ハードウェア障害が発生した場合には、自動でフェールオーバされる。DNSでCNAMEが書き換えられ切り替えには数分要する。なお、スナップショット実行時は、短時間I/Oが停止することに注意が必要

セキュリティ

KMSを使用してデータベースを暗号化することが可能。また、VPC上で稼働させることで独自のネットワーク上で外部と隔離された状態で稼働できる。

AWS SNS(2)モバイルプッシュ通知

モバイルプッシュ通知

AWS SNSは、モバイルデバイスのアプリケーションにプッシュ通知メッセージを直接送信できる。通知可能なサービスは、

  • Amazon Device Messaging (ADM)
  • iOS および Mac OS X 用の Apple Push Notification Service (APNS)
  • Baidu Cloud Push (Baidu)
  • Android 用 Google クラウドメッセージング (GCM)
  • Windows Phone 用 Microsoft プッシュ通知サービス (MPNS)
  • Windows プッシュ通知サービス (WNS)

である。

プッシュ通知サービスは、登録時にデバイストークンを返すため、SNSはこのデバイストークンを元にモバイルエンドポイントを作成しプッシュ通知を行う。モバイルプッシュ通知を行うためには以下の手順が必要となる。

  1. 認証情報を上記サービスに対して要求し認証情報を取得する
  2. トークンを上記サービスに対して要求しトークンを取得する
  3. プラットフォームアプリケーションオブジェクトを作成する
  4. プラットフォームエンドポイントオブジェクトを作成する
  5. メッセージを送信する

AWS SNS(1)Simple Notification Serviceの概要

Amazon SNSについて

Amazon SNSは、マネージド型のメッセージ発行/購読サービス。SNSは、発行者からのメッセージを受信し、LambdaやSQS、Email、SMSなどの購読者に対してこれらを送信することが可能である。SNSを使用するときは、その所有者としてトピックを作成し、発行者と購読者を定義するポリシーを策定する。

SNSの流れ

トピック名は他と識別できるユニークな名称であり、発行者はこのARNを利用してメッセージをこのトピックに送信する。購読者は、送信されたメッセージを購読するかどうか判断し、購読を許可した場合に全てのメッセージが受信可能となる。発行者は、各配信先ごとに異なるメッセージを送信することも可能である。トピックの所有者は、購読情報を全て削除(クリーンアップ)することも可能となっている。

SNSの機能とシナリオ

SNSは以下のようなシナリオで動作させることができる。

ファンアウト

発行者からのメッセージをSNSが複製することで、並列非同期処理が可能となるシナリオ。並行処理を行なったり、本番環境のデータをテスト環境に入力するために使用できる。

アラートの送信

アプリケーションやシステムからの出力に対してあらかじめ閾値を定めておき、それを超えた場合にメッセージが送信される。

EメールおよびSMSの送信

特定の購読者へEメールおよびSMSの送信する。

モバイルプッシュ通知

モバイルアプリケーションへ通知を送信する。

ポリシー

所有者は各トピックに対して、「どの購読者(=プリンシパル)がどの配信先(=リソース)を受信できるか。」「どの発行者(=プリンシパル)がメッセージの発行を行えるか」などのアクションを定めることができる。ポリシーのデフォルトは拒否であるため、許可を与えるためにはポリシーを明示しなくてはならない。また、ポリシーでは、リトライ回数や遅延時間等も指定することができる。

AWS S3(4)使用する上で注意すること

パフォーマンス最適化

S3へのリクエストが100rpsを超える場合は、キー(ディレクトリ名やファイル名等)先頭部分の文字列をランダムにする。プレフィックスごとに3500rpsのPUT/POST/DELETEリクエスト5500rpsのGETリクエストを処理可能である。また、大量のGETリクエストが発生する場合には、CloudFrontを併用する。

データ整合性モデル

S3では、書き込み後の読み込み整合性を提供する。また、単一キーに対する更新はアトミックである。しかし、複数のデータセンタに複製することから、オブジェクトを書き込んだ直後に表示させると、オブジェクトが表示されなかったり、古いデータが表示されることがある。また、あるクライアントが書き込みを完了する前に別のクライアントが書き込みを始めた場合などは、整合性のある書き込み結果とならない場合もある。したがって、データベースのトランザクションログなど短時間に書き込みが連続するデータの保存には適さない

バケットの命名規則

バケット名は3文字以上63文字以内で、大文字やアンダースコア、ピリオドを含むことはできない。ハイフンは使用可能。また、バケット名は既存のバケット名の中で一意でなければならない。

ストレージクラス

S3 Standerd(低頻度アクセス)とS3(1ゾーン/低頻度アクセス)は、少なくても30日間保存する予定があり、サイズが128KB以上あるオブジェクトに最適である。

ライフサイクル

S3 Standerd(低頻度アクセス)とS3(1ゾーン/低頻度アクセス)は、現在のストレージクラスに少なくとも30日間は保存する必要がある。ライフサイクル処理は、UTC時0時に実行される。

参考

https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/dev/request-rate-perf-considerations.html

AWS S3(3)S3の概要

S3 (Simple Storage Service)とは

S3は、どこからの、どのような量のデータ(通常100バケットまで1ファイル5TBまで)でも保存と取得が可能なオブジェクトストレージ。データは3箇所以上のデータセンタへ自動複製され、
99.999999999% の耐久性を提供している。高い耐久性、可用性、スケーラビリティー、数多くのセキュリテイ機能を持つ。AWS AthenaやS3 Selectを用いることで簡単に、S3内のデータに対してビッグデータ解析を行うことが可能で、さまざまな方法でS3へのデータ転送を行うことができる。

S3には、S3 StanderdS3 Standerd(低頻度アクセス)S3(1ゾーン/低頻度アクセス)Amazon Glacierの4つのストレージが用意されている。S3(1ゾーン/低頻度アクセス)は、地震や洪水といった災害によるアベイラビリティーゾーンの物理的な損失時にデータを失う可能性がある。S3 Standerd(低頻度アクセス)とS3(1ゾーン/低頻度アクセス)は、他の手法で復元可能なデータや原本のコピーを保存する目的で使用する。VPCエンドポイントを用いることで、同一リージョンのVPC内からセキュアにファイル転送を行うことが可能である。また、複数の暗号化、監査ログ、バージョニングにも対応している。

S3は、キーバリュー型のストアであるので、フラットな構造であり、ディレクトリや階層構造は存在しない。フォルダやファイル名に相当するのがキーであり、スラッシュ文字によってディレクトリ構造のように見せることができる。

タイプ 堅牢性 備考
Standard 99.999999999% 3箇所以上にデータ複製
Standard(低頻度アクセス) 99.999999999% 安価だが読み出しに課金される
1ゾーン(低頻度アクセス) 99.99% 低い堅牢性。オブジェクト毎に指定可能。
Glacier 99.999999999% 取り出しに時間(3-5時間)とコストを要する

S3は、ファイルを複数のチャンクに分割して並列アップロードを行う、Multipart Uploadに対応している。ファイルサイズが100MBを超える場合は、このMultipart Uploadを使用することが奨励されている。AWS CLIでは、ファイルサイズによって自動判別されてこの機能が利用される。Glacierに格納されたデータの復元時には、迅速(Expedited)(=1-5分)、標準(Standard)(=3-5時間)、大容量(Bulk)(=5-12時間)の3種類が用意され、それぞれ実行単価が異なる。

また、静的なファイルをS3のみでホステイング可能なWEBサイトホスティング機能を有している。独自ドメインの指定クロスドメインCloudFrontとの連携なども可能。

セキュリティ

アクセス管理

S3はデフォルトでは全てプライベートアクセス権限となっている。アクセス権限は、バケットやオブジェクト単位で指定可能である。IAMユーザ単位でS3へのアクセス権限を指定できる「ユーザポリシー」(=IPアドレスも指定可能)、バケット毎にアクセス権限を指定できる「バケットポリシー」(=IPアドレスレンジやMFA等も指定可能)、バケットやオブジェクト単位で指定可能な「ACL」などが存在する。バケットポリシーは、バケットの所有者のみが設定でき、またACLは、バケットACLよりもオブジェクトACLが優先される。

暗号化

サーバサイド暗号化、クライアントサイド暗号化の両方に対応している。デフォルト暗号化を指定することも可能である。

Pre-signed Object URL

一定時間のみアクセスを許可するURLを発行できる。

通知

バケットにイベントが発生した際に、SNS、SQS、Lambdaに対して通知を行うことが可能。

モニタリング

CloudWatchとCloudTrailによるモニタリングが可能。

料金

通常ははストレージおよびデータ転送に掛かるコスト全ては、バケットの所有者が負担する。しかし、リクエスタ支払いバケットに指定した場合は、リクエストおよびバケットからのデータダウンロードに掛かるコストは、 所有者ではなくリクエストを実行したリクエスタが支払う

バージョニング

バージョニングが有効となったオブジェクトに対してDELETE処理を行った場合、全てのバージョンはストレージに残り削除マーカーが付加される。当該オブジェクトをGETしようとすると404 Not Foundが返されるが、オブジェクトバージョンを指定すると当該オブジェクトを取得可能である。

ライフサイクル

ライフサイクルと呼ばれる、オブジェクトに対するアクションルールをXMLにより規定できる。ライフサイクルによって、オブジェクトを異なるストレージクラスに移行したり、オブジェクトを削除したりすることができる。Glacierは削除や上書き、アーカイブリクエスト、復元に対して費用が発生する。ただし90日以上アーカイブされているオブジェクトに対する削除および上書きは無料である。

AWS CloudWatch(3)CloudWatch Logsのインストール

EC2インスタンスにCloudWatch Logs Agentをインストールすることで、任意のログをCloudWachに送信することが可能となる。AmazonLinuxを使用する場合には、以下の手順でインストールする。

CloudWatch Logs Agentのインストール

CloudWatch Logs Agentのインストール

CloudWatch Logs Agentはyumから簡単にインストールできる。

yum update -y
yum install -y awslogs

CloudWatch Logs Agentの設定

監視対象のログはconfファイルで設定する。

sudo vi /etc/awslogs/awslogs.conf

標準で/var/log/messagesの情報は送られる設定になるようである。
その下に下記のように設定を追記することで、任意のログを送ることが可能となる。

[/var/log/messages]
datetime_format = %b %d %H:%M:%S
file = /var/log/messages
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /var/log/messages

[test-app-log]
file = /home/ec2-user/test-app/process_log
buffer_duration = 5000
log_stream_name = {instance_id}
initial_position = start_of_file
log_group_name = /home/ec2-user/test-app/process_log

CloudWatch Logsのログデータをエクスポートする

CloudWatch Logsに蓄積したログデータは、S3に一括エクスポートすることができる。詳しくは、「CloudWatch コンソールを使用してログデータを Amazon S3 にエクスポートする」を参照のこと。

AWS(3)監視およびログサービス

AWS Configとは

AWS Configは、リソースごとの設定項目を生成し、履歴としてこれを保持するため、全ての変更を追跡することが可能で、AWSリソース間の関係と設定の履歴などを確認することができる。また、設定が最適であるかの評価設定のスナップショットの取得設定変更時の通知IAMポリシーの確認などを行うことが可能である。

設定項目は、S3バケットに蓄積することが可能で、データはJSON形式でS3に6時間ごとに送信される。また、リソースが変更されたタイミング等で、Amazon SNSを用いてEメール等で通知することも可能である。

設定履歴と設定項目、設定レコーダ

設定履歴は、特定期間の特定リソースに関する設定項目のコレクションである。設定項目は、アカウント内のサポートされているAWSリソースの属性を記録したものである。設定レコーダは、これらのリソースの設定を設定項目としてアカウントに保存する。

設定スナップショットと設定ストリーム

設定スナップショットは、設定項目のコレクションで記録対象のリソースの全体像を示す。また、設定ストリームは、これらの記録しているリソースの設定項目の自動更新リストを示す。

AWS Configの仕組み

AWS Configは、サポートされているAWSリソースを検出し、リソースごとに設定項目を生成し、その記録を履歴として保持する。Configはリソースごとに、DescribeもしくはListのAPIコールによって、リソースの全ての変更を追跡するConfigルールを利用することで、定期的にこのルールに照らして、リソースの設定の評価を行うことができる。

AWS Configルール

AWS Configルールは、各リソースの望ましい設定を確認することが可能で、事前に定義済みのルールが用意されている。また、各ユーザがカスタムルールを作成することも可能となっている。AWS Configは、このルールを参照して、現在の設定を評価する。

マネージドインスタンスの記録

AWS Configを用いて、EC2やオンプレミスサーバのソフトウェアインベントリの変更を記録可能である。

課金

記録される設定項目ごとに 0.003 USDの課金が発生し、これに加えてS3やSNSを使用する場合には、これらのサービスの使用料金が課金される。

AWS Cloudtrailとは

AWSサービスによって実行されたアクションを記録するサービス。この記録を基にAWS アカウントのアクティビティの分析を行い、これらに対応することが可能である。デフォルトで有効にされており、90日間のログが履歴として保持される。また、それ以上保持したい場合には、トレイル機能を用いて、S3やCloudWatch Logs等にイベント配信することも可能である。トレイルは、全リージョンに対して、もしくは特定のリージョンの情報のみを保持することが可能で、作成後に設定内容を変更することもできる。デフォルトではS3の暗号化機能を用いて暗号化され、アクションの15分以内にデータが送信される。

Cloudtrailイベントとトレイル

Cloudtrailイベントには、管理イベントとデータイベントの2種類が存在するが、トレイルにはデフォルトでは管理イベントのみが記録される

課金

デフォルトでは無料で90日間のログを保持しており、これに加えて1つのトレイル作成までは無料となっている。S3やSNSを使用する場合には、これらのサービスの使用料金が課金される。

AWS(2)セキュリティの概要

AWSのセキュリティ

ユーザのデータは、安全性が高いデータセンターに保存される。また、複数のコンプライアンス要件に準拠している。SOC1 ISAE 3402などの複数のITセキュリティ基準に対応しており、その状況は、AWS Articraftから参照することが可能となっている。

AWSのコンプライアンスとセキュリティは、高度な自動化と、高い可用性高度な認定によって実現されている。

責任共有モデル

AWSは、クラウドのセキュリティを管理する。具体的には、AWSはCPU、メモリなどの物理マシンをはじめとしたインフラストラクチャの保護を行う。一方、ユーザは、クラウド内のセキュリティを管理する必要がある。

AWSの組み込みセキュリティ

AWSは、データの暗号化やアクセス管理などのセキュリティサービスを提供しており、Trusted Advisorは、AWS ベストプラクティスに従ってリソースをプロビジョニングするのに役立つ、リアルタイムガイダンスを行う。また、AWS Inspectorは、自動化されたセキュリティ評価サービスで、AWS にデプロイしたアプリケーションのセキュリティとコンプライアンスを向上させることができる。EC2上にエージェントをインストールすることで診断可能となる。

AWS Shieldは、マネージド型の分散サービス妨害 (DDoS) に対する保護サービスで、追加料金なしで AWS Shield Standard の保護の適用を自動的に受けることができるAWS Shield Advancedは、大規模で洗練された DDoS 攻撃に対する追加の検出および緩和策と、ほぼリアルタイムの可視性を提供し、AWS WAFと統合されている。