LoginSignup
1
0

【AWS】環境削除時のリソース消し忘れについて

Posted at

はじめに

環境を削除する時、作成した関連リソースを漏れなく削除できていますか。
EC2は削除したけど、AMIは保持し続けたまま課金されてしまうことがあるかと思います。
また、課金されなくともリソースを削除しきれない場合、
利用用途が不明瞭かつ後から削除できなくなり、
アカウント内に不要リソースが残り続けることになります。
本記事では削除の観点から漏れやすいサービスを記載した記事になります。

対象環境

以下のようなシステム構成を想定
image.png

削除し忘れやすいサービス(課金サービス)

EBSボリューム

EC2作成時に「終了時に削除する」オプションを設定していない場合、
EC2を削除しても残り続けるため手動でのボリューム削除が必要となる。
image.png

サービス有無確認/削除コマンド

1.削除したEC2インスタンスのインスタンスIDを確認

aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=TerminateInstances --query 'Events[].{resources:Resources[0].ResourceName,time:EventTime}' --output table

2.AWSConfigより削除したインスタンスに付与されていたボリュームIDを確認
※EC2削除後はEBSからEC2インスタンス情報が削除されるため、
 インスタンスIDを元にDescribeが不可

aws configservice get-resource-config-history --resource-type AWS::EC2::Instance --resource-id {インスタンスID} --query 'configurationItems[].relationships[?resourceType==`AWS::EC2::Volume`]' --output json

3.EBSの存在を確認

aws ec2 describe-volumes --volume-ids {ボリュームID}

4.EBSが存在していた場合削除

aws ec2 delete-volume --volume-id {ボリュームID}

EBSスナップショット

特別設定を行わないと取得されないが、
構築したリソースでスナップショットを取得していた場合は要削除となる。
※AMIと一緒に取得していた場合、AMIの削除を先に実施する必要がある。

サービス有無確認/削除コマンド

1.「3.EBSの存在を確認」を参考にEBSのボリュームIDを取得

2.削除対象のスナップショットIDを確認

aws ec2 describe-snapshots --filters Name=volume-id,Values={ボリュームID} --query 'Snapshots[].SnapshotId' --output table

3.スナップショットが存在していた場合削除

aws ec2 delete-snapshot --snapshot-id {2で確認したスナップショットID}

削除し忘れやすいサービス(非課金サービス)

AMI

特別設定を行わないと取得されないが、
構築したリソースのAMIを取得していた場合は要削除となる。

サービス有無確認/削除コマンド

1.「1.削除したEC2インスタンスのインスタンスIDを確認」を参考にインスタンスIDを取得

2.取得元インスタンスから削除対象のAMI情報を確認

aws ec2 describe-images --query 'Images[?SourceInstanceId==`{インスタンスID}`].ImageId' --output table

3.AMIが存在していた場合削除

aws ec2 deregister-image --image-id {2で確認したAMIのイメージID}

キーペア

EC2構築にあたって構築が必要となるサービスにつき、要手動削除

サービス有無確認/削除コマンド

1.「1.削除したEC2インスタンスのインスタンスIDを確認」を参考にインスタンスIDを取得

2.削除対象インスタンスにて利用していたキーペア名を取得

aws configservice get-resource-config-history --resource-type AWS::EC2::Instance --resource-id {インスタンスID} --output text --query 'configurationItems[?configurationItemStatus==`ResourceDiscovered`].configuration' | grep -o '"keyName":"[^"]*"'

3.存在していた場合削除

aws ec2 delete-key-pair --key-name {2で確認したキーペア名}

パラメータグループ/サブネットグループ

RDSやRedshift用パラメータ設定。
デフォルトとしてAWS側が用意しているパラメータグループを利用することができるが、基本的には利用しないので要削除対象
※今回はRDSを対象に実施

サービス有無確認/削除コマンド

1.RDSの削除アクションより各リソースの名称確認

aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=DeleteDBInstance --query 'Events[].{DBInstance:Resources[?ResourceType==`AWS::RDS::DBInstance`].ResourceName,DBParameterGroup:Resources[?ResourceType==`AWS::RDS::DBParameterGroup`].ResourceName,DBSubnetGroup:Resources[?ResourceType==`AWS::RDS::DBSubnetGroup`].ResourceName,time:EventTime}' --output table

2.各リソースを削除

パラメータグループ削除
aws rds delete-db-parameter-group --db-parameter-group-name {1で確認したパラメータグループ名}
サブネットグループ削除
aws rds delete-db-subnet-group --db-subnet-group-name {1で確認したサブネットグループ名}

削除忘れ確認方法

上記の観点に併せて、削除忘れ防止のために以下方法での確認も可能です。
ただし、前提として作成したリソースにはタグを付与する必要があります。

タグ付与とTagEditor

AWSのTagEditorという機能を利用して、
アカウント単位で該当タグが付与されているサービスを洗い出すことが可能です。

利用方法

1.コンソールより「Resource Groups & Tag Editor」を選択し、タグエディタを押下する。
2024-05-03_10h14_05.png

2.検索対象としたいタグのKey/Valueを入力し追加。その後「リソース検索」を押下
2024-05-03_10h18_12.png

3.存在していて検索対象としたタグが付与されているリソースが出力される
2024-05-03_10h19_39.png

利用の注意点

全てのサービスに対して洗い出せるわけではありません。
洗い出し対象サービスは「AWS Resource Groups およびタグエディタで使用できるリソースタイプ」内の「タグエディタのタグ付け」参照

終わりに

「本記事が環境削除時に漏れなくリソースを削除したい」
と考えている方の助けになれば幸いです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0