1 つの同じ AWS アカウントで複数の opswitch 組織を作成する

1 つの同じ AWS アカウントで複数の opswitch 組織を作成するには、組織の数だけ AWS アカウント連携(opswitch 用 IAM ロールの作成)をすればよいです。スタック名を変更するのがポイントです。
2023.08.30

コーヒーが好きな emi です。

弊社が提供しているサービスに opswitch というものがあります。
opswitch は EC2 や RDS のバックアップ・起動・開始など、AWS でのジョブ実行を誰でも簡単にスケジューリングできるサービスです。詳細は以下のリンクをご参照ください。

opswitch では「組織」を作成し、その組織に AWS アカウントやタスク、ジョブを紐づけます。
今回 1 つの同じ AWS アカウントで複数の opswitch 組織を作成し、開発環境のジョブや本番環境のジョブを組織ごとに分けられないか検証しました。
結論としてはできます

イメージ

前提として 1 つの AWS アカウント内に開発環境、本番環境など複数の環境が存在するとします。
opswitch の組織を複数作成し、それぞれジョブを分ける設定をおこないます。

opswitch を利用するためには「AWS アカウント連携」という操作をおこなう必要があります。
「AWS アカウント連携」という操作の実態は opswitch 用 IAM ロールの作成です。
opswitch のサービス自体が稼働している AWS アカウントが opswitch を導入したい AWS アカウントで自動化操作ができるよう許可する IAM ロールを作成することで、opswitch と連携します。

1 つの AWS アカウントで複数の opswitch 組織を利用するには、複数 AWS アカウント連携(複数 IAM ロールを作成)すればよいです。

関係性のイメージは以下です。
複数の「AWS アカウント」はそれぞれ 「AWS アカウント連携(IAM ロール作成)」し、1 つの「opswitch 組織」に紐づけることができます。

1 つの「AWS アカウント」は複数 「AWS アカウント連携(IAM ロール作成)」することで、複数の「opswitch 組織」に紐づけることができます。

1 つの 「AWS アカウント連携(IAM ロール作成)」で、複数の「opswitch 組織」に紐づけることはできません。

つまり、以下の関係があります。

  • 「AWS アカウント」:「AWS アカウント連携(IAM ロール作成)」= 1 :多
  • 「AWS アカウント連携(IAM ロール作成)」:「opswitch 組織」= 多:1

検証

opswitch 組織の作成

まず、opswitch 組織を二つ作成します。

opswitch にサインアップ(アカウント登録)したら、[管理]-[組織一覧] から opswitch 組織を作成します。

「作成」をクリックします。

組織名(今回は「test-A」)を入力し「作成」をクリックします。

opswitch 組織「test-A」が作成されました。

同様に opswitch 組織「test-B」を作成します。

AWS アカウント連携(opswitch 用 IAM ロール作成)

続いて AWS アカウント連携(opswitch 用 IAM ロール作成)をします。

[管理]-[AWS アカウント連携] から AWS アカウント連携(opswitch 用 IAM ロール作成)をしていきます。

組織「test-A」用の AWS アカウント連携(opswitch 用 IAM ロール作成)

「作成」をクリックします。

AWS アカウント連携の画面が開きます。手順①の「IAM ROLE を作成」というオレンジのボタンをクリックします。

AWS マネジメントコンソール画面が開きます。この時 AWS アカウントにログインしていない場合はログインしてください。
ここでスタック名を変更します。
1 つの同じ AWS アカウントで複数の opswitch 組織を利用する場合は複数の IAM ロールを作成する必要があり、同じスタック名だと同じスタックが上書きされてしまうためです。
今回は opswitch 組織名「test-A」をスタック名の最後につけ、どの opswitch 組織に紐づく IAM ロールなのか分かりやすくしました。

「ExternalId」と「opswitchAccountId」が opswitch AWS アカウント連携画面の手順②と同じ値であるか確認します。

確認したら、最後の青い枠で「AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。」にチェックを入れます。
右下の「スタックの作成」をクリックします。

スタックの作成には数分程度時間がかかります。CloudFormation の状況が「CREATE_COMPLETE」となっていることを確認します。
出力タブに表示されている「AccountID」、「IAMRoleName」をコピーし、opswitch AWS アカウント連携画面の手順④の入力欄に入力してください。

「AccountID」、「IAMRoleName」を opswitch AWS アカウント連携画面の手順④の入力欄に入力したら、手順⑤アカウント名、説明を入力します。このアカウント名は opswitch 上で表示される表示名となります。
手順⑥で組織を選択します。今回は「test-A」を選択し、画面下部の「+作成」をクリックします。

AWS アカウント連携が完了し、opswitch 画面上で AWS アカウントが確認できるようになりました。組織は「test-A」になっています。

組織「test-B」用の AWS アカウント連携(opswitch 用 IAM ロール作成)

同様に、今度は組織「test-B」用に AWS アカウント連携します。「作成」をクリックします。

AWS アカウント連携の画面が開きます。手順①の「IAM ROLE を作成」というオレンジのボタンをクリックします。

AWS マネジメントコンソール画面が開きます。
ここでスタック名を変更します。
今回は opswitch 組織名「test-B」をスタック名の最後につけました。

「ExternalId」と「opswitchAccountId」が opswitch AWS アカウント連携画面の手順②と同じ値であるか確認します。
確認したら、最後の青い枠で「AWS CloudFormation によって IAM リソースが作成される場合があることを承認します。」にチェックを入れます。
右下の「スタックの作成」をクリックします。

スタックの作成には数分程度時間がかかります。CloudFormation の状況が「CREATE_COMPLETE」となっていることを確認します。
出力タブに表示されている「AccountID」、「IAMRoleName」をコピーし、opswitch AWS アカウント連携画面の手順④の入力欄に入力してください。

「AccountID」、「IAMRoleName」を opswitch AWS アカウント連携画面の手順④の入力欄に入力したら、手順⑤アカウント名、説明を入力します。
手順⑥で組織を選択します。今回は「test-B」を選択し、画面下部の「+作成」をクリックします。

AWS アカウント連携が完了し、opswitch 画面上で 1 つの同じ AWS アカウントが二つ確認できるようになりました。組織はそれぞれ「test-A」「test-B」になっています。

組織ごとにタスクの作成

組織ごとにタスクやジョブの作成をしてみましょう。[タスク]-[EC2]-[EC2 インスタンスの起動・停止]を選択します。

組織「test-A」でのタスク作成

「作成」をクリックします。

EC2 インスタンスの停止をおこなうタスクを作成します。組織は「test-A」、AWS アカウントは AWS アカウント連携をした AWS アカウントを選択します。

組織「test-A」でタスクができました。

組織「test-B」でのタスク作成

同様に、組織「test-B」でタスク作成します。

組織「test-B」でタスクができました。

組織ごとにジョブの作成

「ジョブ」タブで「作成」をクリックします。

組織「test-A」でのジョブ作成

ジョブを作成します。組織で「test-A」を選択すると、組織「test-A」で作成したタスクが表示され選択できます。

組織「test-A」でジョブができました。

組織「test-B」でのジョブ作成

同様に組織「test-B」でもジョブを作成します。組織で「test-B」を選択すると、組織「test-B」で作成したタスクが表示され選択できます。

組織「test-B」でジョブができました。

AWS アカウント連携が 1 つ(IAM ロールが一つ)だと、複数 opswitch 組織に分けられない

組織ごとに AWS アカウント連携を作成しないと、複数 opswitch 組織を分けることができません。
試してみます。まず組織「test-C」を作成します。

続いて AWS アカウント連携をせず、タスクの作成をしようとしてみます。組織「test-C」を選択した状態で AWS アカウントを選択しようとすると、「データが存在しません」となります。

おわりに

1 つの AWS アカウントで複数の opswitch 組織に分ける方法を検証しました。
お役に立てば幸いです。