4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

セゾンテクノロジーAdvent Calendar 2024

Day 21

AWS Resource Schedulerの設定を、OUを使わずに任意の複数アカウントに展開したい

Posted at

本記事を閲覧いただき、ありがとうございます。
駆け出しクラウドエンジニアの青木です。

Resource Schedulerとは

AWS Systems Manager内Quick Setupの機能の中の一つで、特定のタグが付いたEC2インスタンスの起動/停止時間を、任意の時間に・一括で 設定できるサービスです。
裏ではCloud Formation StackSetが動いて設定をデプロイしているそうです。
詳しくは公式ドキュメントを参照:
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/quick-setup-scheduler.html
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/quick-setup-getting-started.html

今回やりたいこと

作業中のアカウントから、別の複数のアカウントに向けて一括でResource Schedulerを展開したい。
今回はOUを指定する方法ではなく、任意の複数アカウントに対し設定を行います!

例)
対象アカウント内の「キー: stop-start」「バリュー: on」タグがついたすべてのEC2インスタンスに対し、起動時間を9:00~、停止時間を17:00~に設定する

サポートに聞いてみた結果、Cloud Formation StackSetでResource Schedulerを明記・実行する形になるようです。

やってみた

以下、AWSサポートにてご教授いただき、試してみてうまくいった方法です。(サポートの方本当にありがとうございます!!)

1. Quick Setup のデプロイの操作を行うアカウントにAWSCloudFormationStackSetAdministrationRole を作成する

こちら をダウンロードし、必要に応じてロールを変更

参考ドキュメント:https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/stacksets-prereqs-self-managed.html

2. 同様に Quick Setup のデプロイターゲットのアカウントでも AWSCloudFormationStackSetAdministrationRole を作成する

こちら をダウンロードし、必要に応じてロールを変更

参考ドキュメント:同上

3. AWSCloudFormationStackSetExecutionRole.yml をダウンロードし、以下のように変更

こちら をダウンロードし、以下のように変更

参考ドキュメント:同上

【 変更前 】

Principal:
    AWS:
        - !Ref AdministratorAccountId

【 変更後 】

Principal:
    AWS:
        - !Ref AdministratorAccountId
        - !Ref AWS::AccountId

4. 3.で作成(変更)したテンプレートを用いてQuick Setup のデプロイターゲットのアカウントにAWSCloudFormationStackSetExecutionRoleを作成

5. Quick Setup のデプロイの操作を行うアカウントで CloudFormation StackSets をデプロイする

設定項目には以下を設定します。

  • アクセス許可モデル: セルフサービスのアクセス許可

  • IAM 管理ロール ARN: AWSCloudFormationStackSetAdministrationRole

  • IAM 実行ロール名: AWSCloudFormationStackSetExecutionRole

{68D6FE44-BC78-45C8-AF0B-2F112CC4F686}.png

  • デプロイ先: スタックをアカウントにデプロイ
     - ターゲットアカウントの ID
    {7918B2D6-3DD9-4099-9928-1DC6AB4BFADC}.png

  • リージョンの指定: 任意

{20355D11-191D-403D-8671-269C06472568}.png

StackSetsテンプレートの例を以下に示します。

AWSTemplateFormatVersion: '2010-09-09'
    Resources:
    SSMQuickSetupTestConfigurationManager:
        Type: "AWS::SSMQuickSetup::ConfigurationManager"
        Properties:
        Name: "custom-cfn-stacksets"
        Description: "custom-cfn-stacksets"
        ConfigurationDefinitions:
            - Type: "AWSQuickSetupType-Scheduler"
            Parameters:
                TargetTagKey: "test"
                TargetTagValue: "hoge"
                ICalendarString: "BEGIN:VCALENDAR\nX-CALENDAR-TYPE:DEFAULT_CLOSED\r\nVERSION:2.0\r\nPRODID:-//AWS//Change Calendar 1.0//EN\r\nBEGIN:VEVENT\r\nUID:ce44a521-4297-4df7-aacf-c8f3708dd4a6\r\nSEQUENCE:0\r\nDTSTAMP:20241209T061807Z\r\nDTSTART;TZID=Asia/Tokyo:20241209T090000\r\nDTEND;TZID=Asia/Tokyo:20241209T170000\r\nRRULE:FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,TU,WE,TH,FR\r\nSUMMARY:Custom start-stop schedules\r\nEND:VEVENT\r\nEND:VCALENDAR"
                TargetAccounts: 
                Ref: AWS::AccountId
                TargetRegions: 
                Ref: AWS::Region
            LocalDeploymentAdministrationRoleArn: !Sub "arn:aws:iam::${AWS::AccountId}:role/AWSCloudFormationStackSetAdministrationRole"
            LocalDeploymentExecutionRoleName: "AWSCloudFormationStackSetExecutionRole"

ICalendarString 項目内 UID について
ICalendarStringは必須項目です。
UID は必ずしも Resource Scheduler で作成する必要はなく、何らかの方法でユニークな ID が作成できれば問題ありません。
例えば、以下のコマンドをWindows PowerShellで実行して作成したUIDを使用してもOKです。

[Guid]::NewGuid()

参考(外部サイト):https://torutk.hatenablog.jp/entry/20160519/p1

6. Stack Sets デプロイ先のアカウントで、指定したタグ(上記の例ではキー: stop-start、バリュー:on)がついたEC2インスタンスのみ、指定した時間に起動・停止されることを確認する

以上で説明は終了です。
お疲れ様でした!

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?