継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

SSM Automation を使ったオペレーションの省力化!

タダです.

運用において System Manager Automation(SSM Automation) を使い始めたのですが,これまで Lambda などで仕組み化していたものが AWS が機能として提供されていて感動したのでこの記事で SSM Automation の概要と今取り入れている機能を書きます.

SSM Automation の概要

SSM Automation は EC2 やその他の AWS サービス,運用でのオペレーションを簡素化されたものです.以下の操作が可能です.

自動化ワークフローを構築して、インスタンスおよび AWS リソースを設定し、管理します。

独自のカスタムワークフローを作成するか、または AWS によって管理された定義済みのワークフローを使用します。

Amazon EventBridge を使用してオートメーションタスクおよびワークフローに関する通知を受信します。

Amazon EC2 または AWS Systems Manager コンソールを使用して、自動化の進捗状況および実行の詳細を監視します

docs.aws.amazon.com

SSM Automation ではオペレーションタスクを簡素化されたものをドキュメントと呼ぶのですが,ドキュメントは独自のものも AWS で事前定義されたドキュメントがあります.

事前定義されたドキュメント

AWS によって事前定義されたドキュメントもあり,以下にドキュメント名と概要を一覧にまとめました.たくさんありますよね。。皆さんの普段オペレーションの中でも関連するものがあるのではないでしょうか?

ドキュメント名 ドキュメントの概要
AWSSupport-ActivateWindowsWithAmazonLicense Amazon によって提供されるライセンスで Windows Server の EC2 インスタンスをアクティベートする
AWS-ASGEnterStandby Auto Scaling グループでの EC2 インスタンスのスタンバイ状態を変更
AWS-ASGExitStandby Auto Scaling グループでの EC2 インスタンスのスタンバイ状態を変更
AWS-AttachEBSVolume EC2 インスタンスに EBS ボリュームをアタッチする
AWS-AttachIAMToInstance マネージドインスタンスに IAM ロールをアタッチする
AWSEC2-CloneInstanceAndUpgradeWindows Windows Server 2008 R2,2012 R2,2016 の EC2 から AMI を作成後,その AMI を Windows Server 2012 R2,2012,2016,2019 にアップグレードする
サポートされているアップグレードパスは次のとおり
- Windows Server 2008 R2->Windows Server 2012 R2
- Windows Server 2012 R2-> Windows Server 2016
- Windows Server 2012 R2->Windows Server 2019
- Windows Server 2016->Windows Server 2019
AWSEC2-CloneInstanceAndUpgradeSQLServer SQL Server 2008 もしくはそれ以降で実行している Windows Server の EC2 から AMI を作成後,AMI を SQL Server 2016 にアップグレードする
AWSSupport-CollectEKSInstanceLogs EC2 からOSと EKS 関連のログファイルを収集する
AWS-ConfigureCloudWatchOnEC2Instance マネージドインスタンスの CloudWatch モニタリングを有効または無効に変更する
AWS-ConfigureS3BucketLogging S3 バケットでログを有効にする
AWS-ConfigureS3BucketVersioning S3 バケットのバージョニングを設定する
AWSEC2-ConfigureSTIG STIG(セキュリティ技術実装ガイド)標準に準拠したイメージを迅速に構築できるようインスタンスに STIG を適用する
AWSSupport-ConnectivityTroubleshooter 次の接続性の問題を診断する
- VPC リソース
- VPC ピアリングを使用して接続されている同じリージョン内の異なる VPC リソース
- VPC リソースとインターネットゲートウェイを使用したインターネットリソース
- VPC リソースと NAT ゲートウェイを使用したインターネットリソース
AWS-CopySnapshot EBS のポイントインタイムスナップショットをコピーする
AWS-CreateDynamoDBBackup DynamoDB テーブルのバックアップを作成する
AWS-CreateImage EC2 から AMI を作る
AWS-CreateJiraIssue Jira サーバーに Issue を作る
AWS-CreateManagedLinuxInstance Systems Manager が設定された Linux インスタンスを作成する
AWS-CreateManagedWindowsInstance Systems Manager が設定された Windows インスタンスを作成する
AWS-CreateRdsSnapshot RDS インスタンスのスナップショットを作成する
AWS-CreateServiceNowIncident ServiceNow インシデントテーブルにインシデントを作成する
AWS-CreateSnapshot EBS ボリュームのスナップショットの作成する
AWS-DeleteCloudFormationStack CloudFormation スタックを削除する
AWS-DeleteDynamoDbBackup DynamoDB テーブルのバックアップの削除する
AWS-DeleteDynamoDbTableBackups 保持日数またはカウントに基づいて DynamoDB テーブルのバックアップを削除する
AWS-DeleteEbsVolumeSnapshots EBS スナップショットを削除する
AWS-DeleteImage AMI および関連するすべてのスナップショットを削除する
AWSConfigRemediation-DeleteUnusedIAMGroup IAM ユーザーを含まない IAM グループを削除する
AWS-DeleteSnapshot EBS スナップショットを削除する
AWS-DetachEBSVolume EC2 インスタンスから EBS ボリュームをデタッチする
AWS-DisablePublicAccessForSecurityGroup すべての IP アドレスに対して開かれているデフォルトの SSH および RDP ポートを無効にする
AWS-DisableS3BucketPublicReadWrite パブリック S3 バケットの読み取りと書き込みアクセスを無効にする
AWS-EnableCloudTrail CloudTrail のログ記録を有効化する
AWSConfigRemediation-EnableEnhancedMonitoringOnRDSInstance 指定し RDS インスタンスで拡張モニタリングが有効になる
AWS-EnableS3BucketEncryption S3 バケットの暗号化を有効にする
AWSSupport-ExecuteEC2Rescue EC2Rescue ツールを使用してトラブルシューティングを行い,指定された EC2 インスタンス接続の問題を修復する
AWS-ExportOpsDataToS3 Systems Manager Explorer で OpsData サマリーの一覧を取得し指定した S3 バケットにエクスポートする
AWSSupport-GrantPermissionsToIAMUser 指定されたアクセス権限を IAM グループ に付与し既存の IAM ユーザーを追加する
AWSSupport-ListEC2Resources 指定した AWS リージョンの EC2 インスタンスおよび関連リソース(EBS ボリューム,EIP,Auto Scaling グループなど)に関する情報を返す
AWSSupport-ManageRDPSettings RDP ポートおよびネットワークレイヤー認証などのRDP 設定を管理する
AWSSupport-ManageWindowsService ターゲットインスタンス上の Windows サービスを停止,開始,再起動,一時停止,無効にする
AWS-PatchAsgInstance Auto Scaling グループ内の EC2 インスタンスにパッチを適用する
AWS-PatchInstanceWithRollback EC2 インスタンスをスタンディングベースラインに準拠させる
失敗するとルートボリュームをロールバックする
AWS-PublishSNSNotification SNS に通知を発行する
AWS-RebootRdsInstance RDS インスタンスを再起動する
AWS-ReleaseElasticIP 指定された EIP をリリースする
AWSSupport-ResetAccess 指定された EC2 インスタンスの EC2Rescue ツールを使用してEC2 コンソール (Windows) を通じてパスワードの復号を再度有効にするか,新しい SSH キーペア (Linux) を生成して追加する
AWS-ResizeInstance EC2 インスタンスタイプを変更する
AWS-RestartEC2Instance EC2 インスタンスを再起動する
AWS-RunCfnLint cfn-python-lint を使用して YAML および JSON テンプレートを CloudFormation リソース仕様と照合して検証する
AWS-RunPacker Packer を使ってマシンイメージの作成に使用するテンプレートを検証,修正,構築する
AWSSupport-SendLogBundleToS3Bucket EC2Rescue ツールによって生成されたログバンドルを対象のインスタンスから指定された S3 バケットにアップロードする
AWS-SetupInventory
AWSSupport-SetupIPMonitoringFromVPC 指定されたサブネットに EC2 インスタンスを作成し,ping/MTR/traceroute/tracetcp テストを継続的に実行することによって選択したターゲット IP を監視する
AWS-SetupManagedInstance Systems Manager アクセスの IAM ロールを設定する
AWS-SetupManagedRoleOnEC2Instance SSMRoleForManagedInstance マネージド IAM ロールでインスタンスを設定する
AWSSupport-ShareRDSSnapshot 暗号化された RDS スナップショットを共有する
AWSEC2-SQLServerDBRestore S3 に保存されている Microsoft SQL Server データベースのバックアップを Linux インスタンスで実行されている SQL Server 2017 に復元する
AWS-StartEC2Instance 1つ以上の EC2 インスタンスを起動する
AWSSupport-StartEC2RescueWorkflow EC2Rescue 用で作成されたヘルパーインスタンス上で指定された base64 エンコードスクリプト (Bash または Powershell) を実行する
AWS-StartRdsInstance RDS インスタンスを起動する
AWS-StopEC2Instance 1つ以上の EC2 インスタンスを停止する
AWS-StopRdsInstance RDS インスタンスを停止する
AWS-TerminateEC2Instance 1 つまたは複数の EC2 インスタンスを削除する
AWSSupport-TerminateIPMonitoringFromVPC AWSSupport-SetupIPMonitoringFromVPC によって以前に開始された IP モニタリングテストを終了する
AWSSupport-TroubleshootConnectivityToRDS EC2 インスタンスとRDS インスタンスの間の接続の問題を診断する
AWSSupport-TroubleshootDirectoryTrust AWS Managed Microsoft AD と Microsoft Active Directory の間の信頼関係の作成の問題を診断する
AWSSupport-TroubleshootRDP RDP 接続に影響する可能性があるターゲットインスタンスの一般設定 (RDP ポート/ネットワークレイヤー認証/ファイアウォールプロファイルなど) を確認または変更できる
AWSSupport-TroubleshootS3PublicRead 指定したパブリック S3バケットからオブジェクトを読み取る際の問題を診断する
AWSSupport-TroubleshootSSH Linux 用の EC2Rescue ツールをインストールし,EC2Rescue ツールを使用して Linux マシンへのリモート接続を妨げる一般的な問題を SSH 経由で確認する
AWS-UpdateCloudFormationStack S3 バケットに格納されている CloudFormation テンプレートを使用して CloudFormation スタックを更新する
AWS-UpdateLinuxAmi Linux の AMI を更新する
AWS-UpdateWindowsAmi Windows の AMI を更新する
AWSSupport-UpgradeWindowsAWSDrivers 指定された EC2 インスタンスでストレージおよびネットワークドライバーをアップグレードまたは修復する

活用しているドキュメント

自分が活用しているのは AWS-StartEC2InstanceAWS-StopEC2Instance です.コスト削減目的で常時起動する必要がないサーバーの起動/停止に使っています.2つのドキュメントは CloudWatch Events を使って設定します.

f:id:sadayoshi_tada:20201106233637p:plain f:id:sadayoshi_tada:20201106234031p:plain

また,CloudWatch Events から SSM Automation を呼び出すための IAM ロールを設定する必要があります.IAM ロールには AWS 管理ポリシーとして AmazonSSMAutomationRole を設定することで利用可能になります.

まとめ

SSM Automation の概要と実際に使っている EC2 の起動と停止の設定についてまとめました.今までコードを作って管理していたりしましたが,そのコードのメンテナンスや管理をするコストを考えると SSM Automation は事前定義されたドキュメントであればそのコストから解放されて良いなと感じました.まだまだ使いたてなのでもっと活用していきたいです.

関連ドキュメント

docs.aws.amazon.com