Help us understand the problem. What is going on with this article?

[JAWS-UG CLI] Amazon EC2 Systems Manager 入門 (6) リソースの削除

More than 3 years have passed since last update.

この記事について

JAWS-UG CLI専門支部 #81 Amazon EC2 Systems Manager 入門で実施するハンズオン用の手順書です。

前提条件

必要な権限

作業にあたっては、以下の権限を有したIAMユーザもしくはIAMロールを利用してください。

  • EC2 Systems Manager(ssm)のフルコントロール権限
  • EC2のフルコントロール権限
  • CloudFormationの関するフルコントロール権限
  • IAMの関するフルコントロール権限
  • S3の関するフルコントロール権限
  • SNSの関するフルコントロール権限

0. 準備

0.1. リージョンを指定

ハンズオンでは東京リージョンを利用しますが、必要に応じて他のリージョンに変更してご利用ください。(東京リージョンを他の検証目的で利用している、など)

コマンド
export AWS_DEFAULT_REGION="ap-northeast-1"

0.2. 資格情報を確認

コマンド
aws configure list

インスタンスプロファイルを設定したEC2インスタンスでアクセスキーを設定せずに実行した場合、以下のようになります。

結果
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************QSAA         iam-role
secret_key     ****************c1xY         iam-role
    region                us-west-2              env    AWS_DEFAULT_REGION

0.3. バージョン確認

コマンド
aws --version
結果
(可能な限り最新版を利用しましょう)

0.4. バージョンアップ(必要に応じて)

コマンド
sudo pip install -U awscli

1. VPC環境の削除

1.1. CloudFormation Stackの削除

変数の確認

コマンド
cat << ETX

    CF_STACK_NAME: ${CF_STACK_NAME}

ETX
結果
    CF_STACK_NAME: EC2SystemsManager

CloudFormation Stackの削除

コマンド
aws cloudformation delete-stack \
    --stack-name ${CF_STACK_NAME}
結果
(返値無し)

CloudFormation Stackの削除を待機

コマンド
aws cloudformation wait stack-delete-complete \
    --stack-name ${CF_STACK_NAME}
結果
(返値無し)

CloudFormation Stackが削除されたことを確認

コマンド
aws cloudformation describe-stacks \
    --query Stacks[?StackName==\'${CF_STACK_NAME}\']
結果
[]

2. S3バケットの削除

2.1. S3バケットの削除

バケット名の確認

コマンド
cat << ETX

    BUCKET_NAME: ${BUCKET_NAME}

ETX
結果
    BUCKET_NAME: ec2-systems-manager-************

バケットの存在を確認

コマンド
aws s3 ls | grep ${BUCKET_NAME}
結果
2017-04-02 03:10:33 ec2-systems-manager-************

バケットを削除

コマンド
aws s3 rb s3://${BUCKET_NAME} --force
結果
(省略)

3. SNS Topicの削除

3.1. サブスクリプションの削除

トピックに関連付いたサブスクリプションARNを確認

コマンド
SNS_SUBSCRIPTION_ARN=$(aws sns list-subscriptions-by-topic \
    --topic-arn ${SNS_TOPIC_ARN_FOR_EC2} \
    --query Subscriptions[].SubscriptionArn \
    --output text) \
    && echo ${SNS_SUBSCRIPTION_ARN}
結果
arn:aws:sns:ap-northeast-1:************:ec2-topic:55880fd7-266a-4308-8252-a798b9dd174f

サブスクリプションを削除

コマンド
aws sns unsubscribe \
    --subscription-arn ${SNS_SUBSCRIPTION_ARN}

サブスクリプションが削除されたことを確認

コマンド
aws sns list-subscriptions-by-topic \
    --topic-arn ${SNS_TOPIC_ARN_FOR_EC2}
結果
{
    "Subscriptions": []
}

3.2. SNS Topicの削除

トピック名の確認

コマンド
cat << ETX

    SNS_TOPIC_NAME_FOR_EC2: ${SNS_TOPIC_NAME_FOR_EC2}
    SNS_TOPIC_ARN_FOR_EC2: ${SNS_TOPIC_ARN_FOR_EC2}

ETX
結果
    SNS_TOPIC_NAME_FOR_EC2: ec2-topic
    SNS_TOPIC_ARN_FOR_EC2: arn:aws:sns:ap-northeast-1:************:ec2-topic

トピックの存在を確認

コマンド
aws sns list-topics \
    | grep ${SNS_TOPIC_NAME_FOR_EC2}
結果
            "TopicArn": "arn:aws:sns:ap-northeast-1:************:ec2-topic"

トピックを削除

コマンド
aws sns delete-topic \
    --topic-arn ${SNS_TOPIC_ARN_FOR_EC2}

トピックが削除されたことを確認

コマンド
aws sns list-topics \
    | grep ${SNS_TOPIC_NAME_FOR_EC2}

4. IAM Roleの削除

4.1. IAM Roleの削除(インスタンスプロファイル)

ロール名の確認

コマンド
cat << ETX

    ROLE_NAME_FOR_INSTANCE_PROFILE: ${ROLE_NAME_FOR_INSTANCE_PROFILE}

ETX
結果
    ROLE_NAME_FOR_INSTANCE_PROFILE: TestProfileForWindowsServer

ロールの存在を確認

コマンド
aws iam get-role \
    --role-name ${ROLE_NAME_FOR_INSTANCE_PROFILE}
結果
{
    "Role": {
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": "sts:AssumeRole",
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "ec2.amazonaws.com"
                    }
                }
            ]
        },
        "RoleId": "AROAJGGQ4IVLH6XTAXYW6",
        "CreateDate": "2017-04-02T08:18:06Z",
        "RoleName": "TestProfileForWindowsServer",
        "Path": "/",
        "Arn": "arn:aws:iam::************:role/TestProfileForWindowsServer"
    }
}

インスタンスプロファイルにロールが追加されていることを確認

コマンド
aws iam get-instance-profile \
    --instance-profile-name ${INSTANCE_PROFILE_NAME}
結果
{
    "InstanceProfile": {
        "InstanceProfileId": "AIPAJ4OVOVFJNCMMJEG2W",
        "Roles": [
            {
                "AssumeRolePolicyDocument": {
                    "Version": "2012-10-17",
                    "Statement": [
                        {
                            "Action": "sts:AssumeRole",
                            "Effect": "Allow",
                            "Principal": {
                                "Service": "ec2.amazonaws.com"
                            }
                        }
                    ]
                },
                "RoleId": "AROAJGGQ4IVLH6XTAXYW6",
                "CreateDate": "2017-04-02T08:18:06Z",
                "RoleName": "TestProfileForWindowsServer",
                "Path": "/",
                "Arn": "arn:aws:iam::************:role/TestProfileForWindowsServer"
            }
        ],
        "CreateDate": "2017-04-02T08:18:55Z",
        "InstanceProfileName": "TestProfileForWindowsServer",
        "Path": "/",
        "Arn": "arn:aws:iam::************:instance-profile/TestProfileForWindowsServer"
    }
}

インスタンスプロファイルからロールを削除

コマンド
aws iam remove-role-from-instance-profile \
    --instance-profile-name ${INSTANCE_PROFILE_NAME} \
    --role-name ${ROLE_NAME_FOR_INSTANCE_PROFILE}

インスタンスプロファイルに追加されていたロールが削除されたことを確認

コマンド
aws iam get-instance-profile \
    --instance-profile-name ${INSTANCE_PROFILE_NAME}
結果
{
    "InstanceProfile": {
        "InstanceProfileId": "AIPAJ4OVOVFJNCMMJEG2W",
        "Roles": [],
        "CreateDate": "2017-04-02T08:18:55Z",
        "InstanceProfileName": "TestProfileForWindowsServer",
        "Path": "/",
        "Arn": "arn:aws:iam::************:instance-profile/TestProfileForWindowsServer"
    }
}

ロールにアタッチされたポリシーを確認

コマンド
aws iam list-attached-role-policies \
    --role-name ${ROLE_NAME_FOR_INSTANCE_PROFILE}
結果
{
    "AttachedPolicies": [
        {
            "PolicyName": "AmazonEC2RoleforSSM",
            "PolicyArn": "arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM"
        }
    ]
}

ロールからポリシーをデタッチ

コマンド
POLICY_ARN_FOR_INSTANCE_PROFILE="arn:aws:iam::aws:policy/service-role/AmazonEC2RoleforSSM"
コマンド
aws iam detach-role-policy \
    --role-name ${ROLE_NAME_FOR_INSTANCE_PROFILE} \
    --policy-arn ${POLICY_ARN_FOR_INSTANCE_PROFILE}

ロールからポリシーがデタッチされたことを確認

コマンド
aws iam list-attached-role-policies \
    --role-name ${ROLE_NAME_FOR_INSTANCE_PROFILE}
コマンド
{
    "AttachedPolicies": []
}

ロールを削除

コマンド
aws iam delete-role \
    --role-name ${ROLE_NAME_FOR_INSTANCE_PROFILE}

ロールが削除されたことを確認

コマンド
aws iam get-role \
    --role-name ${ROLE_NAME_FOR_INSTANCE_PROFILE}
結果
An error occurred (NoSuchEntity) when calling the GetRole operation: Role not found for TestProfileForWindowsServer

4.2. IAM Roleの削除(メンテナンスウィンドウ用サービスロール)

ロール名の確認

コマンド
cat << ETX

    ROLE_NAME_FOR_NOTIFICATION: ${ROLE_NAME_FOR_NOTIFICATION}

ETX
結果
    ROLE_NAME_FOR_NOTIFICATION: NotificationForEC2SystemsManager

ロールの存在を確認

コマンド
aws iam get-role \
    --role-name ${ROLE_NAME_FOR_NOTIFICATION}
結果
{
    "Role": {
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": "sts:AssumeRole",
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "ssm.amazonaws.com"
                    }
                }
            ]
        },
        "RoleId": "AROAIXXBP2WKJZO3BO47M",
        "CreateDate": "2017-04-02T08:24:06Z",
        "RoleName": "NotificationForEC2SystemsManager",
        "Path": "/",
        "Arn": "arn:aws:iam::************:role/NotificationForEC2SystemsManager"
    }
}

ロールにアタッチされたポリシーを確認

コマンド
aws iam list-attached-role-policies \
    --role-name ${ROLE_NAME_FOR_NOTIFICATION}
結果
{
    "AttachedPolicies": [
        {
            "PolicyName": "AmazonSNSFullAccess",
            "PolicyArn": "arn:aws:iam::aws:policy/AmazonSNSFullAccess"
        }
    ]
}

ロールからポリシーをデタッチ

コマンド
POLICY_ARN_FOR_NOTIFICATION="arn:aws:iam::aws:policy/AmazonSNSFullAccess"
コマンド
aws iam detach-role-policy \
    --role-name ${ROLE_NAME_FOR_NOTIFICATION} \
    --policy-arn ${POLICY_ARN_FOR_NOTIFICATION}

ロールからポリシーがデタッチされたことを確認

コマンド
aws iam list-attached-role-policies \
    --role-name ${ROLE_NAME_FOR_NOTIFICATION}
コマンド
{
    "AttachedPolicies": []
}

ロールを削除

コマンド
aws iam delete-role \
    --role-name ${ROLE_NAME_FOR_NOTIFICATION}

ロールが削除されたことを確認

コマンド
aws iam get-role \
    --role-name ${ROLE_NAME_FOR_NOTIFICATION}
結果
An error occurred (NoSuchEntity) when calling the GetRole operation: Role not found for NotificationForEC2SystemsManager

4.3. IAM Roleの削除(通知用サービストール)

ロール名の確認

コマンド
cat << ETX

    ROLE_NAME_FOR_MAINTENANCE_WINDOW: ${ROLE_NAME_FOR_MAINTENANCE_WINDOW}

ETX
結果
    ROLE_NAME_FOR_MAINTENANCE_WINDOW: ServiceRoleForMaintenanceWindow

ロールの存在を確認

コマンド
aws iam get-role \
    --role-name ${ROLE_NAME_FOR_MAINTENANCE_WINDOW}
結果
{
    "Role": {
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Action": "sts:AssumeRole",
                    "Effect": "Allow",
                    "Principal": {
                        "Service": "ssm.amazonaws.com"
                    }
                }
            ]
        },
        "RoleId": "AROAJYEUXJMMCM3236UOA",
        "CreateDate": "2017-04-02T14:09:05Z",
        "RoleName": "ServiceRoleForMaintenanceWindow",
        "Path": "/",
        "Arn": "arn:aws:iam::************:role/ServiceRoleForMaintenanceWindow"
    }
}

ロールにアタッチされたポリシーを確認

コマンド
aws iam list-attached-role-policies \
    --role-name ${ROLE_NAME_FOR_MAINTENANCE_WINDOW}
結果
{
    "AttachedPolicies": [
        {
            "PolicyName": "AmazonSSMMaintenanceWindowRole",
            "PolicyArn": "arn:aws:iam::aws:policy/service-role/AmazonSSMMaintenanceWindowRole"
        }
    ]
}

ロールからポリシーをデタッチ

コマンド
POLICY_ARN_FOR_MAINTENANCE_WINDOW="arn:aws:iam::aws:policy/service-role/AmazonSSMMaintenanceWindowRole"
コマンド
aws iam detach-role-policy \
    --role-name ${ROLE_NAME_FOR_MAINTENANCE_WINDOW} \
    --policy-arn ${POLICY_ARN_FOR_MAINTENANCE_WINDOW}

ロールからポリシーがデタッチされたことを確認

コマンド
aws iam list-attached-role-policies \
    --role-name ${ROLE_NAME_FOR_MAINTENANCE_WINDOW}
コマンド
{
    "AttachedPolicies": []
}

ロールを削除

コマンド
aws iam delete-role \
    --role-name ${ROLE_NAME_FOR_MAINTENANCE_WINDOW}

ロールが削除されたことを確認

コマンド
aws iam get-role \
    --role-name ${ROLE_NAME_FOR_MAINTENANCE_WINDOW}
結果
An error occurred (NoSuchEntity) when calling the GetRole operation: Role not found for ServiceRoleForMaintenanceWindow

以上

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした