2.6. Athena のアカウントアクセスの有効化
AWS で Athena と Lambda 関数用の IAM ポリシーとロールを作成します。
手順
AWS Identity and Access Management (IAM) コンソールから、設定する Athena Lambda 関数用の IAM ポリシーを作成します。
新しい IAM ロールを作成します。
- 信頼できるエンティティーのタイプには、AWS service を選択します。
- Lambda を選択します。
- 設定したばかりの IAM ポリシーを割り当てます。
- ロール名と説明を入力し、ロールの作成を完了します。
サービスアカウントの情報を AWS Secrets Manager に保存し、作成したロールに追加します。
- Secret type: Other type of secret を選択し、シークレットを作成します。
-
Red Hat Hybrid Cloud Console サービスアカウント
client_idのキーを作成します。 -
Red Hat Hybrid Cloud Console サービスアカウント
client_secretのキーを作成します。 - サービスアカウントの値を対応するキーに追加します。
- をクリックし、名前を入力してシークレットを保存します。
2.6.1. レポート生成用の Athena 設定 リンクのコピーリンクがクリップボードにコピーされました!
Cost Management に送信する前にデータをフィルタリングするように Athena のテーブルを設定します。
次の設定では、保存されている追加の情報へのアクセスのみが提供されます。他のものは提供しません。
手順
-
AWS S3 コンソールで、手順 2.2 で設定した S3 バケットに移動します。次に、設定したデータエクスポートによって作成されるパスにある
crawler-cfn.ymlファイルに移動します。例:{bucket-name}/{S3_path_prefix}/{export_name}/crawler-cfn.yml.crawler-cfn.ymlの Object URL をコピーします。 AWS コンソールの Cloudformation から、新規リソースでスタックを作成します。
- 既存のテンプレートを選択します。
- Specify Template を選択します。
- Template Source: Amazon S3 URL を選択します。
- 以前にコピーしたオブジェクト URL を貼り付けます。
- 名前を入力し、 をクリックします。
- をクリックして をクリックします。
2.6.2. Athena クエリーの構築 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat の経費のデータエクスポートをクエリーし、フィルタリングした経費のレポートを作成する Athena クエリーを作成します。
たとえば、Red Hat の支出をフィルタリングする場合は、サンプルスクリプトに含まれているクエリーだけが必要になることがあります。さらに高度な機能が必要な場合は、カスタムクエリーを作成します。RHEL メータリングを使用している場合は、RHEL サブスクリプションに固有のデータを返すようにクエリーを調整する必要があります。以下の手順では、RHEL サブスクリプションクエリーを作成する方法を説明します。
Red Hat 支出の Athena クエリーの例
- エディタータブから Amazon Athena に移動します。
- Data source メニューから、AwsDataCatalog を選択します。
-
Database メニューからデータのエクスポートを選択します。データエクスポート名の前に
athenacurcfn_が追加され、その後にデータエクスポート名が追加されます。例:{your_export_name}。 以下のサンプルクエリーを Query フィールドに貼り付けます。
your_export_nameの値は、データエクスポート名に置き換えます。SELECT column_name FROM information_schema.columns WHERE table_name = '<your_export_name>' AND column_name LIKE 'resource_tags_%';
SELECT column_name FROM information_schema.columns WHERE table_name = '<your_export_name>' AND column_name LIKE 'resource_tags_%';Copy to Clipboard Copied! Toggle word wrap Toggle overflow - をクリックします。このクエリーの結果は、データセットのタグに関連するすべての列を返します。
- RHEL タグに使用される列と一致するタグ列をコピーします。
以下のクエリー例に貼り付けます。
your_export_nameは、前の手順でコピーした tags 列に、yearとmonthはクエリーする年と月に置き換えます。結果として、RHEL サブスクリプションに対して適切にタグ付けされた EC2 インスタンスが返されます。このクエリーをコピーして保存し、今後 Lambda 関数で使用します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
2.6.3. Athena の Lambda 関数の作成 リンクのコピーリンクがクリップボードにコピーされました!
Red Hat 関連の経費のデータエクスポートをクエリーし、フィルタリングされた経費のレポートを作成する Lambda 関数を作成する必要があります。
手順
- AWS コンソールで Lambda に移動し、 をクリックします。
- をクリックします。
- 関数の名前を入力します。
- Runtime メニューから、利用可能な Python の最新バージョンを選択します。
- Architecture メニューから x86_64 を選択します。
- Permissions で、作成した Athena ロールを選択します。
- Lambda 関数の一部としてビルドしたクエリーを追加するには、 をクリックして、進捗を保存します。
関数の Code タブから、この スクリプト を貼り付けます。以下の行を探します。
your_integration_external_id- AWS Cost and Usage Reports のアカウントアクセスを有効にする IAM ポリシーの設定 手順でコピーしたインテグレーションの UUID を入力します。
bucket- フィルタリングしたデータのレポートを保存するためのバケットの作成 の手順で、フィルタリングされたレポートを保存するために作成した S3 バケットの名前を入力します。
database- Building your Athena クエリー ステップで使用するデータベース名を入力します。
export_name- コストデータを保存するための AWS S3 バケットを作成したときのデータエクスポートの名前を入力します。
where句を置き換えて、デフォルトのクエリーをカスタムクエリーに更新します。次に例を示します。Athena query
# Athena query query = f"SELECT * FROM {database}.{export_name} WHERE (line_item_product_code = 'AmazonEC2' AND strpos(lower(<rhel_tag_column_name>), 'com_redhat_rhel') > 0) AND year = '{year}' AND month = '{month}'"Copy to Clipboard Copied! Toggle word wrap Toggle overflow - をクリックして関数をテストします。
2.6.4. レポートファイルを Post するための Lambda 関数の作成 リンクのコピーリンクがクリップボードにコピーされました!
フィルタリングしたレポートを Red Hat がアクセスできるバケットに投稿するには、2 番目の Lambda 関数を作成する必要があります。
手順
- AWS コンソールの Lambda に移動し、 をクリックします。
- をクリックします。
- 関数の名前を入力します。
- Runtime メニューから、利用可能な Python の最新バージョンを選択します。
- 関数のアーキテクチャータイプとして x86_64 を選択します。
- Permissions で、作成した Athena ロールを選択します。
- をクリックします。
この スクリプト を関数に貼り付け、次の行を置き換えます。
secret_name = "CHANGEME"- Athena のアカウントアクセスの有効化 手順で使用したシークレット名を入力します。
bucket = "<your_S3_Bucket_Name>"- フィルタリングされたデータのレポートを保存するためのバケットを作成する 手順で、フィルタリングされたレポートを保存するために 作成した S3 バケットの名前を入力します。
- をクリックして関数をテストします。