タダです.
運用において System Manager Automation(SSM Automation) を使い始めたのですが,これまで Lambda などで仕組み化していたものが AWS が機能として提供されていて感動したのでこの記事で SSM Automation の概要と今取り入れている機能を書きます.
SSM Automation の概要
SSM Automation は EC2 やその他の AWS サービス,運用でのオペレーションを簡素化されたものです.以下の操作が可能です.
自動化ワークフローを構築して、インスタンスおよび AWS リソースを設定し、管理します。
独自のカスタムワークフローを作成するか、または AWS によって管理された定義済みのワークフローを使用します。
Amazon EventBridge を使用してオートメーションタスクおよびワークフローに関する通知を受信します。
Amazon EC2 または AWS Systems Manager コンソールを使用して、自動化の進捗状況および実行の詳細を監視します
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-StartEC2Instance
と AWS-StopEC2Instance
です.コスト削減目的で常時起動する必要がないサーバーの起動/停止に使っています.2つのドキュメントは CloudWatch Events を使って設定します.
また,CloudWatch Events から SSM Automation を呼び出すための IAM ロールを設定する必要があります.IAM ロールには AWS 管理ポリシーとして AmazonSSMAutomationRole
を設定することで利用可能になります.
まとめ
SSM Automation の概要と実際に使っている EC2 の起動と停止の設定についてまとめました.今までコードを作って管理していたりしましたが,そのコードのメンテナンスや管理をするコストを考えると SSM Automation は事前定義されたドキュメントであればそのコストから解放されて良いなと感じました.まだまだ使いたてなのでもっと活用していきたいです.