コンソールから消せないConfigを全リージョンCLIから無効化する

コンソールから無効化できなかったので、全リージョンCLIでConfigを無効化してみました。
2021.01.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、鈴木(純)です。

困ったこと

AWS ConfigをCloudFormationから管理しようと思った時、既にConfigが設定されていて以下のようなエラーが出力されていました。どうやらAWS::Config::ConfigurationRecorderAWS::Config::DeliveryChannelは1つまでしか作れないらしいです。

それじゃあ消せばいいじゃんと思ってコンソールを確認してみたのですが、無効化するような項目が見つからない…

調べてみると、どうやらGUI上からは削除できないっぽい?

というわけでCLIから削除を行うことにしました。上記の記事ではCLIから削除できるコマンドが紹介されていたので、それを全リージョンで実行できるようにします。

今回CLIの実行はCloudShellからやっていきます。

作成したコマンド

以下のコマンドを実行すると、有効化されている全リージョンのConfigを無効化できます。

for r in `aws ec2 describe-regions --query Regions[*].RegionName --output text`
do
    for channel_name in `aws configservice describe-delivery-channels --region $r --query DeliveryChannels[*].name --output text`
    do 
        recorder_name=`aws configservice describe-configuration-recorders --region $r --query ConfigurationRecorders[*].name --output text`
        aws configservice delete-configuration-recorder --configuration-recorder-name $recorder_name --region $r
        aws configservice delete-delivery-channel --delivery-channel-name $channel_name --region $r
    done
done

実行してみる

先ほどのコマンドを使ってConfigを無効化していきましょう。

現在設定されているConfigをCLIから確認してみます。

$ aws configservice describe-delivery-channels
{
    "DeliveryChannels": [
        {
            "name": "default",
            "s3BucketName": "example-bucket-xxxxxxxx"
        }
    ]
}

設定されていることが確認できますね。

全リージョンの設定を確認したい場合は、以下のコマンドの出力を確認しましょう。リージョン名 レコーダー名の形式で出力されます。(設定されていない場合はリージョン名のみ)

aws ec2 describe-regions --region ap-northeast-1 --query "Regions[].[RegionName]" --output text \
| while read r; do
  recorder=$(aws configservice describe-configuration-recorders --region $r \
             --query "ConfigurationRecorders[].name" --output text)
  echo "${r} ${recorder}"
done

それでは先ほどのコマンドを実行していきましょう。コマンドをコピーしてペタッとCloudShellに貼り付けてEnterを押します。

$ for r in `aws ec2 describe-regions --query Regions[*].RegionName --output text`
> do
>     for channel_name in `aws configservice describe-delivery-channels --region $r --query DeliveryChannels[*].name --output text`
>     do 
>         recorder_name=`aws configservice describe-configuration-recorders --region $r --query ConfigurationRecorders[*].name --output text`
>         aws configservice delete-configuration-recorder --configuration-recorder-name $recorder_name --region $r
>         aws configservice delete-delivery-channel --delivery-channel-name $channel_name --region $r
>     done
> done

戻り値がないので何も表示されませんが、実際にはConfigが全リージョン無効化されています。

CLIから確認してみると、設定が無効化されていることを確認できました。

$ aws configservice describe-delivery-channels
{
    "DeliveryChannels": []
}

念の為コンソールからも確認してみると、設定が全て消えてセットアップ画面が表示されています。めでたし。

まとめ

コンソールから削除できなくて少し時間がとられたので、少しでも参考になれば幸いです。たまにコンソールからはできないパターンもあるので気をつけましょう。