วิธีการ Shutdown Windows ด้วย Schedule จาก EventBridge

วิธีการ Shutdown Windows ด้วย Schedule จาก EventBridge เราจะทำการตั้งค่าใน Service ที่ชื่อว่า Amazon EventBridge โดยสาธิตการกำหนดเวลา Shutdown Windows รวมไปถึงการตรวจสอบประวัติการใช้งานใน CloudTrail และการลบ Feature ที่ได้สร้างและใช้งานไปใน Services ของ AWS

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

UI ของ Event Bridge เปลี่ยนไปมาก จึงทำการเขียนบทความใหม่ ดังนั้นโปรดดูที่บทความนี้

【Update】วิธีการ Shutdown Windows ด้วย Schedule จาก EventBridge

ครั้งนี้จะมาแนะนำวิธีการ Shutdown Windows ด้วย Schedule จาก EventBridge ต่อจากบทความ วิธีการรันคำสั่ง Shutdown จาก Management Console โดยไม่ต้องเข้า Windows

สิ่งที่ต้องมี

ให้ทำการรันคำสั่ง Shutdown จาก Management Console โดยไม่ต้องเข้า Windows ก่อน สามารถดูได้ที่คำอธิบายและลิงก์ด้านล่างนี้เลย

วิธีการรันคำสั่ง Shutdown จาก Management Console โดยไม่ต้องเข้า Windows

  • หมายเหตุ : บทความนี้มีขั้นตอนทั้งหมด 6 หัวข้อ [ ✅ = ต้องทำ | ❌ = ไม่ต้องทำ ]
    1. ✅ การสร้าง Role ใน IAM
    2. ✅ การสร้าง Key Pair, Instance, Elastic IP ใน EC2
      • การสร้าง Key Pair
      • การสร้าง Microsoft Windows Server 2019 Base
      • Elastic IP (EIP)
    3. ✅ การ Connect to Instance เพื่อเข้าใช้งาน Windows ผ่านไฟล์ RDP
    4. ✅ การ Run Command ใน Systems Manager
    5. ❌ การ Run Command ผ่าน PowerShell Script ใน Systems Manager
    6. ❌ การ Run Command อื่นๆ ผ่าน PowerShell Script ใน Systems Manager

เมื่อทำวิธีตามด้านบนนี้เสร็จเรียบร้อยแล้ว ให้เริ่มทำหัวข้อถัดไปได้เลย

การสร้าง Rule ใน IAM

ทำสร้าง Role ใน IAM ก่อน เพื่อนำไปใช้ในขั้นตอนถัดไปของ วิธีการ Shutdown Windows ด้วย Schedule จาก EventBridge

เข้ามาที่ Service IAM โดยค้นหา?︎ IAM» เลือกIAM
search_iam

มาที่เมนูด้านซ้าย เลือกRoles
menu_roles

คลิกCreate role
create_role-1

การตั้งค่า Step 1 : Select trusted entity นี้คือ:
Trusted entity type
» เลือกAWS service

Use case
» Common use cases:EC2
» คลิกNext
create_role-2

การตั้งค่า Step 2 : Add permissions นี้คือ:
Add permissions
» ค้นหา Permissions policies:?︎ AmazonSSMAutomationRole+ Enter
» Checkที่ชื่อ AmazonSSMAutomationRole
» คลิกNext
create_role-3

การตั้งค่า Step 3 : Name, review, and create นี้คือ:
» Role name:tinnakorn-win-shutdown-ssm-automation-role(ชื่ออะไรก็ได้) role_shutdown-4

เลื่อนลงมาด้านล่างสุด คลิกCreate role
create_role-5

ค้นหาชื่อ Role ที่สร้างไปเมื่อสักครู่นี้:?︎ tinnakorn-win-shutdown-ssm-automation-role+ Enter จากนั้นคลิกที่ Role name ของเรา
role_shutdown-6

คลิกที่หัวข้อTrust relationshipsและคลิกEdit trust policy
create_role-7

แก้ไข Code ที่ "Service": โดยการเพิ่ม"ssm.amazonaws.com"ลงไป
เพื่อให้ง่ายต่อการแก้ไข แนะนำให้ลบ Code เก่าในช่อง Edit trust policy ออกให้หมดและ Copy Code ด้านล่างนี้วางลงไปแทนที่

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": [
                    "ssm.amazonaws.com",
                    "ec2.amazonaws.com"
                ]
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

create_role-8

เลื่อนลงมาด้านล่างสุด คลิกUpdate policy
create_role-9

มาดูที่หัวข้อTrust relationshipsอีกครั้ง จะเห็นว่าแก้ไข Code เสร็จเรียบร้อยแล้ว
create_role-10

วิธีการ Shutdown Windows ด้วย Schedule จาก EventBridge

เราจะสาธิตวิธีการ Shutdown Windows ด้วย Schedule จาก EventBridge โดยจะใช้ชื่อว่าtinnakorn-win-shutdownซึ่งเป็นชื่อเดียวกับ Instance นั่นเอง

ค้นหา?︎ Amazon EventBridge» เลือกAmazon EventBridge
search_eventbridge

เมื่อเข้ามาที่ Amazon EventBridge แล้ว มาที่เมนูด้านซ้าย เลือกRules
menu_rules_eventbridge

มาที่หัวข้อ Rules คลิกCreate rule
cre_schedule_stop_ec2-1

เมื่อเข้ามาหน้า Create rule แล้ว สามารถดูการตั้งค่านี้เป็นแนวทางได้เลย
การตั้งค่าหัวข้อ Name and description นี้คือ:
» Name:tinnakorn-win-shutdown
» Description - optional:tinnakorn-win-shutdown
cre_schedule_win-2

การตั้งค่าหัวข้อ Define pattern นี้คือ:
» Build or customize an Event Pattern or set a Schedule to invoke Targets.:⚫ Schedule
» เลือก⚫ Cron expression: ตามด้วยใส่วันที่และเวลาที่เราต้องการลบ:50 10 * * ? *(เวลาประเทศไทยคือ17:50นาที)
» เมื่อใส่วันที่และเวลาแล้ว จะมี Next 10 trigger date(s) ปรากฎขึ้นมา เลือก:Local time zone ▼
cre_schedule_win-3

สามารถศึกษาเรื่อง Cron expression เพิ่มเติมได้ที่ : https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html

มาที่หน้า EC2 Instance ของเรา คลิกเพื่อ Copy Instance ID แล้วนำไปบันทึกไว้ที่ Notepad ก่อนก็ได้
instance_id_win-fix-1

การตั้งค่าหัวข้อ Select targets นี้คือ:
Target
» เลือกSystems Manager Run Command ▼
» Document:AWS-RunPowerShellScript ▼
» Target key*:InstanceIds
» Target value(s)*:i-*****************+ คลิกAdd(เมื่อใส่ Instance ID ที่ Copy มาแล้วอย่าลืมคลิก Add)
cre_schedule_win-4

ในส่วนของ ▼ Configure automation parameter(s) เราสามารถใส่คำสั่งอะไรลงไปก็ได้
ในตัวอย่างนี้จะใส่คำสั่ง Shutdown Windows โดยอัตโนมัติ สามารถทำได้ดังนี้

・3600 วินาที = 1 ชั่วโมง
・1800 วินาที = 30 นาที
・900 วินาที = 15 นาที
・600 วินาที = 10 นาที
・300 วินาที = 5 นาที
・60 วินาที = 1 นาที

ในตัวอย่างนี้จะสาธิตแค่เวลา 30 วินาที ให้ใส่คำสั่งตามนี้และกำหนดเวลาของคุณเอง
» เลือก⚫ Constant
» Commands:shutdown /s /t 30+ คลิกAdd(เมื่อใส่คำสั่งไปแล้วอย่าลืมคลิก Add)
cre_schedule_win-5

⚫ Create a new role for this specific resource:tinnakorn-win-shutdown_Amazon_EventBridge_Invoke_Run_Command ตัวอย่างนี้จะใส่ชื่อ role ตามด้านล่างโดยการเติมชื่อtinnakorn-win-shutdownข้างหน้าและลบเลขข้างหลังอออก (ชื่อ role นี้จะใส่เป็นอะไรก็ได้ที่ทำให้เราจำง่ายที่สุด)

tinnakorn-win-shutdown_Amazon_EventBridge_Invoke_Run_Command

cre_schedule_win-6

เลื่อนลงมาด้านล่างสุด คลิกCreate
eventBridge_start-7

เมื่อมาหน้านี้แล้ว ให้คลิกที่ชื่อ Rule ของเรา
cre_schedule_win-8

จากนั้นตรวจสอบข้อมูลที่เราได้ตั้งค่าไว้ในหน้านี้
cre_schedule_win-9

เมื่อตั้งค่าเสร็จแล้ว รอจนกว่าจะถึงเวลาที่เราตั้งค่าไว้ ในตัวอย่างนี้เวลา Shutdown จะอยู่ที่ 30 วินาที และเวลา Stop Instance อยู่ที่ 17.50 น.
เมื่อเวลามาถึง 17.50 น. แล้วก็รอไปอีก 30 วินาทีนั่นเอง
cre_schedule_win-10

เมื่อ Windows ถูก Shutdown ตามเวลาที่กำหนดไว้แล้ว มาดูที่หน้า Instance State จะมีสถานะเป็นStopped
cre_schedule_win-11

การตรวจสอบข้อมูลการใช้งานย้อนหลังด้วย CloudTrail

เมื่อเราได้ดำเนินการสิ่งต่างๆ ใน AWS นี้ไปแล้ว เราสามารถเข้ามาตรวจสอบสิ่งที่ดำเนินการย้อนหลังได้ที่ CloudTrail

ค้นหา?︎ CloudTrail» เลือกCloudTrail
search_cloud_trail

เมื่อเข้ามาที่ CloudTrail แล้ว มาที่เมนูด้านซ้าย เลือกEvent history
menu_event_history_cloud_trail

มาที่ Event history ในส่วนนี้เราสามารถเลือกดูข้อมูลย้อนหลังที่ดำเนินการไปก่อนหน้านี้ได้
ตัวอย่างนี้จะเข้าไปดูที่SendCommandเมื่อคลิกเข้าไปแล้วสามารถดูข้อมูลได้เลย
cloudTrail_win-1

การลบ Features ที่สร้างใน Services ของ AWS

เมื่อเราสร้างและใช้งาน Features ต่างๆ ใน Services ของ AWS ไปแล้ว เราสามารถลบออกได้ด้วยตัวเองง่ายๆ สามารถทำตามขั้นตอนเหล่านี้ได้เลย

※สิ่งที่จะลบออกคือ:

  • Amazon EventBridge
  • IAM
    • Roles
    • Policies
  • Instance
    • Security Groups
    • Key Pairs
    • Elastic IP

การลบ Rule ใน Amazon EventBridge

มาที่หน้า Amazon EventBridge ทำการลบดังนี้
» เลือกRules
» คลิกที่ชื่อของเรา
» คลิกDelete
delete_eventBride_win-1

» คลิกDelete
delete_eventBride_win-2

การลบ Roles กับ Policies ใน IAM

เข้ามาที่ Service IAM โดยค้นหา?︎ IAM» เลือกIAM
search_iam

จากนั้นเริ่มทำการลบ Features Roles กับ Policies ใน Service IAM ได้เลย

※การลบ Roles ใน IAM
Roles นี้จะมี 3 อัน คือ:

tinnakorn-win-shutdown-ec2-role
tinnakorn-win-shutdown-ssm-automation-role
tinnakorn-win-shutdown_Amazon_EventBridge_Invoke_Run_Command

Roletinnakorn-win-shutdown-ec2-roleนี้เป็นของ : วิธีการรันคำสั่งจาก Management Console โดยไม่ต้องเข้า Windows ให้ทำการลบไปพร้อมกับขั้นตอนนี้ได้เลย

ให้ทำการลบ Roles ตามนี้
มาที่เมนูด้านซ้าย เลือกRoles
ค้นหาชื่อ role ที่สร้างไว้ ถ้าในชื่อมีข้อความซ้ำกันอยู่ เช่น?︎ tinnakornให้พิมพ์ไปแค่นี้ก็ได้ ซึ่ง Filter จะแสดงชื่อที่มีให้เรา จากนั้นกด Enter
เมื่อตรวจสอบแล้วชื่อ Roles ทั้งหมดเป็นของเราให้ Checkที่หน้า Role name ได้เลย
คลิกDelete
delete_iam_rule_win-1

ใส่คำว่าDeleteลงไป จากนั้นคลิกDelete
delete_iam_rule_win-2

ในกรณีที่ต้องการลบทีละอันก็ให้ทำเหมือนกัน แค่เปลี่ยนจาก Delete เป็นชื่อของ Role ที่ต้องการลบ

※การลบ Policies ใน IAM
ทำการลบ Policies ตามนี้
มาที่เมนูด้านซ้าย เลือกPolicies
ค้นหาโดยใส่ชื่อเดียวกับที่เราสร้าง role ไว้ หรือใส่ข้อความที่มีอยู่ในชื่อก็ได้ เช่น?︎ tinnakorn+ Enter
ตรวจสอบชื่อของเราและ Checkที่ชื่อของเรา
คลิกActions ▼
เลือกDelete
delete_iam_policies_win-1

คัดลอกชื่อในช่องสีแดงมาวางในช่องด้านล่าง จากนั้นคลิกDelete
delete_iam_policies_win-2

การลบ Instance, Security Groups, Key Pairs และ EIP ใน EC2

เข้ามาที่ Service EC2 โดยค้นหา?︎ EC2» เลือกEC2
Search-EC2

จากนั้นเริ่มทำการลบ Features Instance, Security Groups, Key Pairs และ Elastic IP ใน Service EC2 ได้เลย

※การลบ Instance ใน EC2
มาที่เมนูด้านซ้ายตรงหัวข้อ ▼ Instance เลือกInstance
Instance-select

มาที่หน้า Instance ของเรา คลิกInstance state ▼เลือกTerminate instance
delete_i_win-1

คลิกTerminate
delete_i_win-2

รอจนกว่า Instance state เปลี่ยนเป็น ⊝Terminatedแบบนี้
delete_i_win-3

※การลบ Security Groups ใน EC2
ก่อนที่เราจะทำการลบ Security Groups เราต้องทำการ Terminate Instance จนกว่า Instance State เปลี่ยนเป็น ⊝Terminatedจึงจะสามารถลบ Security Groups ได้ เพราะว่าถ้าการ Terminate ไม่เสร็จสมบูรณ์ ก็จะทำให้มีแจ้งเตือน Error และไม่สามารถลบได้นั่นเอง

มาที่เมนูด้านซ้ายตรงหัวข้อ ▼ Network & Security เลือกSecurity Groups
menu_security_groups

ค้นหาชื่อ Security Group ของเรา โดยใส่ชื่อเดียวกับ Instance ของเราลงไป
ตัวอย่างนี้คือ?︎ tinnakorn-win-shutdown+ Enter ตามด้วย Checkที่ชื่อของเรา
คลิกActions ▼เลือกDelete security groups
delete_sg_win-1

คลิกDelete
delete_sg_win-2

※การลบ Key Pairs ใน EC2
มาที่เมนูด้านซ้ายตรงหัวข้อ ▼ Network & Security เลือกKey Pairs
menu_keypairs

ค้นหาชื่อ Key Pairs ของเรา โดยใส่ชื่อเดียวกับ Instance ของเราลงไป
ตัวอย่างนี้คือ?︎ tinnakorn-win-shutdown+ Enter ตามด้วย Checkที่ชื่อของเรา
คลิกที่Actions ▼เลือกDelete
delete_kp_win-1

พิมพ์คำว่าDeleteลงไป ตามด้วยคลิกDelete
delete_kp_win-2

※การลบ Elastic IP (EIP) ใน EC2

มาที่เมนูด้านซ้ายตรงหัวข้อ ▼ Network & Security เลือกElastic IPs
menu_eip

การลบ EIP นี้คือ
» ค้นหาชื่อ Elastic IP addresses ของเรา ตัวอย่างนี้คือ?︎ tinnakorn-win-shutdown+ Enter
» Checkที่ชื่อของเรา (โดยปกติจะ Check ให้อยู่แล้ว)
» มาที่ด้านขวา คลิกActions ▼
» เลือกRelease Elastic IP addresses
delete_eip_win-1

คลิกRelease
delete_eip_win-2

สรุป

ในบทความนี้ก็ได้สาธิตวิธีการ Shutdown Windows ด้วย Schedule จาก EventBridge เรียบร้อยแล้ว ซึ่งการตั้งค่านี้ จะช่วยให้เราสามารถ Shutdown ตามวัน เวลาที่เรากำหนดได้โดยอัตโนมัติ

ตัวอย่างเช่น ถ้าเราไม่ได้ใช้งานเซิร์ฟเวอร์ Instance ในตอนกลางคืน แต่บางครั้งอาจจะลืม Shutdown Windows ซึ่งเราสามารถ Shutdown Windows ด้วยการตั้งค่านี้ได้ตลอดเวลา นอกจากนี้ยังช่วยประหยัดค่าใช้จ่ายให้เรา และทำให้เราสามารถใช้งาน AWS ได้ในราคาที่ถูกลงอีกด้วย

บทความที่เกี่ยวข้อง