### プロジェクト経験概要
大手外資企業で稼働する 1,000台以上の Windows EC2 に対し、スケジュールされたパッチを自動適用する仕組みを **設計から実装まで担当**した。本番環境かつ障害時の影響が極めて大きい環境で、部署を跨いだスケジュール合意の取得から、Lambda を用いた自動化機構の実装、並行しての OS アップデートまでを行った。
### チーム情報
- クラウドベンダーとして自分を含め7名、設計、打ち合わせ時のファシリテート、スケジュール作成、Lambdaやそれ以外のAWSリソース作成・検証を担当
- 使用技術: AWS(Systems Manager Maintenance Windows / Run Command / Automation、Lambda、S3、SNS)、Windows Server
### 開発・実装内容A: 部署横断のパッチスケジュール合意と入力形式の設計
**【概要】**
手動管理されていた年次パッチ適用を事前にスケジュールとして、自動適用するためのインプット情報として形成した。
**【どのような機能の開発・実装か】**
各部署と調整してパッチ適用スケジュールの合意を取り、それを CSV 形式に定義して S3 へ保存する運用に落とし込んだ。S3へCSV の保存アクションをトリガーに、以降の処理が自動で走る設計とした。
**【課題・問題点】**
- 対象が 1,000台以上あり、EC2 内で稼働する機能ごとに担当部署と適用タイミングが異なっていた
- Windows Serverのバージョンもバラバラである程度揃える必要があった
- 毎年必ず実施が必要なのに全て手動管理で、運用負荷が非常に高い状態だった
- 自動化する以前に、部署ごとにバラバラな適用タイミングを合意させる必要があった
**【打ち手・使用した技術】**
- **部署間の調整を担当**し、適用タイミングの合意を取得
- 合意内容を CSV という**人が編集でき、かつ機械が読める形式**に落とし、運用の入り口を1つに統一
- S3 への保存イベントを起点にすることで、運用担当者が「CSV を置くだけ」で完結する導線にした
**【成果】**
- 年間スケジュールの作成・合意から完了通知までが、CSV を S3 に保存するだけで自動完了する状態を実現
### 開発・実装内容B: パッチ自動適用機構の実装
**【概要】**
CSV を起点に Maintenance Window を自動スケジュールし、結果を通知するまでの処理を実装した。
**【どのような機能の開発・実装か】**
4つ以上の Lambda を組み合わせた処理を実装。CSV の保存を検知して Systems Manager の Maintenance Window を自動スケジュールし、適用の成功・失敗をあらかじめ定義した担当者へ通知する。Lambdaを利用し複数リージョンへの同時適用にも対応させた。
**【課題・問題点】**
- 本番環境であり、パッチ適用の失敗がそのまま大規模障害につながる
- 適用結果を人が追いかける運用では、1,000台規模では確認が追いつかない
- 対象が複数リージョンに分散していた
- 担当者が各サービスごとにバラバラで都度把握するのが非常に困難だった
**【打ち手・使用した技術】**
- スケジュールを **リハーサル用と本番適用用の2種類に分割** し、本番前に問題を検知できるようジョブ設計
- 成功・失敗を担当者へ自動通知し、人が全台を確認する必要をなくした
- Lambda を4つ以上に分割して処理を構成し、複数リージョンへの適用に対応
- AWS Systems Manager(Maintenance Windows、Run Command、Automation)、Lambda、S3、SNS
**【成果】**
- 稼働確認として10台ずつ適用を試し、プロキシ経由でエラーになる事象を複数検知
- 本番適用時の障害発生件数。ネットワーク設定見直しを別PJで対応し大規模な障害はなし
### 開発・実装内容C: 社内プロキシ環境での実行失敗の回避と OS アップデート
**【概要】**
社内プロキシの制約で標準機能が動かない問題を回避し、並行して Windows の OS アップデートを実施した。
**【どのような機能の開発・実装か】**
Automation ドキュメントを自作し、必要なパッケージをあらかじめ取得・保存しておく方式に切り替えた。あわせて、AWS のサポート期限が近い旧バージョンの Windows に対する OS アップデートも並行して実施した。
**【課題・問題点】**
- 社内プロキシの影響でインターネット接続が通らず、Maintenance Window 内で動く Run Command や Automation が失敗するケースが頻発していた
- Windows Server内でAutomation実行時に利用するサービスアカウント(LOCALSYSTEM)のProxy(InternetExplorerのプロキシ設定)が無効化されていなかった
- Windows のバージョンが古く、AWS のサポート切れが近いサーバーが複数存在していた
**【打ち手・使用した技術】**
- AWS 提供の Automation をそのまま使うのをやめ、**必要なパッケージを事前取得・保存する自前の Automation を実装** して、実行時にインターネット接続を必要としない構成にした
- パッチ適用機構の実装と OS アップデートを **並行して進行**
**【成果】**
- プロキシ起因の実行失敗を回避
- OS アップデートを実施した台数10台