この記事について
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
以上