ノーコードで運用自動化! Systems Manager Automationを見直したい

運用タスクを自動化してみませんか? Systems Manager Automation ならノーコードで自動化可能です
2022.04.18

こんにちは。
ご機嫌いかがでしょうか。
"No human labor is no human error" が大好きな吉井 亮です。

AWS を使用するメリットは多くありますが、そのうちの一つに「自動化が容易に実装できる」があると考えています。
作業自動化はエラーを減らす、人的負荷を減らす、社内の複雑なフローを減らす効果が見込めます。
積極的に自動化を推進していきたいところです。

本エントリでは Systems Manager Automation (SSM Automation) を紹介します。
SSM Automation は AWS re:Invent 2016 の Systems Manager (当時は EC2 Systems Manager) 発表時から実装されています。それ以降進化を重ねてとても便利で使い勝手の良い機能です。ぜひこの機会にお試しください。

Systems Manager Automation とは

AWS リソースをデプロイ、構成、維持管理していくためのソリューションやタスク実行に役立つ機能です。
AWS が用意している事前定義されたドキュメント、または、ご自身で作成するカスタムドキュメントを利用して作業を自動化します。
ドキュメントは OS コマンドや AWS API を記述した一連のスクリプトだと考えてもらうと解りやすいかもしれません。

ユーザーガイドからメリットを抜粋します。

  • Runbookコンテンツでのスクリプトのサポート
  • 一元的な場所から複数の AWS アカウント、および、AWS リージョン内のオートメーションを実行する
  • 運用のための強化されたセキュリティ
  • 一般的な IT タスクを自動化する
  • 破壊的なタスクを一括して安全に実行する
  • 複雑なタスクを合理化する
  • 入力での制約を定義する
  • オートメーションアクションからの出力を Amazon CloudWatch Logs にログ記録する
  • Amazon EventBridge との統合
  • 組織のベストプラクティスを共有する

今回は AWS 事前定義のドキュメントのうちから主だったものをカテゴリ別に紹介します。

すべてのドキュメントは Systems Manager 画面から確認できます。

AWS Documentation

ユーザーガイドに記載されている手順やチュートリアルの手順が自動化されています。

AWSDocs-HostingAWordPressBlog-AL2

Amazon Linux 2 に WordPress をインストール、構成するタスクを自動化しています。
EC2 は予め用意しておきます。
ドキュメント内容的には チュートリアル: Amazon Linux 2 での WordPress ブログのホスト に近いことを実行しています。

AWSDocs-Configure-SSL-TLS-AL2

Amazon Linux 2 に LAMP をインストールし、自己署名証明書を作成、Apatch の SSL.conf を構成するタスクを自動化しています。
このドキュメントの使い道はともかくとして、カスタムドキュメントを作成する際の参考になると思います。

Remediation

これが一番使いそうです。
AWS 構成を希望する状態に戻してくれるドキュメントが揃っています。
AWS アカウントに統制を効かせたい場合、Config Rules から呼び出して自動復旧を行うケースがあります。

AWSConfigRemediation-ConfigureS3BucketPublicAccessBlock

S3 バケットのパブリックアクセスブロックを有効にします。
Config Rules の s3-bucket-level-public-access-prohibited の修復アクションに指定します。

AWSConfigRemediation-ConfigureS3PublicAccessBlock

こちらはカウントレベルの S3 パブリックアクセスブロックです。
Config Rules の s3-account-level-public-access-blocks の修復アクションに指定します。

AWSConfigRemediation-RevokeUnusedIAMUserCredentials

一定期間使用していない IAM パスワード、または、アクセスキーを無効にします。
Config Rules の iam-user-unused-credentials-check の修復アクションに指定します。

Patching

EC2 へのパッチ自動化ドキュメントです。

AWS-PatchInstanceWithRollback

Windows Server、主要 Linux、MacOS へのパッチ適用を自動化します。
パッチ適用前にルートボリュームのスナップショットを取得しており、パッチ適用に失敗するとリストアするところまで自動化されています。

Security

セキリュティベストプラクティスに沿った自動化が揃っています。

AWS-DisablePublicAccessForSecurityGroup

セキュリティグループのうち、SSH or RDP が 0.0.0.0/0 に対して公開されているルールを削除します。
Automation ドキュメントで最も使われているドキュメントではないでしょうか。(調べてません)

導入してみたい方は以下のエントリを参照ください。

Instance management

EC2、EBS に関する様々なタスクが自動化されています。

AWS-ResizeInstance

EC2 インスタンスタイプ変更を自動化します。
変更後のインスタンスタイプはパラメーターで指定します。

インスタンスタイプ変更は EC2 の停止起動が伴います。EventBridge などでスケジュールしておいて実行するのが一般的だと思います。

AWS-StartEC2Instance,AWS-StopEC2Instance

EC2 インスタンスの起動と停止を自動化します。
これらのドキュメントも使われているランキングトップ3に入るのではないでしょうか。(調べてません)

始業時間に EC2 インスタンスを起動、終業時間に停止を実現したい方はお試しください。
EventBridge などでスケジュールしてお使いください。

AWSEC2-CloneInstanceAndUpgradeWindows

Windows Server のインプレースアップグレードを自動化してます。
指定した EC2 の AMI を取得し、そこから新しいインスタンスを起動、インプレースアップグレードという手順のようです。

(当たり前ですが) アップグレードは次のバージョン (2008 R2 なら 2016) になります。
Windows Server 2008 R2 から 2019 へという2つ飛びをしたい場合は、このドキュメントを2回実行する必要あります。

AWSEC2-CloneInstanceAndUpgradeWindows

Disaster recovery and backup

バックアップ関連の自動化が揃っています。

AWS-CopySnapshot

取得済 EBS スナップショットを同一リージョン、または、別リージョンへコピーします。
ただ、よほどの事情が無い限りは、スナップショットの別リージョンコピーは AWS Backup を使ったほうがスムーズかと思います。

AMI Management

その名の通り AMI 管理をします。
Windows と Linux の AMI をアップデートするタスクを自動化しています。

AWS-UpdateLinuxAmi

既存の AMI を更新します。更新ステップは以下の通りです。
yum 等のパッケージマナージャー管理外のソフトウェアをインストール or アップデートする場合は予め https でダウンロード可能な場所にインストールスクリプトを配置しておきます。

  1. AMI から仮インスタンスを起動する
  2. S3 などに配置したシェルスクリプトをダウンロードし実行する
  3. AWS CLI や SSM Agent などの AWS ソフトウェアをアップデートする
  4. 仮インスタンスを停止して AMI を取得する
  5. 仮インスタンスを削除する

Self service support workflows

トラブル時の解析に役立つ自動化が揃っています。

AWSSupport-CheckAndMountEFS

Linux インスタンスに対し、指定した EFS マウントがされているかのチェックと EFS マウントを自動化しています。
EFS がマウントできない! といったトラブル時に切り分けとして使います。
fstab を更新してくれるわけではなさそうなので、初期設定には使えないと思います。

AWSSupport-ConnectivityTroubleshooter

送信元と送信先を指定すると、Security Group、NACL、Route Table、IGW、NAT Gateway などの VPC 設定を確認しどこに問題があるかを探し当ててくれます。
VPC 内リソース同士の通信が不通となった場合に役立つと思います。

AWSSupport-ExecuteEC2Rescue

EC2Rescue、、、みなさん EC2Rescue ご存知でしょうか?
Windows Server のトラブル解析ツールです。これの実行を自動化しています。

EC2Rescue を知りたい方は以下のエントリを参照ください。

AWSSupport-RestoreEC2InstanceFromSnapshot

EBS スナップショットから EC2 インスタンス復元を自動化します。
スナップショット ID を指定するとそのスナップショットからルートボリュームを復元し EC2 インスタンスにアタッチしてくれます。

Resource management

AWS リソースに対する設定作業を自動化しています。

AWS-EnableS3BucketEncryption

指定した S3 バケットを暗号化します。
暗号化アルゴリズムはパラメーターで指定します。
セキュリティ要件でバケット暗号化が必須なこともあると思います。

AWS-UpdateCloudFormationStackWithApproval

CloudFormation スタックを更新するタスクですが、更新の前に承認が必要な自動化です。
承認者には SNS 経由で依頼が飛びますので予め SNS を設定しておく必要があります。

Cost management

コスト削減に役立つ自動化です。
先に紹介した AWS-ResizeInstance と AWS-StopEC2Instance がリストされています。

まとめ

Systems Manager Automation を紹介しました。
タスク自動化ですと Lambda 関数を自前で作成する方が増えている印象です。
Lambda 関数のランタイムサポートはいつか期限を迎え使えなくなりますが、ここまで考えて提案・実装しないとならないのが悩みどころです。

Automation のうち AWS が用意してくれているドキュメントであれば AWS が責任をもって管理してくれるはずです。
Lambda 関数をかける人材いない環境でも安心して使用することができるのはないでしょうか。
できる限りマネージドサービスを使うことを常々お勧めしていますが、自動化に関しても同様です。

今回紹介したドキュメントは全体の一部です。
すべてのドキュメントを知りたい方はマネジメントコンソールから、または、ユーザーガイドでご確認ください。

参考

AWS Systems Manager Automation
Amazon EC2 Systems Manager の Automation をやってみた
AWS Config ルールの違反時に修復アクションを自動実行させる
[アップデート] AWS Config Rule 非準拠リソースを自動修復する機能が追加になりました!

以上、吉井 亮 がお届けしました。