boto3 で CostandUsageReportService を使うときはリージョンをハードコードすること
AWS の Python 用ライブラリである boto3 を使って物作りをしていた際にハマったのでメモ.
CostandUsageReportService とは何者
和名「AWS のコストと使用状況レポート」.
CostandUsageReportService は,ここで作られるコストレポートのエントリをいじくるためのもの
ハマったこと
デフォルトリージョンを ap-northeast-1 などとしている環境でリージョンを指定せずに boto3.client('cur')
とすると describe_report_definitions()
などの呼び出し時にエンドポイントに繋がらないと怒られる.(エンドポイントが存在しないため)
[default]
region = ap-northeast-1
bc = boto3.client('cur')
report = bc.describe_report_definitions()
print(report)
Traceback (most recent call last):
(... snip ...)
botocore.exceptions.EndpointConnectionError: Could not connect to the endpoint URL: "https://cur.ap-northeast-1.amazonaws.com/"
直し方
クライアント作成時に us-east-1
リージョンを指定する.
bc = boto3.client('cur', 'us-east-1')
report = bc.describe_report_definitions()
print(report)
{'ReportDefinitions': [{'ReportName': 'hogehoge', 'TimeUnit': 'DAILY', 'Format': 'textORcsv', 'Compression': 'GZIP', 'AdditionalSchemaElements': [], 'S3Bucket': 'chi9rin-cur', 'S3Prefix': '', 'S3Region': 'us-east-1', 'AdditionalArtifacts': []}], 'ResponseMetadata': {'RequestId': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'HTTPStatusCode': 200, 'HTTPHeaders': {'x-amzn-requestid': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx', 'content-type': 'application/x-amz-json-1.1', 'content-length': '227', 'date': 'Sat, 04 Nov 2017 10:47:20 GMT'}, 'RetryAttempts': 0}}
原因
Traceback にもあるように,ap-northeast-1
では cur が提供されていないから.
cur については特定のリージョンに基づくものではないので,cur のクライアントを作る部分については us-east-1
でハードコードしておいても問題はなさそう.
あと今回見つかったのは cur だけだったが,他のサービスについても同じことが言えるかもしれない.(他にリージョン無指定の IAM はクライアント作成時にリージョンを指定せずとも問題なかった)
Author And Source
この問題について(boto3 で CostandUsageReportService を使うときはリージョンをハードコードすること), 我々は、より多くの情報をここで見つけました https://qiita.com/chi9rin/items/6d74110b87636c961ddb著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .