AWSのリソースを棚卸してみた
こんにちは、CX事業本部IoT事業部の高橋雄大です。
AWSで開発やテストを行っていると、消し忘れや使われなくなったリソースが出てきます。これらを放置しておくと、余分なコストが発生したり作業のミスに繋がることもあるため、定期的にリソースを棚卸することが大切です。
また、開発や運用保守の引き継ぎを行う際にも、引き継がれる人のことを考えて、しっかりとリソースの整理をしておきましょう。
本記事のゴール
AWSのリソース一覧を取得して、エクセルやスプレッドシートで棚卸を実施します。
環境情報
項目 | 内容 |
---|---|
OS | macOS Monterey 12.3 (21E230) |
AWS CLI | 2.2.16 |
AWSリソース一覧を作成
AWSのリソース一覧を取得にはAWS CLIを利用します。AWS CLIを利用するためには、セキュリティ認証情報などの初期設定が必要です。
次のコマンドを実行してAWSのリソース一覧を取得します。--region
で対象のリージョンを切り替えます。
aws resourcegroupstaggingapi get-resources --region ap-northeast-1 --query 'ResourceTagMappingList[*].ResourceARN' --output text | tr '\t' '\n'
arn:aws:ec2:ap-northeast-1:000000000000:instance/i-xxxxxxxxxxxxxxxxx arn:aws:lambda:ap-northeast-1:000000000000:function:itg-xxxxxxx-xxxx-iot-platform-authentication arn:aws:lambda:ap-northeast-1:000000000000:function:itg-xxxxxxx-xxxx-iot-platform-create-certificate arn:aws:lambda:ap-northeast-1:000000000000:function:itg-xxxxxxx-xxxx-iot-platform-create-error-report arn:aws:lambda:ap-northeast-1:000000000000:function:itg-xxxxxxx-xxxx-iot-platform-create-health-status arn:aws:lambda:ap-northeast-1:000000000000:function:itg-xxxxxxx-xxxx-iot-platform-create-xxxxxxx-xxxx-list-csv-file arn:aws:lambda:ap-northeast-1:000000000000:function:itg-xxxxxxx-xxxx-iot-platform-get-device-info 〜〜〜〜〜
過去に一度もタグ付けされていないリソースは取得できない可能性があります。タグ付をしなくてもLambda等のサービスは取得できることを確認しています。また、グローバルリソースは取得できないので、IAMの棚卸などもする場合には次のようなサービス別のコマンドを実行します。
aws iam list-users --query 'Users[*].Arn' --output text | tr '\t' '\n' aws iam list-roles --query 'Roles[*].Arn' --output text | tr '\t' '\n'
arn:aws:iam::000000000000:user/xxxxxxxxxxa arn:aws:iam::000000000000:user/xxxxxxxxxxb 〜〜〜〜〜 arn:aws:iam::000000000000:role/AdminRole arn:aws:iam::000000000000:role/audit-enable-securityhub arn:aws:iam::000000000000:role/AWSCloudFormationStackSetExecutionRole arn:aws:iam::000000000000:role/aws-service-role/guardduty.amazonaws.com/AWSServiceRoleForAmazonGuardDuty 〜〜〜〜〜
出力された内容をコピーしてエクセルやスプレッドシートへ貼り付けます。
棚卸の作業で使用する列「削除」「理由」を追加、必要に応じてデータの入力規則と条件付き書式を設定します。また、フィルター機能やソート機能を使うとリソースを絞り込みやすくなります。
CFnリソース一覧を作成
棚卸の作業をしていると、リソースがCloudFormationで管理されているかどうか調べることがあります。次のコマンドを実行してCloudFormationで管理されているリソースの一覧を取得しておくと検索がしやすいです。リソースがどのスタックに属しているのかも分かります。
staks=$(aws cloudformation list-stacks --region ap-northeast-1 --stack-status-filter 'CREATE_COMPLETE' 'UPDATE_COMPLETE' 'ROLLBACK_COMPLETE' | jq '.StackSummaries') len=$(echo $staks | jq length) for i in $(seq 0 $(($len -1))); do aws cloudformation describe-stack-resources --region ap-northeast-1 \ --stack-name $(echo $staks | jq -r ".[$i].StackName") \ | jq -r '.StackResources[] | [.StackName,.ResourceType,.PhysicalResourceId] | @tsv' sleep 1 done
itg-xxxxxxx-xxxx-iot-platform-create-xxxxxxx-xxxx-list-csv-file AWS::CDK::Metadata xxxxxxxx-xxxxxxxxx-xxxx-xxxxxxxxxxxx itg-xxxxxxx-xxxx-iot-platform-create-xxxxxxx-xxxx-list-csv-file AWS::Events::Rule itg-xxxxxxx-xxxx-iot-plat-CreateXxxxxxxXxxxListCsv-XXXXXXXXXXXXX itg-xxxxxxx-xxxx-iot-platform-create-xxxxxxx-xxxx-list-csv-file AWS::Lambda::Permission itg-xxxxxxx-xxxx-iot-platform-create-xxxxxx-CreateXxxxxxxXxxxListCsvFileEventRuleAllow-XXXXXXXXXXXXX itg-xxxxxxx-xxxx-iot-platform-create-xxxxxxx-xxxx-list-csv-file AWS::Lambda::Function itg-xxxxxxx-xxxx-iot-platform-create-xxxxxxx-xxxx-list-csv-file itg-xxxxxxx-xxxx-iot-platform-create-xxxxxxx-xxxx-list-csv-file Custom::LogRetention /aws/lambda/itg-xxxxxxx-xxxx-iot-platform-create-xxxxxxx-xxxx-list-csv-file itg-xxxxxxx-xxxx-iot-platform-create-xxxxxxx-xxxx-list-csv-file AWS::IAM::Role itg-xxxxxxx-xxxx-iot-plat-CreateXxxxxxxXxxxListCsv-XXXXXXXXXXXXX itg-xxxxxxx-xxxx-iot-platform-create-xxxxxxx-xxxx-list-csv-file AWS::IAM::Policy itg-m-Crea-XXXXXXXXXXXXX itg-xxxxxxx-xxxx-iot-platform-create-xxxxxxx-xxxx-list-csv-file AWS::Lambda::Function itg-xxxxxxx-xxxx-iot-plat-LogRetentionxxxxxxxxxxxx-XXXXXXXXXXXXX itg-xxxxxxx-xxxx-iot-platform-create-xxxxxxx-xxxx-list-csv-file AWS::IAM::Role itg-xxxxxxx-xxxx-iot-plat-LogRetentionxxxxxxxxxxxx-XXXXXXXXXXXXX itg-xxxxxxx-xxxx-iot-platform-create-xxxxxxx-xxxx-list-csv-file AWS::IAM::Policy itg-m-LogR-XXXXXXXXXXXXX itg-xxxxxxx-xxxx-iot-platform-register-maintenance-history AWS::CDK::Metadata xxxxxxxx-xxxxxxxxx-xxxx-xxxxxxxxxxxx itg-xxxxxxx-xxxx-iot-platform-register-maintenance-history AWS::Lambda::Function itg-xxxxxxx-xxxx-iot-plat-LogRetentionxxxxxxxxxxxx-XXXXXXXXXXXXX 〜〜〜〜〜
エクセルやスプレッドシートでシートを1つ追加します。出力された内容をコピーしてシートへ貼り付けます。タブ区切りになっているので Command+Shift+V
や Ctrl+Shift+V
で貼り付ければきれいに列へ収まります。
リソースの棚卸を実施
AWSのリソースを棚卸していきます。削除対象のリソースは「削除する」にして理由を記入します。チームメンバーや顧客に確認が必要なリソースは「確認中」にしておきます。全てのリソースを確認できたら削除対象のリソースを削除しましょう。まずは開発環境から着手すると良いと思います。
まとめ
大規模なプロジェクトや長期間の開発では、何に使われているのかよくわからないリソースが放置されていることがあります。また、開発環境(開発用のAWSアカウント)では開発途中に手動で作成したテスト用のリソースや、CloudFormationのスタックを削除した際に自動で削除されなかったリソースなど、様々な理由で残されたリソースを見かけることも多いです。
このような不明確なリソースを棚卸によって減らすことで、効率よく開発に取り組むことができると思います。ぜひ、定期的な棚卸を取り入れてみてください。