AWS Compute Optimizer の組織設定にハマったので設定方法をまとめてみた

2023.11.17

はじめに

こんにちは!体内の 6 割は水分ではなく、えびだと思うくらいえび好きな kaz です。

他の AWS サービスだととくに気にせずボタンポチッ!でマルチアカウント管理ができるのですが、AWS Compute Optimizer(以下、Compute Optimizer)は少しわかりにくい印象を受けたので組織設定の方法をまとめてみました。

対象とする読者

  • ドキュメントを読んでも Compute Optimizer の設定方法がわからなかった
  • マルチアカウント環境(AWS Organizations)で Compute Optimizer を有効化したい
  • オプトイン!オプトアウト!オプトイン!オプトアウト!!を繰り返して疲弊した方

設定状況の理解

まずは、Compute Optimizer の設定状況の有無について把握しましょう。

未オプトイン / オプトイン

Compute Optimizer コンソールにアクセスしたとき以下のような画面であれば「未オプトイン」状態です。

Untitled

そして、以下のようにダッシュボードが表示されていれば「オプトイン」状態となります。

Untitled

これらの状態は AWS CLI から get-enrollment-status コマンドでも確認が可能です。

status: Inactivestatus: Active で判断します。

## 未オプトイン状態
aws compute-optimizer get-enrollment-status --query "status"
>>> "Inactive"

## オプトイン状態
aws compute-optimizer get-enrollment-status --query "status"
>>> "Active"

スタンドアロン / 組織

Compute Optimizer は「スタンドアロン」か「組織」で有効化しているかに大別されます。

  • スタンドアロン
    • AWS Organizations を有効にしていないシングルアカウントの場合
    • AWS Organizations を有効化する前にオプトインしていた場合
  • 組織
    • AWS Organizations を有効にしているマルチアカウントの場合
      • さらに「管理アカウント」と「メンバーアカウント」に分かれる

参考:Getting started with AWS Compute Optimizer - AWS Compute Optimizer

組織として Compute Optimizer を設定する

Compute Optimizer を組織レベル(マルチアカウント)で設定していきます。

1. 前提条件

設定の前に以下の前提条件を確認しておきましょう。

2. Compute Optimizer の組織設定を行う

管理アカウントで Compute Optimizer の組織設定を行います・・・が、いきなりここで注意ポイントがあります。

すでに管理アカウントで Compute Optimizer が「未オプトイン」か「オプトイン済み」であるかによって操作が分かれますので、状況に合わせて設定を行ってください。

未オプトインの場合

まだオプトインしていない場合、Compute Optimizer コンソールを見ると以下のようにオプトインするかの選択画面が表示されます。

組織レベルで Compute Optimizer を有効化するためには「この組織のすべてのメンバーアカウント」を選択して「オプトイン」をクリックしてください。

Untitled

オプトイン済みの場合

Compute Optimizer コンソールを見るとダッシュボードが表示されるような状況や、「アカウント」ページを見ると以下のようなエラーが表示されている場合が該当します。

マルチアカウント環境になる前にスタンドアロンで Compute Optimizer を有効化・利用していたことが原因です。

ちなみに「ロード中」と表示されている箇所ですが、一万年と二千年前も一億と二千年あとも、そのままです。

Untitled

このような状態では、コンソール画面から組織設定を実装することができませんので AWS CLI で以下のコマンドを使用して有効化する必要があります。

参考:Getting started with AWS Compute Optimizer - AWS Compute Optimizer

## 既存のメンバーアカウントを登録する
aws compute-optimizer update-enrollment-status --status Active --include-member-accounts

コマンドを実行して "status": "Active" と表示されたら、設定は完了となります。

3. 設定後の状況確認

管理アカウントから確認してみるとメンバーアカウントも追加されていました(私の AWS Organizations には、計 3 つのアカウントがあります)。

なお、メンバーアカウントがオプトインされるまでしばらく時間がかかるみたいです。

ちなみに、私は組織設定したあとにおやすみして起きたらメンバーアカウントがオプトインされてました(更新されなかったとしても 1 日程度、根気強く待ってみてください)

Untitled

AWS CLI で get-enrollment-status コマンドから確認もできます。

memberAccountsEnrolled がすぐには true とならず false 状態のままである可能性があります。これは lastUpdatedTimestamp 時の情報を示しているため、設定時よりも過去の時刻が表示されているという理解です(このような場合はマネージメントコンソールを見て明らかに組織設定されていることを確認できれば問題ないです)。

## メンバーアカウントのオプトイン状況を確認
aws compute-optimizer get-enrollment-status
>>> {
>>>     "status": "Active",
>>>     "memberAccountsEnrolled": true,
>>>     "lastUpdatedTimestamp": "XXXX-XX-XXTXX:XX:XX.000000+00:00",
>>>     "numberOfMemberAccountsOptedIn": 2
>>> }

また、AWS Organizations に新規メンバーアカウントを追加した場合、そのアカウントにも自動的に Compute Optimizer を組織にオプトインしてくれるみたいです。

参考:アカウントにオプトインする - AWS Compute Optimizer

オプトインした後に組織に新しいメンバーアカウントを追加すると、Compute Optimizer はそれらのアカウントを自動的にオプトインします。

その他の設定状況

余談ですが Compute Optimizer の組織設定が完了すると、AWS Organizations サービスにある「Compute Optimizer の信頼されたアクセス」が有効状態になります。

Untitled

上図の状態になると、各メンバーアカウント内にも AWS リソースの推奨事項を生成するための Compute Optimizer サービスリンクロールを自動的に作成してくれるようになります(実際に確認してみました)。

Untitled

なお、AWS Organizations コンソールを使用して各種 AWS サービスの「信頼されたアクセス」を有効にすることは推奨されていません(下図の赤枠のように注意書きもあります)。

Untitled

参考:AWS Organizations を他のAWSサービスと併用する - AWS Organizations

うわっ…私のメンバーアカウント、追加されなさすぎ…?

上述の通りメンバーアカウントが追加されるまでの時間はかかりますが、組織設定後は放置していれば組織にオプトインされていくと思います。

ただ、2, 3 日経過しても組織にオプトインされない等の場合は対象のメンバーアカウントから AWS CLI を使って「オプトアウト → オプトイン」をお試しください。

というのも、Compute Optimizer の組織設定でオプトイン・アウトを繰り返したり、AWS Organizations サービスから信頼されたアクセスを有効・無効というようにガチャガチャと操作していたのですが、完全に私の Compute Optimizer がおかしくなっちゃったみたいで辿り着いたのがこの方法でした。

AWS サポートに確認する方が良いですが、最悪の場合はこの方法でメンバーアカウントを組織にオプトインできましたよという備忘録的な感じです。

※なお、今まで蓄積されたレコメンデーションデータは消えてしまうのでご注意ください(必要に応じてエクスポートしておきましょう)

## オプトアウト(Compute Optimizer の無効化)
aws compute-optimizer update-enrollment-status --status Inactive
>>> {
>>>     "status": "Inactive"
>>> }

## オプトイン(Compute Optimizer の再有効化)
aws compute-optimizer update-enrollment-status --status Active
>>> {
>>>     "status": "Active"
>>> }

まとめ

AWS Organizations 環境で Compute Optimizer の「組織設定」を実装したい・・・けど、よくわからない!という方の助けになれば幸いです。

追記(2023/11/21):Compute Optimizer の使い方や各種設定方法をまとめました!

アノテーション株式会社について

アノテーション株式会社は、クラスメソッド社のグループ企業として「オペレーション・エクセレンス」を担える企業を目指してチャレンジを続けています。
「らしく働く、らしく生きる」のスローガンを掲げ、さまざまな背景をもつ多様なメンバーが自由度の高い働き方を通してお客様へサービスを提供し続けてきました。
現在当社では一緒に会社を盛り上げていただけるメンバーを募集中です。
少しでもご興味あれば、アノテーション株式会社WEBサイト をご覧ください。