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

บทความนี้เป็นการ Update วิธีตั้งค่ากำหนดการ Start EC2 Instance อัตโนมัติ เนื่องจากว่า AWS Console ของฟังก์ชัน Rules ใน Amazon EventBridge มีการเปลี่ยนแปลง จึงทำให้วิธีการในรูปแบบ AWS Console เก่านั้นไม่เหมือนกับปัจจุบัน และจะทำให้เข้าใจผิดในขณะที่ทำการ Create rule ได้

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

สวัสดีครับ ผมป๊อปครับ ครั้งนี้จะมา 【Update】วิธีตั้งค่ากำหนดการ Start EC2 Instance อัตโนมัติด้วย Amazon EventBridge ในหัวข้อ วิธีตั้งค่ากำหนดการ Start EC2 Instance เนื่องจากว่าหน้า AWS Console ของฟังก์ชัน Rules ใน Amazon EventBridge มีการ Update

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

ก่อนอื่นต้องทำการติดตั้ง 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 แล้ว สามารถดูการตั้งค่านี้เป็นแนวทางได้เลย
การตั้งค่า Step 1 Define rule detail นี้คือ:
» Name:tinnakorn-schedule-start
» Description - optional:tinnakorn-schedule-start
» เลือก⚫ Schedule
» คลิกNext
fix-evenbridge-1

การตั้งค่า Step 2 Define schedule นี้คือ:
» เลื่อนลงมาหัวข้อ Schedule pattern ด้านล่างสุด
» Cron expression: ใส่วันที่และเวลาที่ต้องการ Start โดยในแต่ละช่องจะมีข้อความบอกอยู่ด้านล่าง เช่น20 8 * * ? *(ซึ่งเวลาประเทศไทยคือ03:20นาที ส่วนวันที่ถ้าเป็น*ก็จะหมายถึงวันปัจจุบัน)
» เมื่อใส่วันที่และเวลาแล้ว จะมี Next 10 trigger date(s) ปรากฎขึ้นมา เราสามารถเลือก:Local time zone ▼เพื่อดูเวลาประเทศไทยได้
» คลิกNext   fix-evenbridge-2

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

การตั้งค่า Step 3 Select target(s) นี้คือ:
» เลือก Select a target:System Manager Automation ▼
» Document:AWS-StartEC2Instance ▼
fix-evenbridge-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

เลื่อนลงมาด้านล่างดูที่หัวข้อ▼ Configure automation parameter(s)
นำ 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: ชื่อ Role ตัวอย่างนี้คือ
tinnakorn-schedule-start_Amazon_EventBridge_Invoke_Start

※ตัวอย่างการตั้งชื่อ Role (ดูเพื่อเป็นแนวทาง โดยคุณสามารถตั้งชื่ออะไรก็ได้)

# ทำการลบชื่อเดิมด้านหลังตั้งแต่ "_Automation_Execution_1763111298" ออกก็จะได้เป็น "Amazon_EventBridge_Invoke_Start"  
# จากนั้นใส่ชื่อ EC2 Instance: "tinnakorn-schedule-start_" ของเราไว้ด้านหน้าของชื่อ Role
# ก็จะได้เป็น ↓
tinnakorn-schedule-start_Amazon_EventBridge_Invoke_Start  # (ชื่อนี้เป็นแค่ตัวอย่าง)

» คลิกNext
fix-evenbridge-4

การตั้งค่า Step 4 - option Configure tags นี้ไม่ต้องตั้งค่าอะไร คลิกNextได้เลย
fix-evenbridge-5

ขั้นตอน Step 5 Review and create นี้คือการตรวจสอบข้อมูลการตั้งค่า
fix-evenbridge-6

เมื่อทำการตรวจสอบการตั้งค่าเสร็จแล้ว คลิกCreate ruleได้เลย
fix-evenbridge-7

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

ในส่วนนี้คือ Rule ของเรา ซึ่งจะมีข้อมูลที่เราได้ตั้งค่าไว้ในหน้านี้
eventBridge_start-9-fix

กลับมาที่หน้า 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

สรุป

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

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

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

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