【改訂版】nOps の始め方:AWS の構成情報とコスト情報を nOps に連携する

「nOps の始め方:AWS の構成情報とコスト情報を nOps に連携する」という記事をより分かりやすく、最新バージョンにアップデートしました。nOpsとAWSアカウントを連携させたい方はこちらの記事をぜひ参考にどうぞ!
2022.04.12

本記事はnOpsでアカウントを連携させる方法を書いたこちらの記事から少し時間が立ち、ところどころ現在と異なる部分が出てきているのでその改訂版の記事になります。

nOpsでAWSアカウントに関しての構成情報やコスト情報を評価させるために、AWSアカウントを登録が必要です。

通常は Wizard Setup を行うことで手軽に連携ができるのですが、弊社メンバーズの管理アカウントの場合は Manual セットアップを使い、弊社のシステムが発行する CUR ファイル(ここでは以下「MCUR」と呼びます)を取り込む必要があります。

以下、その手順について御説明します。

弊社クラスメソッドの「メンバーズ」をご利用の場合は、Automatic の方法で設定を行うと正しいコスト情報が収集されません。必ず Manual をご選択頂き、以下で説明する手順に従って設定して下さい。

MSURの出力については、nOpsの契約とは独立して行います。nOpsは過去に出力されたCSVもさかのぼって収集しますので、なるべく早いタイミングで作成を開始しておくと良いと思います。

前準備(MCUR用S3バケット作成)

AWS にはコスト情報を定期的に CSV 形式で出力する機能があり、その機能を使って出力された CSV ファイルを CUR (Cost Usage Report) と読んでいます。

ただしメンバーズをご利用中の AWS アカウントの場合、こちら(CUR)にはメンバーズの割引情報や、クレジットや RI などの適用情報が正しく反映されず、実際の請求とズレが生じてしまいます。

メンバーズは、通常の CUR にこれらの情報を正しく反映させた「MCUR」を作成する機能を備えています。こちらは CUR との互換性を高めており、nOps で処理することが可能です。メンバーズのユーザーガイドを参照の上、設定を進めて下さい。

こちらのドキュメントは、メンバーズポータルからリンクされておりますので、下記に示すドキュメントを参照の上作業を進めて下さい。

なお該当ドキュメントにも記載がありますが、MCUR ファイルは 1 日に数回程度のタイミングで生成・保存されますので、タイミングによっては最初の生成まで時間を要します。あらかじめご了承ください。

アカウント連携

上記ドキュメントに沿ってアカウント連携に必要な設定を行っていきます。 ドキュメントの流れとしては以下の以下の通りです。

  1. External IDの取得
  2. S3バケット作成 ※こちらはMCURバケット作成をすでに行っているためスキップしてください。
  3. IAMポリシーの作成
  4. IAMロールの作成
  5. 手動セットアップの完了

いくつか注意が必要な点があるためピックアップして見ていきます。

1.External ID の取得

ここではnOpsが自動生成をしてくれるExternal ID を取得します。 ダッシュボードから、使っているユーザー名をクリックして、Organization Settingsを選択して設定画面に進みます。

左の項目がCloud Accountsになっていることを確認し、右上のAdd New Accountでアカウント連携画面に進みます。

Cloud PlatformはAWS Accountを選択し、次に進みます。 次に設定方法を選択します。ここでは上記に記載の通り弊社メンバーズの管理アカウントをお持ちの方はManualを選択して次に進んでください。 するとこのように設定情報を登録する画面に移ります。このExternal IDはnOpsが自動で生成してくれるもので、この後のロールの作成に必要となる情報です。

このExternal IDはページを切り替えたりリロードすると変わってしまいます。一通り設定が終わるまでは、こちらのページから移動しないように注意してください。

3.IAMポリシーの作成

nOpsがAWSアカウント情報をとってこられるようにここでは下記の2つのポリシーを作成していきます。


まずはAWSアカウント情報をとってくるためのポリシーをnOpsのドキュメントに従って作成していきます。

※以下画像は執筆当時のものとなっています。現在のポリシーの詳しい中身はドキュメントから最新のものをご確認ください。

AWSマネジメントコンソールからIAMに進みポリシー作成をしていきます。

ビジュアルエディタからJSONにタブを切り替え、ドキュメントに記載のポリシーの中身をコピーして貼り付けます。 タグは特につけず今回は「Nops-Integration-Policy」という名前でポリシーを作成していきます。(ポリシーの名前は任意のものなので分かりやすくつけましょう。)

前のポリシーがかなり量があるので少しわかりずらいですが、最初に作ったS3バケットから請求情報を持ってくるためのポリシーも忘れずに作りましょう。

上記のポリシーはpaste-bucket-name-hereの部分を最初に作成したMCUR用バケットの名に書き換えてください。

先ほどと同じ要領で今回は「Nops-SystemBucket-Policy」という名前でポリシーを作成します。 2つのポリシーが作成できたら次はロールの作成に移っていきます。

4.IAMロールの作成

上記で作った2つのポリシーにリンクするロールを作成していきます。

ロールの作成画面に移り、信頼されたエンティティタイプはAWSアカウントを選択します。

AWSアカウントを選択する部分では別のアカウントにチェックをいれ、ドキュメントに記載のnOpsのアカウントIDを記入します。 オプションで外部IDを要求するにチェックをいれここに初めに取得したExternal IDをコピペしてください。 この時MFA認証の項目にはチェックを入れないように気を付けてください。 次に進み先ほど作成した二つのポリシーをアタッチし、任意の名前を付けてロールを作成します。

5.手動セットアップの完了

ここからは、nOpsの画面での設定になります。 ドキュメントに従って空いている項目を埋めていきます

AWS Account Name

nOps内で表示されるアカウント名になります。任意のものを付けて問題ありません。後から変更することも可能です。

External ID

こちらはnOpsが自動生成してくれるロール作成の際に使うIDになりますので変更はしないでください。

ARN of IAM role

手順4で作成したロールのARNを取ってきて記入してください。

Bucket Name

CURもしくはMCUR用に作ったS3バケット名になります。 メンバーズ(MCUR)の場合のバケット名はcm-cur-AWS アカウント IDと指定してください。

Report Name/Prefix Path

CURファイル(S3オブジェクト)の情報を記載します。 メンバーズの場合は大文字小文字まで正しく指定してください。

  • Report : cur_hourly
  • Prefix Path : CUR/Hourly

それ以外の場合はCUR出力を設定した際に入力した情報を記載してください。

項目を入力し、問題がなければVerify Detailsをクリックし、そのままSetup Accountをクリックしてください。


アカウント連携から情報の取得には少し時間がかかりますので、翌日改めて確認するとアカウントからの情報収集ができているかと思います!

よくありそうな質問

Q.手動で更新はできるか?

残念ながら、手動で AWS アカウントから情報を収集する機能はありません。nOps が自動的に収集するタイミングまでお待ちください。

Q.nOpsが情報を取集する間隔は?

nOps のドキュメントに記載があります。

How frequently is nOps data refreshed?
- nOps data is refreshed every 60 minutes.
- Billing data is fetched once a day.

Q. MCUR が作成されない

メンバーズの MCUR は 1 日に数回のタイミングで出力されます(ドキュメントに記載されているとおりです)。少し時間をおいてご確認下さい。
それでも出力されない場合は、S3 バケット名や権限などに問題がないか、改めてご確認ください。

なお、毎月の月末・月初の数日間は、そもそも AWS からコストレポートが出力されません。メンバーズの MCUR も CUR をベースにしており、同様の期間出力がされないことになります。

Q. CUR ・ MCUR が収集されない

上述したように、そもそも CUR ・ MCUR が作成されない期間が毎月あります。そちらに該当しないかご確認下さい。
なお該当期間中のコスト情報については、出力が再開後改めて nOps に収集されることになります。

それ以外の理由については、S3 バケット名・プレフィクスなどの設定が誤っていないかご確認の上、詳細については nOps サポートにお問い合わせ下さい(nOps の挙動の詳細については弊社のサポート対象外となります)。