⚒️

【AWS認定(SAP-C02)ノート】デプロイ、モニタリング、メンテナンス

2023/06/26に公開

はじめに

本記事は、AWS Certified Solutions Architect - Professional第 2 分野: 新しいソリューションのための設計タスクステートメント 1: ビジネス要件を満たす導入戦略を設計する。に関連するAWSサービスの特徴やポイントのまとめです

対象知識

  • Infrastructure as Code (IaC) (AWS CloudFormation など)
  • 継続的インテグレーション/継続的デリバリー (CI/CD)
  • 変更管理プロセス
  • 構成管理ツール (AWS Systems Manager など)

(1) デプロイ関連サービス

AWS Codeシリーズ (CodeCommit、CodeBuild、CodeDeployなど)

https://zenn.dev/minonoblog/articles/0614c7b243d9fa

AWS Elastic Beanstalk

  • 開発者が素早くAWSを使い始めることができるようにするサービス
  • アプリケーションが作成され、環境を複数作成できる
  • 環境ごとにDNSが生成される(ドメインで名前解決できるように設定)

.ebextensions

アプリケーションのカスタマイズ:EB CLIを実行するカレントディレクトリに、.ebextensionsディレクトリを作成して、配下にconfigファイルを配置

  • packages:指定したパッケージをダウンロードしてインストールできる
  • sources:アーカイブファイルをダウンロードしてターゲットディレクトリに展開
  • files:EC2インスタンス上にファイルを作成
  • container_commands:アプリケーションバージョンがデプロイされる前に、ルートユーザー権限で実行される
  • option_settings:Elastic Beanstalk環境設定の環境変数を定義

.ebextensions/network-load-balancer.config

この例では、環境ロードバランサーのタイプを Network Load Balancer に設定する設定オプションを変更する

option_settings:
  aws:elasticbeanstalk:environment:
    LoadBalancerType: network

(2) デプロイメントパターン

ローリングデプロイ

  1. 指定したバッチサイズ(インスタンス数、割合)ずつ、更新デプロイする
  2. デプロイ中のインスタンスはELBから切り離される
  3. デプロイ完了後、バッチ内のインスタンスが全て正常な状態になってから、次のバッチの処理が開始

ブルー/グリーンデプロイ

  • リクエストの送信先をブルーからグリーンに切り替えてリリースする方法
    • Blue:現在のアプリケーションバージョン
    • Green:新しいバージョン
  • 元のブルー環境が一定時間残るので、グリーン環境に問題があった場合のロールバックを安全に素早く行える
  • リリース期間中に同じ環境を重複して用意する分のコストが発生する

Route53

Route53の加重ルーティングを使用してブルー/グリーンデプロイができる

Application Load Balancer

  • ALBには複数のターゲットグループを設定できる
  • 重み付けによりリクエストの送信を分散でき、ブルー/グリーンデプロイが実現可能

EC2 Auto Scaling

  • 起動テンプレートで新しいバージョンを作成し、ディフォルトバージョンに設定
  • 新しいバージョンをディフォルトにすることで、次に起動するEC2インスタンスは新しい起動テンプレートバージョンのEC2インスタンスになる
  • ターゲットグループなど新規のリソース作成をしたくない場合、作業を最小化したい場合に使用

Elastic Beanstalk

  1. eb clone:既存環境(v1)と同じ別の環境(v2)を作成
  2. eb deploy:新しいコードで新しい環境(v2)のコードを更新
  3. eb swap:本番環境のDNSをv2の環境と付け替える

※ 問題があった場合、もう一度eb swapコマンドを実行してDNSをv1の環境へ戻す

CodePipeline、ECS(コンテナ)

  1. CodePipelineのソースステージにCodeCommitリポジトリとECRリポジトリを設定

    CodeCommitリポジトリ:AppSpec.yaml、ECSタスク定義のtaskdef.jsonを管理
    ECRリポジトリ:コンテナイメージ管理

  2. どちらかが更新された時に、CloudWatch EventsがトリガーされてPipelineが実行される

  3. CodeDeployは対象のECSで作成している

  4. デプロイグループの2つのターゲットグループでブルー/グリーンデプロイが実行される

    1. Pipelineのデプロイステージアクションプロバイダー:Amazon ECS(Blue/Green)

(3) モニタリング

AWS Healthイベント

AWSアカウントに影響を及ぼすイベントをモニタリング

  • アカウント固有のイベント:AWSアカウントで使用中のリソースなど、直接的に影響のある情報
  • パブリックイベント:アカウントでは使用していないサービスについての情報

AWS Personal Health Dashboard

  • ダッシュボードとイベントログで、過去90日のアカウント固有のイベントとパブリックイベントを確認(モニタリング)
  • アカウント固有のイベントはEventBridgeと連携して自動アクションが可能
  • イベントにはイベントタイプカテゴリー(eventTypeCategory)は含まれている
    • 問題(issue)
    • アカウント通知(accountNotification)
    • スケジュールされた変更(scheduledChange)
  • 各イベントには、イベントタイプコード(eventTypeCode)が含まれている

AWS Health API

Personal Health Dashboardの情報にAPIでアクセス

Service Health Dashboard

インターネット上の公開ページで、パブリックイベントを確認(アカウント固有のイベントは含まれていない)

Amazon CloudWatch

メトリクス、ダッシュボード

  • クロスアカウントオブザーバビリティ:複数アカウントに跨ったメトリクスやログを共有できる
  • Organizationsで組織における共有を簡単にセットアップできる

アラーム

  • 複数アラームを設定できる
    • AND、OR、NOTで組み合わせて1つのアラームアクションを実行できる
  • アラームアクション(追加)
    • Systems Manager Ops CenterへのOpsItemsの作成
    • Incident Managerへのインシデント作成

異常検出

  • CloudWatchメトリクスで異常検出設定できる
  • 統計アルゴリズムと機械学習アルゴリズムによって、正常ベースラインが統計される
  • 異常値に対するCloudWatchアラームの設定も可能

CloudWatch Logs

AWSサービスやCloudWatchエージェントによるアプリケーションログなど様々なログを収集できる

  • 機密情報を自動でマスク保護できる
  • CloudWatch Logsインサイト:クエリによるインタラクティブな分析が可能
  • メトリクスフィルター
    • 特定の文字列の発生回数をメトリクスとして扱ってアラームを実行
    • ログ内の特定フィールド数値をメトリクスにできる

CloudWatch Synthetics

スケジュールに沿って実行される設定可能なスクリプトであるCanaryを作成し、エンドポイントとAPIをモニターリング

  1. Lambda関数を設定したスケジュール(Canary)で実行
  2. 指定したWebページへ定期的に自動アクセス
  3. その時点のスクリーンショットの取得、Webページのコンテンツのダウンロード時間などを記録

CloudWatch RUM

  • RUM(リアルユーザーモニタリング):エンドユーザーの場所や使用デバイス別のパフォーマンスやエラー発生情報を取得してモニタリング
  • ユーザーの属性(ブラウザなど)によって異なるパフォーマンスをモニタリングできる
  • JavaScriptコードスニペットをアプリケーションに追加すると、モニタリングが開始される

Amazon VPCのモニタリング

VPC Flow Logs (VPCフローログ)

VPCのネットワークインターフェイスとの間で行き来するIPトラフィックに関する情報をキャプチャできるようにする機能

  • 接続とセキュリティの問題のトラブルシューティングを行い、ネットワークルールが期待通りに機能していることを確認
  • ENIへのインバウンド/アウトバウンドトラフィックに関する情報を、CloudWatch LogsまたはS3バケットへ送信
    • CloudWatch Logs:VPC Flow LogsサービスにIAMロールを設定
    • S3バケット:バケットポリシーでS3バケットへの送信許可を設定
  • 各種のAWS情報をモニタリングできる(ただし、トラフィックの全てをモニタリングするものではない)

プライベートサブネットの EC2 インスタンス の 1 つのネットワークインターフェイスで承諾されたトラフィックをキャプチャし、フローログレコードを Amazon S3 バケットに発行するフローログ

サブネット B のすべてのトラフィックをキャプチャし、フローログレコードを Amazon CloudWatch Logs に発行する。フローログは、サブネット内のすべてのネットワークインターフェイスのトラフィックをキャプチャ

トラブルシューティング

  • S3バケットなど、トラフィックそのもののコピーが必要な場合に使用
  • 送信元:EC2インスタンスにアタッチされたENI
  • 送信先
    • 1つのEC2インスタンスにアタッチされたENI
    • Network Load Balancer
  • 高可用性:Network Load Balancerを使用して複数のモニタリング用のEC2インスタンスに送信
  • 目的
    • 実際のバケットを分析 → パフォーマンスの問題に関する根本原因分析
    • 高度なネットワーク攻撃に対するリバースエンジニアニング
    • 侵害されたワークロードの検出と停止

AWS X-Ray


アプリケーションの潜在的なバグとボトルネックを抽出

  1. X-Ray SDKをアプリケーションに組み込む
  2. X-RayのPutTraceSegments APIアクションにより、実行時間やAPI、SQLリクエストの成功失敗がX-Rayに送信される
  3. 結果をサービスマップやトレース情報で確認

SIEM on Amazon OpenSearch Service

SIEM(Security Information and Event Management):ログの収集、一元的なモニタリング、分析が可能なシステム

  • Amazon OpenSearch Serviceを中心としてSIEMシステムを構築
  • セキュリティインシデントを調査
  • CloudFormationテンプレートが用意されているので、すぐにセットアップして使い始められる

https://github.com/aws-samples/siem-on-amazon-opensearch-service/tree/main

  • ログを一元的に集約して、Lambda関数が変換してOpenSearch Serviceにロードする
  • OpenSearch Dashboardsで可視化、分析できる

(4) 構成管理、メンテナンス

AWS Systems Manager

LinuxやWindowsのEC2インスタンス、オンプレミスのサーバーにSSM Agentをインストールすることで、Systems Managerのマネージドインスタンス(管理対象)にできる

  • SSM Agentで必要な要素
    • AWS管理ポリシー(AmazonSSMManagedInstanceCoreなど)の権限
    • Systems Managerサービスへリクエストできるネットワーク
  • ポリシー設定方法
    • EC2インスタンスのIAMロール
    • Systems Managerのデフォルトのホスト管理設定(Default Host Management Configuration)

Session Manager

  • セキュリティグループでSSHポートを許可する必要もキーペアを使用する必要もない
  • sudo可能なssm-userを使って対話式コマンドを実行できる
  • コマンドの実行履歴:CloudWatch LogsS3バケットに出力できる

Run Command

  • マネージドインスタンス(EC2、オンプレミスサーバーなど)にコマンドドキュメントに事前定義されたコマンドを実行できる
    • マネージドインスタンス
      • インスタンスID、タグ、リソースグループから指定できる
      • Systems Managerメンテナンスウィンドウで時間を決めてスケジュール実行できる
    • コマンドドキュメント
      • 独自のコマンドドキュメント作成可能
      • バージョン管理でき、バージョンを指定した実行も可能

パッチマネージャー

  • マネージドインスタンスへのパッチ適用を自動化
  • 適用対象:OS、アプリケーション
  • ベースライン(どのレベルや範囲のパッチを適用するかを定義)作成できる
  • パッチを指定した明示的な適用や拒否も可能
  • ベースラインにパッチグループを設定できる
    • 対象のEC2インスタンスにタグ設定
      • キー:Patch Group
      • 値:ベースラインへ設定したパッチグループ名
    • タグが設定されていない場合:OSのデフォルトのベースラインが適用

Automation

定義済みのオートメーションドキュメントを実行

OpsCenter

運用で発生した問題の確認や自動記録から解決されるまでのステータスを一元管理

(5) AWS Config

  • AWSアカウント内のリソースの設定情報を収集
  • Control Towerによって組織内のアカウント全てのリリースの設定情報を集約できる
    • 設定変更の際にイベントとして通知
    • 組織で決めたルールやコンプライアンス要件に準拠しているか確認できる
    • 非準拠の場合、修復アクションを設定して自動修復(Systems Manager Automation選択可)可能
    • 組織全体でのコンプライアンスやルール準拠を継続的に強制準拠させたり、検出して抑制管理できる
    • 検出コントロール(ガードレール)実行:Configルール

S3バッチオペレーション

S3の数十億のオブジェクトを大規模に管理できる機能

Discussion