วิธีตั้งค่ากำหนดการ Start EC2 Instance อัตโนมัติด้วย Amazon EventBridge

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

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

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

【Update】วิธีตั้งค่ากำหนดการ Start EC2 Instance อัตโนมัติด้วย Amazon EventBridge

ครั้งนี้จะมาแนะนำวิธีตั้งค่ากำหนดการ Start EC2 Instance อัตโนมัติด้วย Amazon EventBridge ต่อจากบทความ วิธีติดตั้ง Amazon Linux บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTy และ วิธีเชื่อมโยง Elastic IP (EIP) ไปยัง EC2 Instance

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

ก่อนอื่นต้องทำการติดตั้ง EC2 Instance สามารถดูวิธีการทำได้ที่คำอธิบายและลิงก์ด้านล่างนี้

※ชื่อ Key Pairs และ EC2 Instance ของบทความนี้คือtinnakorn-schedule-start
※หัวข้อ ❌3. Connect to EC2 by PuTTY ไม่ต้องทำ
※Link : วิธีติดตั้ง Amazon Linux บน EC2 และเชื่อมต่อเซิร์ฟเวอร์ด้วยโปรแกรม PuTTy

เมื่อติดตั้ง EC2 Instance เสร็จเรียบร้อยแล้ว ให้ทำการเชื่อมโยง Elastic IP ไปยัง EC2 Instance เพื่อไม่ให้ IP Address เกิดการเปลี่ยนแปลง สามารถทำตามขั้นตอนได้ที่ลิงก์ด้านล่างนี้ได้เลย

เมื่อทำวิธีตามด้านบนนี้เสร็จเรียบร้อยแล้ว ให้ Stop EC2 Instance เตรียมไว้

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

เมื่อ Stop EC2 Instance เตรียมไว้แล้ว ให้สร้าง Role ใน IAM ก่อน เพื่อนำไปใช้ในขั้นตอนของ วิธีตั้งค่ากำหนดการ Start EC2 Instance

เข้ามาที่ 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-schedule-start-event-ssm-automation-role(ชื่ออะไรก็ได้)
create_role-4-fix

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

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

คลิกที่หัวข้อ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

วิธีตั้งค่ากำหนดการ Start EC2 Instance

เราจะสาธิตวิธีตั้งค่ากำหนดการ Start EC2 Instance ใน Service Amazon EventBridge โดยจะใช้ชื่อว่าtinnakorn-schedule-startซึ่งเป็นชื่อเดียวกับ 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-schedule-start
» Description - optional:tinnakorn-schedule-start
eventBridge_start-1

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

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

การตั้งค่าหัวข้อ Select targets นี้คือ:
Target
» เลือกSystems Manager Automation ▼
» Document:AWS-StartEC2Instance ▼
eventBridge_start-3

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

มาที่ IAM แล้วเข้ามาที่ Role ของเรา ตัวอย่างนี้คือtinnakorn-schedule-start-event-ssm-automation-role
จากนั้น Copy ARN แล้วนำไปบันทึกไว้ที่ Notepad ก่อนก็ได้
eventBridge_start-5-fix

นำ Instance ID กับ ARN มาวางตามตัวอย่างดังนี้
» InstanceId*:i-*****************เมื่อวางไปแล้วจะเป็น["i-*****************"]อัตโนมัติ
» AutomationAssumeRole*:arn:aws:iam::************:role/tinnakorn-schedule-start-event-ssm-automation-role

⚫ Create a new role for this specific resource:tinnakorn-schedule-start_Amazon_EventBridge_Invoke_Start
※ตัวอย่างการใส่ชื่อ role

# ชื่อ EC2 Instance ของเรา = "tinnakorn-schedule-start_"

# ชื่อค่าเริ่มต้นของ Role = "Amazon_EventBridge_Invoke_Start_Automation_Execution_1763111298"
# ให้ทำการลบตั้งแต่ "_Automation_Execution_1763111298" ก็จะได้เป็น "Amazon_EventBridge_Invoke_Start"

# การรวมชื่อโดยการนำชื่อ EC2 Instance ของเรากับชื่อ role มารวมกันตามด้านล่างนี้
# "tinnakorn-schedule-start_" + "Amazon_EventBridge_Invoke_Start" ก็จะได้เป็น "tinnakorn-schedule-start_Amazon_EventBridge_Invoke_Start"

↓ ตัวอย่างนี้จะใส่ชื่อ role ตามด้านล่างนี้ แต่จริงๆ แล้วไม่ต้องทำแบบนี้ก็ได้ จะใส่ชื่ออะไรก็ได้ที่ทำให้เราจำง่ายที่สุด

tinnakorn-schedule-start_Amazon_EventBridge_Invoke_Start

eventBridge_start-6-fix

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

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

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

กลับมาที่หน้า EC2 Instance ของเรา แล้วสังเกตการเปลี่ยนแปลงของ Instance ตามเวลาที่เราได้ระบุไว้
เมื่อ Instance state เป็น Running การ Start Instance ก็เสร็จสมบูรณ์
eventBridge_start-10

ในกรณีที่เราต้องการปิดการใช้งาน Instance นี้อีกครั้ง ก็สามารถ Stop Instance ด้วยตัวเองได้ปกติ
ไปที่Instance state ▼เลือกStop instance
eventBridge_start-11

คลิกStop
eventBridge_start-12

เมื่อ Instance state เป็น Stopped การปิดการใช้งานชั่วคราวเสร็จสมบูรณ์
eventBridge_start-13

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

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

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

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

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

เมื่อเข้ามาหน้า StopInstance แล้ว สามารถตรวจสอบข้อมูลการ Start EC2 Instance ได้ว่าเรียบร้อยดีหรือไม่
cloudTrail-2

การลบ Features ที่ได้ใช้งานไปใน Services ของ AWS

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

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

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

การลบ Rule ใน Amazon EventBridge

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

คลิกDelete
delete_eventBride-2

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

※การลบ Roles ใน IAM

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

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

Roles นี้จะมี 2 อัน ให้ทำการลบ Roles ตามนี้
มาที่เมนูด้านซ้าย เลือกRoles
ค้นหาชื่อ role ที่สร้างไว้?︎ tinnakorn-schedule-start-event-ssm-automation-role+ Enter
Checkที่ชื่อของเรา
คลิกDelete
delete_iam_rule-1-fix

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

Role ที่ชื่อว่าtinnakorn-schedule-start_Amazon_EventBridge_Invoke_Startให้ลบเหมือนกับขั้นตอนด้านบนได้เลย
delete_iam_rule-3
delete_iam_rule-4

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

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

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

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

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

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

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

คลิกTerminate
deleten_i-2

เมื่อ Instance state เปลี่ยนเป็น ⊝Terminated
deleten_i-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-schedule-start+ Enter ตามด้วย Checkที่ชื่อของเรา
คลิกActions ▼เลือกDelete security groups
delete_sg-1

คลิกDelete
delete_sg-2

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

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

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

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

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

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

คลิกRelease
delete_eip-2

สรุป

ในบทความนี้ก็ได้สาธิตวิธีตั้งค่ากำหนดการ Start Instance อัตโนมัติด้วย Amazon EventBridge เรียบร้อยแล้ว ซึ่งการตั้งค่านี้ จะช่วยเพิ่มความสะดวกสบายในการทำงานให้กับเรามากยิ่งขึ้น เพราะเราสามารถกำหนดวัน เวลา ที่ต้องการ Start Instance ได้โดยไม่ต้องรอจนกว่าจะถึงวันที่ต้องการ Start EC2 Instance และไม่ต้องมาเสียเวลาเปิดการใช้งานด้วยตัวเอง

ตัวอย่างเช่น ถ้าเราต้องการใช้งานเซิร์ฟเวอร์ Instance ก่อนเวลางาน บางครั้งเรามีงานอื่นที่ต้องเตรียม แต่เราอาจจะลืมหรือไม่สะดวกที่จะ Start EC2 Instance ด้วยตัวเอง เราก็สามารถ Start EC2 Instance ด้วยการตั้งค่านี้ได้ตลอดเวลา นอกจากนี้ยังช่วยให้งานของคุณมีความราบรื่น และมีประสิทธิภาพมากยิ่งขึ้นอีกด้วย

คุณสามารถสร้าง Instance โดยตั้งค่ากำหนดการ Stop/Start Instance อัตโนมัติเฉพาะช่วงเวลาที่ต้องการใช้งานได้ ถ้าคุณเข้าใจฟังก์ชันต่างๆ ใน Service ของ AWS และสามารถใช้งาน AWS ได้เป็นอย่างดี ก็จะทำให้ลดค่าใช้จ่ายได้เป็นอย่างมาก

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