2.6. Athena のアカウントアクセスの有効化
Hybrid Committed Spend が使用する IAM ポリシーおよびロールを作成します。この設定では、保存されている情報へのアクセスのみが提供されます。
手順
AWS Identity and Access Management (IAM) コンソールから、設定する Athena Lambda 関数用の IAM ポリシーを作成します。
JSON タブを選択し、JSON ポリシーテキストボックスに以下の内容を貼り付けます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "athena:*" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "glue:CreateDatabase", "glue:DeleteDatabase", "glue:GetDatabase", "glue:GetDatabases", "glue:UpdateDatabase", "glue:CreateTable", "glue:DeleteTable", "glue:BatchDeleteTable", "glue:UpdateTable", "glue:GetTable", "glue:GetTables", "glue:BatchCreatePartition", "glue:CreatePartition", "glue:DeletePartition", "glue:BatchDeletePartition", "glue:UpdatePartition", "glue:GetPartition", "glue:GetPartitions", "glue:BatchGetPartition" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:GetObject", "s3:ListBucket", "s3:ListBucketMultipartUploads", "s3:ListMultipartUploadParts", "s3:AbortMultipartUpload", "s3:CreateBucket", "s3:PutObject", "s3:PutBucketPublicAccessBlock" ], "Resource": [ "arn:aws:s3:::CHANGE-ME*"1 ] }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::CHANGE-ME*"2 ] }, { "Effect": "Allow", "Action": [ "s3:ListBucket", "s3:GetBucketLocation", "s3:ListAllMyBuckets" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "sns:ListTopics", "sns:GetTopicAttributes" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricAlarm", "cloudwatch:DescribeAlarms", "cloudwatch:DeleteAlarms", "cloudwatch:GetMetricData" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": [ "logs:*" ], "Resource": "*" } ] }
- ポリシーに名前を付け、ポリシーの作成を完了します。次の手順に必要なため、AWS IAM コンソールを開いたままにします。
AWS 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
のキーを作成します。 - ユーザー名とパスワードの値を適切なキーに追加します。
- をクリックしてから、名前を入力し、シークレットを保存します。
Lambda 関数用に作成したロールを更新します。以下のコードを追加して、AWS Secrets Manager に保存されているシークレットを参照します。
{ "Sid": "VisualEditor3", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "*" }
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 クエリーの例
SELECT * FROM <your_export_name> WHERE ( bill_billing_entity = 'AWS Marketplace' AND line_item_legal_entity like '%Red Hat%' ) OR ( line_item_legal_entity like '%Amazon Web Services%' AND line_item_line_item_description like '%Red Hat%' ) OR ( line_item_legal_entity like '%Amazon Web Services%' AND line_item_line_item_description like '%RHEL%' ) OR ( line_item_legal_entity like '%AWS%' AND line_item_line_item_description like '%Red Hat%' ) OR ( line_item_legal_entity like '%AWS%' AND line_item_line_item_description like '%RHEL%' ) OR ( line_item_legal_entity like '%AWS%' AND product_product_name like '%Red Hat%' ) OR ( line_item_legal_entity like '%Amazon Web Services%' AND product_product_name like '%Red Hat%' ) AND year = '2024' AND month = '07'
- エディタータブから 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_%';
- をクリックします。このクエリーの結果は、データセットのタグに関連するすべての列を返します。
- RHEL タグに使用される列と一致するタグ列をコピーします。
以下のクエリー例に貼り付けます。
your_export_name
は、前の手順でコピーした tags 列に、year
とmonth
はクエリーする年と月に置き換えます。結果として、RHEL サブスクリプションに対して適切にタグ付けされた EC2 インスタンスが返されます。このクエリーをコピーして保存し、今後 Lambda 関数で使用します。SELECT * FROM <your_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>'
2.6.3. Athena の Lambda 関数の作成
Red Hat 関連の経費のデータエクスポートをクエリーし、フィルタリングされた経費のレポートを作成する Lambda 関数を作成する必要があります。
手順
- AWS コンソールで Lambda に移動し、 をクリックします。
- をクリックします。
- 関数の名前を入力します。
- Runtime メニューから、利用可能な Python の最新バージョンを選択します。
- Architecture メニューから x86_64 を選択します。
- Permissions で、作成した Athena ロールを選択します。
- Lambda 関数の一部としてビルドしたクエリーを追加するには、 をクリックして、進捗を保存します。
関数の Code タブから、この スクリプト を貼り付けます。以下の行を探します。
your_integration_external_id
- Enabling account access for cost and usage consumption 手順でコピーしたインテグレーション UUID を入力します。
bucket
- フィルタリングしたデータのレポートを保存するためのバケットの作成 の手順で、フィルタリングされたレポートを保存するために作成した S3 バケットの名前を入力します。
database
- Building your Athena クエリー ステップで使用するデータベース名を入力します。
export_name
- コストデータを保存するための AWS S3 バケットを作成したときのデータエクスポートの名前を入力します。
where
句を置き換えて、デフォルトのクエリーをカスタムクエリーに更新します。次に例を示します。# 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}'"
- をクリックして関数をテストします。
2.6.4. レポートファイルを Post するための Lambda 関数の作成
フィルタリングしたレポートを Red Hat がアクセスできるバケットに投稿するには、2 番目の Lambda 関数を作成する必要があります。
手順
- AWS コンソールの Lambda に移動し、 をクリックします。
- をクリックします。
- 関数の名前を入力します。
- Runtime メニューから、利用可能な Python の最新バージョンを選択します。
- アーキテクチャーとして x86_64 を選択します。
- Permissions で、作成した Athena ロールを選択します。
- をクリックします。
この スクリプト を関数に貼り付け、次の行を置き換えます。
secret_name = "CHANGEME"
- シークレット名を入力します。
bucket = "<your_S3_Bucket_Name>"
- フィルタリングしたデータのレポートを保存するためのバケットの作成 の手順で、フィルタリングされたレポートを保存するために作成した S3 バケットの名前を入力します。
- をクリックして関数をテストします。