はじめに
AWSのRoute53でHostZoneにタグを付与しているかを確認することは、リソース管理や課金の観点から重要です。
しかし、AWSコンソールでの確認は手間がかかることがあります。
この記事では、AWS CLIを使用してRoute53のタグを効率的に取得する方法を紹介します。
基本的なコマンドライン
ホストゾーンのタグを取得する場合
aws route53 list-tags-for-resource --resource-type hostedzone --resource-id {hosted-zone-id}
このコマンドは、指定されたホストゾーンIDに関連付けられたすべてのタグを返します。
ドメイン登録のタグを取得する場合
aws route53domains list-tags-for-domain --domain-name {domain-name}
このコマンドは、指定されたドメイン名に関連付けられたすべてのタグを返します。
ヘルスチェックのタグを取得する場合
aws route53 list-tags-for-resource --resource-type healthcheck --resource-id {health-check-id}
このコマンドは、指定されたヘルスチェックIDに関連付けられたすべてのタグを返します。
全てのホストゾーンを対象にする場合
アカウントに存在する全てのホストゾーンのタグを取得する場合、以下のBashスクリプトを使用すると便利です。
#!/bin/bash
# すべてのホストゾーンを取得
hosted_zones=$(aws route53 list-hosted-zones --query 'HostedZones[*].Id' --output text)
# 各ホストゾーンのタグを取得
for zone in $hosted_zones
do
zone_id=${zone#/hostedzone/}
echo "Hosted Zone: $zone_id"
aws route53 list-tags-for-resource --resource-type hostedzone --resource-id $zone_id
echo "------------------------"
done
このスクリプトを実行すると、以下のような形式で結果が表示されます。
Hosted Zone: HOGEHOGE
{
"ResourceTagSet": {
"ResourceType": "hostedzone",
"ResourceId": "HOGEHOGEHOGE",
"Tags": [
{
"Key": "Project",
"Value": "service1"
},
{
"Key": "Name",
"Value": "hogehoge.net"
}
]
}
}
------------------------
取得したデータを整形するPythonスクリプト
取得したデータをExcel等で利用しやすくするために、以下のPythonスクリプトを使用して整形できます。
import json
import csv
import re
def process_file(file_path):
with open(file_path, 'r') as file:
content = file.read()
# ホストゾーンとJSONデータのブロックを分割
blocks = re.split(r'-+\n', content)
data = []
for block in blocks:
if block.strip():
# ホストゾーン名を抽出
hosted_zone_match = re.match(r'Hosted Zone: (.+)', block)
if hosted_zone_match:
hosted_zone = hosted_zone_match.group(1)
# JSONデータを抽出して解析
json_data = re.search(r'\{.*\}', block, re.DOTALL)
if json_data:
json_obj = json.loads(json_data.group())
resource_id = json_obj['ResourceTagSet']['ResourceId']
tags = {tag['Key']: tag['Value'] for tag in json_obj['ResourceTagSet']['Tags']}
data.append({
'Hosted Zone': hosted_zone,
'ResourceId': resource_id,
'Project': tags.get('Project', ''),
'Name': tags.get('Name', '')
})
return data
def write_csv(data, output_file):
with open(output_file, 'w', newline='') as csvfile:
fieldnames = ['Hosted Zone', 'ResourceId', 'Project', 'Name']
writer = csv.DictWriter(csvfile, fieldnames=fieldnames)
writer.writeheader()
for row in data:
writer.writerow(row)
# メイン処理
input_file = 'input.txt' # 入力ファイル名
output_file = 'output.csv' # 出力ファイル名
processed_data = process_file(input_file)
write_csv(processed_data, output_file)
print(f"変換が完了しました。結果は {output_file} に保存されています。")
このスクリプトを実行すると、以下のようなCSVファイルが生成されます。
Hosted Zone,ResourceId,Project,Name
HOGEHOGE,HOGEHOGEHOGE,service1,hoge.net
代替手段:Resource Groups & Tag Editor
AWS CLIを使用する方法以外に、AWSコンソールの"Resource Groups & Tag Editor"機能を使用してタグを管理することもできます。
この機能は、複数のAWSサービスにまたがるリソースのタグを一括で管理するのに便利です。
詳細については、公式ドキュメント:タグエディタ とはをご覧ください。
まとめ
この記事では、AWS CLIを使用してRoute53のタグを効率的に取得する方法を紹介しました。
基本的なコマンドラインの使用方法から、全てのホストゾーンのタグを取得するスクリプト、さらにはデータを整形するPythonスクリプトまで、様々なアプローチを説明しました。
これらの方法を活用することで、大規模な環境でもRoute53のリソースを効率的に管理できます。
タグ情報は、コスト配分、アクセス制御、運用管理など、様々な目的で活用できるため、定期的に確認し、適切に管理することをお勧めします。
最後に、AWSの機能は頻繁に更新されるため、最新の情報については常にAWS公式ドキュメントを参照することをお勧めします。
以上、どなたかのお役に立てば幸いです。