AWS Configルールを全リージョンまとめてCLIで削除してみた

2020.07.07

はじめに

AWS Configのルールを全リージョン分削除しようとしたところ、マネジメントコンソール上から行うのは少し手間でしたのでCLIで行うことにしました。 無事できましたので、記事化しておこうと思います。

前提

  • jq を利用します
  • CLIはv1系を利用
  • credentialの設定が済んでいるものとします

やってみたこと

1.コマンドの調査

describe-config-rules

ルールの一覧を取得できます

$ aws configservice describe-config-rules

以下のような内容が出力されます

{
    "ConfigRules": [
        {
            "ConfigRuleState": "ACTIVE",
            "Description": "Evaluates whether EC2 instances are the t2.micro type.",
            "ConfigRuleName": "InstanceTypesAreT2micro",
            "ConfigRuleArn": "arn:aws:config:us-east-1:xxxxxxxx:config-rule/config-rule-abcdef",
            "Source": {
                "Owner": "CUSTOM_LAMBDA",
                "SourceIdentifier": "arn:aws:lambda:us-east-1:xxxxxxxx:function:InstanceTypeCheck",
                "SourceDetails": [
                    {
                        "EventSource": "aws.config",
                        "MessageType": "ConfigurationItemChangeNotification"
                    }
                ]
            },
            "InputParameters": "{\"desiredInstanceType\":\"t2.micro\"}",
            "Scope": {
                "ComplianceResourceTypes": [
                    "AWS::EC2::Instance"
                ]
            },
            "ConfigRuleId": "config-rule-abcdef"
        }
    ]
}

describe-regions

以下のコマンドでリージョンの一覧が取得できます。

$ aws ec2 describe-regions
{
    "Regions": [
        {
            "Endpoint": "ec2.eu-north-1.amazonaws.com",
            "RegionName": "eu-north-1",
            "OptInStatus": "opt-in-not-required"
        },
        :
    ]
}

次のようにすると、有効なリージョン名だけが取得できます。

$ aws ec2 describe-regions --no-all-regions | jq .Regions[].RegionName | tr -d '"'
eu-north-1
ap-south-1
eu-west-3
eu-west-2
eu-west-1
ap-northeast-2
me-south-1
ap-northeast-1
sa-east-1
ca-central-1
ap-southeast-1
ap-southeast-2
eu-central-1
us-east-1
us-east-2
us-west-1
us-west-2

delete-config-rule

以下のコマンドでルールを削除できます。

$ aws configservice delete-config-rule --config-rule-name ${ConfigRuleName}

※ $(ConfigRuleName)の部分にはルール名をセットしてください

2.スクリプトの作成

調べたコマンドを組み合わせて、全リージョンのルールをまとめて消すスクリプトを作ってみました。

RegionNames=$(aws ec2 describe-regions --no-all-regions | jq .Regions[].RegionName | tr -d '"')
for RegionName in ${RegionNames}
do 
    echo "${RegionName} リージョンの設定を開始します"
    ConfigRuleNames=$(aws configservice describe-config-rules --region ${RegionName} | jq .ConfigRules[].ConfigRuleName | tr -d '"')
    for ConfigRuleName in ${ConfigRuleNames}
    do 
        echo "${ConfigRuleName} ルールを削除しました"
        $(aws configservice delete-config-rule --config-rule-name ${ConfigRuleName} --region ${RegionName}); 
    done
    echo "${RegionName} リージョンの設定を終了します"
done

これでまとめて全リージョンのルールを削除することができました。

おわりに

だれかの参考になれば幸いです。

参考資料

  • configservice — AWS CLI 1.18.61 Command Reference https://docs.aws.amazon.com/cli/latest/reference/configservice/index.html
  • describe-regions — AWS CLI 1.18.61 Command Reference https://docs.aws.amazon.com/cli/latest/reference/ec2/describe-regions.html