【AWS認定(SAP-C02)ノート】デプロイ、モニタリング、メンテナンス
はじめに
本記事は、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など)
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) デプロイメントパターン
ローリングデプロイ
- 指定したバッチサイズ(インスタンス数、割合)ずつ、更新デプロイする
- デプロイ中のインスタンスはELBから切り離される
- デプロイ完了後、バッチ内のインスタンスが全て正常な状態になってから、次のバッチの処理が開始
ブルー/グリーンデプロイ
- リクエストの送信先をブルーからグリーンに切り替えてリリースする方法
- Blue:現在のアプリケーションバージョン
- Green:新しいバージョン
- 元のブルー環境が一定時間残るので、グリーン環境に問題があった場合のロールバックを安全に素早く行える
- リリース期間中に同じ環境を重複して用意する分のコストが発生する
Route53
Route53の加重ルーティングを使用してブルー/グリーンデプロイができる
Application Load Balancer
- ALBには複数のターゲットグループを設定できる
- 重み付けによりリクエストの送信を分散でき、ブルー/グリーンデプロイが実現可能
EC2 Auto Scaling
- 起動テンプレートで新しいバージョンを作成し、ディフォルトバージョンに設定
- 新しいバージョンをディフォルトにすることで、次に起動するEC2インスタンスは新しい起動テンプレートバージョンのEC2インスタンスになる
- ターゲットグループなど新規のリソース作成をしたくない場合、作業を最小化したい場合に使用
Elastic Beanstalk
- eb clone:既存環境(v1)と同じ別の環境(v2)を作成
- eb deploy:新しいコードで新しい環境(v2)のコードを更新
- eb swap:本番環境のDNSをv2の環境と付け替える
※ 問題があった場合、もう一度eb swapコマンドを実行してDNSをv1の環境へ戻す
CodePipeline、ECS(コンテナ)
-
CodePipelineのソースステージにCodeCommitリポジトリとECRリポジトリを設定
CodeCommitリポジトリ:
AppSpec.yaml
、ECSタスク定義のtaskdef.json
を管理
ECRリポジトリ:コンテナイメージ管理 -
どちらかが更新された時に、CloudWatch EventsがトリガーされてPipelineが実行される
-
CodeDeployは対象のECSで作成している
-
デプロイグループの2つのターゲットグループでブルー/グリーンデプロイが実行される
- 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をモニターリング
- Lambda関数を設定したスケジュール(Canary)で実行
- 指定したWebページへ定期的に自動アクセス
- その時点のスクリーンショットの取得、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
アプリケーションの潜在的なバグとボトルネックを抽出
- X-Ray SDKをアプリケーションに組み込む
- X-RayのPutTraceSegments APIアクションにより、実行時間やAPI、SQLリクエストの成功失敗がX-Rayに送信される
- 結果をサービスマップやトレース情報で確認
SIEM on Amazon OpenSearch Service
SIEM(Security Information and Event Management):ログの収集、一元的なモニタリング、分析が可能なシステム
- Amazon OpenSearch Serviceを中心としてSIEMシステムを構築
- セキュリティインシデントを調査
- CloudFormationテンプレートが用意されているので、すぐにセットアップして使い始められる
- ログを一元的に集約して、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 Logs
とS3バケット
に出力できる
Run Command
- マネージドインスタンス(EC2、オンプレミスサーバーなど)にコマンドドキュメントに事前定義されたコマンドを実行できる
- マネージドインスタンス
- インスタンスID、タグ、リソースグループから指定できる
-
Systems Managerメンテナンスウィンドウ
で時間を決めてスケジュール実行できる
- コマンドドキュメント
- 独自のコマンドドキュメント作成可能
- バージョン管理でき、バージョンを指定した実行も可能
- マネージドインスタンス
パッチマネージャー
- マネージドインスタンスへのパッチ適用を自動化
- 適用対象:OS、アプリケーション
- ベースライン(どのレベルや範囲のパッチを適用するかを定義)作成できる
- パッチを指定した明示的な適用や拒否も可能
-
ベースラインにパッチグループを設定できる
- 対象のEC2インスタンスにタグ設定
- キー:Patch Group
- 値:ベースラインへ設定したパッチグループ名
- タグが設定されていない場合:OSのデフォルトのベースラインが適用
- 対象のEC2インスタンスにタグ設定
Automation
定義済みのオートメーションドキュメントを実行
OpsCenter
運用で発生した問題の確認や自動記録から解決されるまでのステータスを一元管理
(5) AWS Config
- AWSアカウント内のリソースの設定情報を収集
-
Control Tower
によって組織内のアカウント全てのリリースの設定情報を集約できる- 設定変更の際にイベントとして通知
- 組織で決めたルールやコンプライアンス要件に準拠しているか確認できる
- 非準拠の場合、修復アクションを設定して自動修復(
Systems Manager Automation
選択可)可能 - 組織全体でのコンプライアンスやルール準拠を継続的に強制準拠させたり、検出して抑制管理できる
- 検出コントロール(ガードレール)実行:Configルール
S3バッチオペレーション
S3の数十億のオブジェクトを大規模に管理できる機能
- IAMロール:
batchoperations.s3.amazonaws.com
からの信頼ポリシーが必要 - マニフェストリスト:インベントリファイル(オブジェクトのリスト)が必要
- S3バケットのインベントリ設定で、日次。週次で自動生成されるインベントリファイルを指定
- 任意に作成したCSVファイルを用意
- S3 バッチ操作でサポートされるオペレーション
Discussion