この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
このリソースってどのCloudFormation(CFn)スタックから作られたやつだっけ・・・
AWS環境が大規模になってくるとこんなケースが出てくるかもしれません。
CFnから作られたリソースには aws:cloudformation:stack-name
タグが付くので
そこから分かります。
が、タグ情報は書き換えられる可能性はゼロではないですし、 複数のスタック間の複数のリソースを俯瞰したいケースもあるかと思います。
そこで表題の CFnの全スタック・全リソースの情報を表示するPythonスクリプト を作ってみました。
スクリプト
以下パッケージを使います
- boto3
- pandas( >= 1.0.0)
./print_all_cfn_resources.py
import sys
import boto3
import pandas as pd
def print_all_cfn_resources(format: str = "md"):
"""CloudFormationの全スタックの全リソースの情報を取得、表示する
Args:
format (str, optional): 出力フォーマット("md" or "csv"). Defaults to "md".
"""
STATUSES = ['ROLLBACK_COMPLETE', 'CREATE_COMPLETE', 'UPDATE_COMPLETE']
cfn = boto3.resource('cloudformation')
buffer = []
for s in cfn.stacks.all():
if s.stack_status not in STATUSES:
continue
for r in s.resource_summaries.all():
buffer.append(
[
s.stack_name, # スタック名
r.logical_resource_id, # 論理ID
r.physical_resource_id, # 物理ID
r.resource_type, # タイプ
r.resource_status # ステータス
]
)
df = pd.DataFrame(buffer, columns=[
"StackName", "LogicalResourceId", "PhysicalResourceId", "Type", "Status"])
# 出力
if format == "csv":
print(df.to_csv(index=False))
else:
print(df.to_markdown(showindex=False))
if __name__ == "__main__":
# USAGE(to Markdown): python (PATH_TO_SCRIPT)/get_all_cfn_resources.py md
# USAGE(to CSV): python (PATH_TO_SCRIPT)/get_all_cfn_resources.py csv
print_all_cfn_resources(format=sys.argv[-1])
pass
利用例
実際の出力例を載せてみます (OS: macOS, Python: 3.7.3)
CSV 出力例
- コマンド:
python ./print_all_cfn_resources.py csv
$ python ./print_all_cfn_resources.py csv
StackName,LogicalResourceId,PhysicalResourceId,Type,Status
TgwArchAppInstanceStack,CDKMetadata,8732eb10-73fe-11ea-9b91-0ab0f59df27e,AWS::CDK::Metadata,CREATE_COMPLETE
TgwArchAppInstanceStack,ec2InstanceProfile,TgwArch-ec2-instance-profile,AWS::IAM::InstanceProfile,CREATE_COMPLETE
TgwArchAppInstanceStack,iamRoleForEc2,TgwArch-ec2-role,AWS::IAM::Role,CREATE_COMPLETE
TgwArchAppInstanceStack,instance,i-0c76752e28335c0fb,AWS::EC2::Instance,CREATE_COMPLETE
...(略)...
TgwArchAppNwStack,CDKMetadata,54ca0fb0-73fd-11ea-833e-068a1e4f7940,AWS::CDK::Metadata,CREATE_COMPLETE
TgwArchAppNwStack,ec2Rtb,rtb-01cdbc243363e942a,AWS::EC2::RouteTable,CREATE_COMPLETE
TgwArchAppNwStack,ec2RtbAssoc,rtbassoc-01eb9f9f825321aa3,AWS::EC2::SubnetRouteTableAssociation,CREATE_COMPLETE
TgwArchAppNwStack,ec2Subnet,subnet-0ce85d3d104a72080,AWS::EC2::Subnet,CREATE_COMPLETE
...(略)...
insightwatch,ContentProtectedReadOnlyPolicy,arn:aws:iam::XXXXXXXXXXXX:policy/insightwatch-ContentProtectedReadOnlyPolicy-1X2774TLOYTMT,AWS::IAM::ManagedPolicy,CREATE_COMPLETE
insightwatch,ExplicitDenyActionPolicy,arn:aws:iam::XXXXXXXXXXXX:policy/insightwatch-ExplicitDenyActionPolicy-FFM4FYWYMA6O,AWS::IAM::ManagedPolicy,CREATE_COMPLETE
insightwatch,IAMRole,insightwatch-IAMRole-1KTG03HC8SRBU,AWS::IAM::Role,CREATE_COMPLETE
cm-kawahara-masahiro-iam-role,IAMRoleForCmEngineer,cm-kawahara.masahiro,AWS::IAM::Role,CREATE_COMPLETE
CSVを Excelで開いてみます。以下のような構成です。
Markdown 出力例
- コマンド:
python ./print_all_cfn_resources.py md
$python ./print_all_cfn_resources.py md
| StackName | LogicalResourceId | PhysicalResourceId | Type | Status |
|:------------------------------|:-------------------------------|:-------------------------------------------------------------------------------------------|:--------------------------------------|:----------------|
| TgwArchAppInstanceStack | CDKMetadata | 8732eb10-73fe-11ea-9b91-0ab0f59df27e | AWS::CDK::Metadata | CREATE_COMPLETE |
| TgwArchAppInstanceStack | ec2InstanceProfile | TgwArch-ec2-instance-profile | AWS::IAM::InstanceProfile | CREATE_COMPLETE |
| TgwArchAppInstanceStack | iamRoleForEc2 | TgwArch-ec2-role | AWS::IAM::Role | CREATE_COMPLETE |
| TgwArchAppInstanceStack | instance | i-0c76752e28335c0fb | AWS::EC2::Instance | CREATE_COMPLETE |
...(略)...
| TgwArchAppNwStack | CDKMetadata | 54ca0fb0-73fd-11ea-833e-068a1e4f7940 | AWS::CDK::Metadata | CREATE_COMPLETE |
| TgwArchAppNwStack | ec2Rtb | rtb-01cdbc243363e942a | AWS::EC2::RouteTable | CREATE_COMPLETE |
| TgwArchAppNwStack | ec2RtbAssoc | rtbassoc-01eb9f9f825321aa3 | AWS::EC2::SubnetRouteTableAssociation | CREATE_COMPLETE |
| TgwArchAppNwStack | ec2Subnet | subnet-0ce85d3d104a72080 | AWS::EC2::Subnet | CREATE_COMPLETE |
...(略)...
| insightwatch | ContentProtectedReadOnlyPolicy | arn:aws:iam::XXXXXXXXXXXX:policy/insightwatch-ContentProtectedReadOnlyPolicy-1X2774TLOYTMT | AWS::IAM::ManagedPolicy | CREATE_COMPLETE |
| insightwatch | ExplicitDenyActionPolicy | arn:aws:iam::XXXXXXXXXXXX:policy/insightwatch-ExplicitDenyActionPolicy-FFM4FYWYMA6O | AWS::IAM::ManagedPolicy | CREATE_COMPLETE |
| insightwatch | IAMRole | insightwatch-IAMRole-1KTG03HC8SRBU | AWS::IAM::Role | CREATE_COMPLETE |
| cm-kawahara-masahiro-iam-role | IAMRoleForCmEngineer | cm-kawahara.masahiro | AWS::IAM::Role | CREATE_COMPLETE |
VSCodeの Markdownプレビューで開いてみました。
おわりに
とりあえず CFnの全スタック・全リソースをざざざざっと見たいときに使えると思います。
この記事が少しでもどなたかのお役に立てば幸いです。