हां, आप ऐसा कर सकते हैं कि AWS लैम्ब्डा का उपयोग कर सकते हैं। आप क्लाउडवाच में ट्रिगर का चयन कर सकते हैं जो UTC पर क्रोन के भावों पर चलता है।
यहां संबंधित लिंक https://aws.amazon.com/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/
एक अन्य विकल्प उपयोग करने के लिए है awscli
, जो उपलब्ध है pip
, apt-get
, yum
या brew
, और फिर चल aws configure
आपके क्रेडेंशियल्स IAM से निर्यात के साथ और निम्नलिखित बैश स्क्रिप्ट निष्पादित करने, एक EC2 कि साथ टैग किया गया रोकने के लिए Name: Appname
और Value: Appname Prod
। आप awscli
अपने उदाहरणों को टैग करने के लिए उपयोग कर सकते हैं या इसे एडब्ल्यूएस कंसोल से मैन्युअल रूप से टैग कर सकते हैं । aws ec2 stop-instances
इंस्टेंस को रोक देगा और jq
json क्वेरी को फ़िल्टर करने और टैग्स का उपयोग करके सही इंस्टेंस आईडी लाने के लिए उपयोग किया जाता है aws ec2 describe-instances
।
यह सत्यापित करने के लिए कि aws configure
सफल रहा है और json आउटपुट रन देता है और आउटपुट में aws ec2 describe-instances
आपका रनिंग इंस्टेंस आईडी होना चाहिए। यहाँ एक नमूना आउटपुट है
{
"Reservations": [
{
"Instances": [
{
"Monitoring": {
"State": "disabled"
},
"PublicDnsName": "ec2-xxx.ap-south-1.compute.amazonaws.com",
"State": {
"Code": xx,
"Name": "running"
},
"EbsOptimized": false,
"LaunchTime": "20xx-xx-xxTxx:16:xx.000Z",
"PublicIpAddress": "xx.127.24.xxx",
"PrivateIpAddress": "xxx.31.3.xxx",
"ProductCodes": [],
"VpcId": "vpc-aaxxxxx",
"StateTransitionReason": "",
"InstanceId": "i-xxxxxxxx",
"ImageId": "ami-xxxxxxx",
"PrivateDnsName": "ip-xxxx.ap-south-1.compute.internal",
"KeyName": "node",
"SecurityGroups": [
{
"GroupName": "xxxxxx",
"GroupId": "sg-xxxx"
}
],
"ClientToken": "",
"SubnetId": "subnet-xxxx",
"InstanceType": "t2.xxxxx",
"NetworkInterfaces": [
{
"Status": "in-use",
"MacAddress": "0x:xx:xx:xx:xx:xx",
"SourceDestCheck": true,
"VpcId": "vpc-xxxxxx",
"Description": "",
"NetworkInterfaceId": "eni-xxxx",
"PrivateIpAddresses": [
{
"PrivateDnsName": "ip-xx.ap-south-1.compute.internal",
"PrivateIpAddress": "xx.31.3.xxx",
"Primary": true,
"Association": {
"PublicIp": "xx.127.24.xxx",
"PublicDnsName": "ec2-xx.ap-south-1.compute.amazonaws.com",
"IpOwnerId": "xxxxx"
}
}
],
"PrivateDnsName": "ip-xxx-31-3-xxx.ap-south-1.compute.internal",
"Attachment": {
"Status": "attached",
"DeviceIndex": 0,
"DeleteOnTermination": true,
"AttachmentId": "xxx",
"AttachTime": "20xx-xx-30Txx:16:xx.000Z"
},
"Groups": [
{
"GroupName": "xxxx",
"GroupId": "sg-xxxxx"
}
],
"Ipv6Addresses": [],
"OwnerId": "xxxx",
"PrivateIpAddress": "xx.xx.xx.xxx",
"SubnetId": "subnet-xx",
"Association": {
"PublicIp": "xx.xx.xx.xxx",
"PublicDnsName": "ec2-xx.ap-south-1.compute.amazonaws.com",
"IpOwnerId": "xxxx"
}
}
],
"SourceDestCheck": true,
"Placement": {
"Tenancy": "default",
"GroupName": "",
"AvailabilityZone": "xx"
},
"Hypervisor": "xxx",
"BlockDeviceMappings": [
{
"DeviceName": "/dev/xxx",
"Ebs": {
"Status": "attached",
"DeleteOnTermination": true,
"VolumeId": "vol-xxx",
"AttachTime": "20xxx-xx-xxTxx:16:xx.000Z"
}
}
],
"Architecture": "x86_64",
"RootDeviceType": "ebs",
"RootDeviceName": "/dev/xxx",
"VirtualizationType": "xxx",
"Tags": [
{
"Value": "xxxx centxx",
"Key": "Name"
}
],
"AmiLaunchIndex": 0
}
],
"ReservationId": "r-xxxx",
"Groups": [],
"OwnerId": "xxxxx"
}
]
}
निम्नलिखित बैश स्क्रिप्ट वह stop-ec2.sh
है /home/centos/cron-scripts/
जो इस SO पोस्ट से प्रेरित है
(instance=$(aws ec2 describe-instances | jq '.Reservations[].Instances | select(.[].Tags[].Value | startswith("Appname Prod") ) | select(.[].Tags[].Key == "Appname") | {InstanceId: .[].InstanceId, PublicDnsName: .[].PublicDnsName, State: .[].State, LaunchTime: .[].LaunchTime, Tags: .[].Tags} | [.]' | jq -r .[].InstanceId) && aws ec2 stop-instances --instance-ids ${instance} )
फ़ाइल का उपयोग करके चलाएं sh /home/centos/cron-scripts/stop-ec2.sh
और सत्यापित करें कि EC2 उदाहरण बंद हो जाता है। चलाने के लिए डिबग करें aws ec2 describe-instances | jq '.Reservations[].Instances | select(.[].Tags[].Value | startswith("Appname Prod") ) | select(.[].Tags[].Key == "Appname") | {InstanceId: .[].InstanceId, PublicDnsName: .[].PublicDnsName, State: .[].State, LaunchTime: .[].LaunchTime, Tags: .[].Tags} | [.]' | jq -r .[].InstanceId
और देखें कि यह सही इंस्टेंस आईडी देता है जिसे टैग किया गया है।
फिर crontab -e
निम्नलिखित पंक्ति में जोड़ा जा सकता है
30 14 * * * sh /home/centos/cron-scripts/stop-ec2.sh >> /tmp/stop
जो आउटपुट को लॉग इन करेगा /tmp/stop
। 30 14 * * *
यूटीसी क्रॉन अभिव्यक्ति है कि आप में जाँच कर सकते हैं है https://crontab.guru/
। इसी तरह से बदलने के साथ aws ec2 start-instances
एक उदाहरण शुरू हो सकता है।