こちらの記事は、CUDOS構築記 Vol.3: CURの出力と集約先へのレプリケーション設定をするの続きです。
前回で無事ダッシュボードの作成が完了しました。今回は番外編としてダッシュボードに表示されるアカウントの名称を変更する方法を紹介します。
アカウントの名称を変更とは
CUDOSを構築した場合、デフォルトではアカウントIDが表示されます。
アカウント数が少ない場合は問題になりませんが、アカウント数が増えるとアカウントIDだけではどのアカウントか分かりにくくなります。
そのため、アカウントIDの代わりにアカウント名を表示するように変更します。
アカウント名を表示する方法
公式ドキュメントには3つの方法が記載されています。
- AWS Organizationsのアカウントマッピングを活用する
- AWS Cost Categoryを利用してアカウント名を追加する
- アカウントマップマッピングデータを用意する
今回は3の方法について解説します。
おおまかな手順
- アカウントIDとアカウント名のマッピングデータの作成
- マッピングデータをS3にアップロード
- Athenaにマッピングtableを作成
- Athenaのマッピング用Viewを更新
- QuickSightの設定変更
- IAMRolePolicyの修正
- SummaryViewを更新
アカウントIDとアカウント名のマッピングデータの作成
公式ドキュメント内にテンプレートのダウンロードリンクがあるので、テンプレートをダウンロードします。
account_id,account_name,business_unit,team,cost_center
1.23457E+11,Master,CloudOps,core,1234
1.23457E+11,Prod,App,Demo,5678
account_id
,account_name
以外は任意のColumnになるので今回は削除します。
account_nameにそれぞれのアカウント名を記載します。
account_id,account_name
1111111111,【開発G1】DevAccount
2222222222,【開発G1】StagingAccount
3333333333,【開発G1】ProdAccount
4444444444,【開発G2】認証基盤
5555555555,【開発G2】サブシステムA
マッピングデータをS3にアップロード
手動でアップロードしてもいいですが、運用が楽になるようにterraformで管理します。
resource "aws_s3_bucket" "account_mapping" {
bucket = "cudos-account-map"
}
// ... 省略 ...
// aws_s3_bucket_ownership_controls
// aws_s3_bucket_public_access_block
// etc
resource "aws_s3_object" "setting_file" {
key = "account-map/account_map.csv"
bucket = aws_s3_bucket.account_mapping.bucket
source = "./account_map.csv"
content_type = "text/csv"
etag = filemd5("./account_map.csv")
}
terraform apply
Athenaにマッピングtableを作成
Athenaでマッピングデータを参照するためのtableを作成します。
CREATE EXTERNAL TABLE `account_mapping`(
`account_id` string,
`account_name` string,
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
STORED AS INPUTFORMAT
'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://cudos-account-map/account-map/'
TBLPROPERTIES (
'has_encrypted_data'='false',
'skip.header.line.count'='1'
)
Athenaのマッピング用Viewを更新
マッピング用Viewを更新して、アカウント名を表示できるようにします。
CREATE OR REPLACE VIEW account_map AS
SELECT DISTINCT
a.line_item_usage_account_id "account_id"
, b.account_name
FROM
((
SELECT DISTINCT
line_item_usage_account_id
FROM
customer_cur_data.cur
) a
LEFT JOIN (
SELECT DISTINCT
"lpad"("account_id", 12, '0') "account_id"
, account_name
FROM
customer_cur_data.account_mapping
) b ON (b.account_id = a.line_item_usage_account_id))
QuickSightの設定変更
マッピングデータを保持しているs3へのアクセス権限を追加します。
- QuickSightの管理コンソールから、
セキュリティとアクセス許可
へアクセス - アカウントマッピングを保持しているS3バケットにアクセス権限を追加
IAMRolePolicyの修正
次のIAMRoleに対して、S3バケットへのアクセス権限を追加します。
- Role:
CidCmdQuickSightDataSourceRole
s3:ListBucket
s3:GetObject
s3:GetObjectVersion
{
"Sid": "AllowListBucket",
"Effect": "Allow",
"Action": [
"s3:ListBucket"
],
"Resource": [
...省略...
"arn:aws:s3:::cudos-account-map" // 追加
]
},
{
"Sid": "AllowReadBucket",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:GetObjectVersion"
],
"Resource": [
...省略...
"arn:aws:s3:::cudos-account-map/*" // 追加
]
}
SummaryViewを更新
QuickSightでSummaryViewを更新します。1分から2分程度で更新されます。
結果確認
更新が終わったら、ダッシュボードにアクセスしてアカウント名が表示されるようになっていれば成功です。