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

More than 1 year has 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


以上