जवाबों:
अपडेट करें
AWS ने " इंस्टालेशन शेड्यूलर " नामक एक टूल जारी किया है , जिसमें एक पूर्ण कॉन्फ़िगरेशन गाइड शामिल है जो उस पेज से जुड़ा हुआ है। यह EC2 शेड्यूलर की एक वृद्धि के रूप में दिखता है जिसका मैं नीचे वर्णन करता हूं, कुछ और विशेषताओं के साथ, लेकिन यह अनिवार्य रूप से एक ही बात है।
नीचे दिया गया मार्गदर्शिका अभी भी काम करेगा, लेकिन नई स्थापनाओं के लिए उदाहरण शेड्यूलर को देखना बेहतर होगा।
मूल पोस्ट
AWS के पास EC2 शेड्यूलर नामक एक उपकरण है जो EC2 उदाहरणों को शुरू करने और रोकने पर आपको बहुत लचीला नियंत्रण प्रदान करता है।
टूल आपको टूल सेट करते समय डिफ़ॉल्ट स्टार्ट और स्टॉप समय को परिभाषित करने की अनुमति देता है, जिसे आप बाद में बदल सकते हैं। आप चुन सकते हैं कि कौन से उदाहरण नियंत्रित होते हैं, आप और टैग का उपयोग करके प्रत्येक उदाहरण के लिए अलग-अलग प्रारंभ और स्टॉप समय निर्दिष्ट कर सकते हैं।
हालांकि यह एक महान उपकरण है प्रलेखन कुछ अस्पष्ट और भ्रमित है। यह ऐसा है जैसे प्रलेखन एक इंजीनियर द्वारा लिखा गया है जिसने उपकरण लिखा था और तकनीकी लेखक के बजाय इसके बारे में सब कुछ जानता है।
नोट : यदि आपके पास प्रतिक्रिया या सुधार है तो टिप्पणियों की सराहना की जाती है। यदि आपके पास इस पर आधारित कोई प्रश्न है तो कृपया अपना प्रश्न शुरू करें।
EC2 शेड्यूलर क्या है
यह उपकरण एक लैम्ब्डा फंक्शन है जो क्लाउडवॉच इवेंट्स और डायनमोबी के साथ काम करता है। इसे क्लाउडफॉर्म टेम्प्लेट का उपयोग करके तैनात किया गया है, जो आवश्यक IAM भूमिकाओं और नीतियों को भी सेट करता है। आप यहां की वास्तुकला के बारे में पढ़ सकते हैं ।
तैनाती
इस पृष्ठ पर जाकर शुरू करें और "लॉन्च समाधान" पर क्लिक करें। अभी सीधा लिंक यहाँ है , लेकिन यह बदल सकता है।
उस क्षेत्र का चयन करें जिसे आप कंसोल के शीर्ष पर तैनात संसाधन चाहते हैं। स्क्रिप्ट किसी भी क्षेत्र में EC2 उदाहरणों को नियंत्रित करती है, लेकिन यह एक क्षेत्र में चलती है।
EC2 उदाहरणों को टैग करना
यह यहाँ प्रलेखन में शामिल है , लेकिन यह उतना सरल नहीं है जितना कि यह हो सकता है।
आप नियंत्रित करते हैं कि कौन से इंस्टेंस आपके इंस्टेंसेस को टैग करके शुरू और बंद किए जाते हैं।
सबसे सरल मामला आपको प्रत्येक EC2 उदाहरण को टैग करने की आवश्यकता है जिसे आप शेड्यूल के अनुसार शुरू और बंद करना चाहते हैं। ऐसा करने के लिए कंसोल में अपना EC2 उदाहरण ढूंढें, टैग पर क्लिक करें और इस टैग को बनाएं
कॉपी और पेस्ट सक्षम करने के लिए:
यदि आप चाहते हैं कि एक विशिष्ट शेड्यूल शुरू हो और बंद हो जाए तो आप टैग कुंजी और मान के लिए अतिरिक्त जानकारी जोड़ते हैं। उदाहरण के लिए यदि आप 1500 यूटीसी पर शुरू करना चाहते हैं और मंगलवार, गुरुवार और शुक्रवार को 2400 यूटीसी पर रुकना चाहते हैं, तो आप निम्नलिखित दर्ज करें।
कुंजी: अनुसूचक: ec2-startstop: late value: 1500; 2400; utc; tue, thu, fri;
ध्यान दें कि शब्द "लेट" कोई भी स्ट्रिंग हो सकता है, "लेट" का कोई विशेष अर्थ नहीं है।
आप इस टूल का उपयोग करके UTC को अपने स्थानीय समय में बदल सकते हैं ।
आप टैग संपादक का उपयोग बल्क टैग इंस्टेंस के लिए कर सकते हैं । यह आपको आसानी से बल्क टैगिंग सेट करने देता है, जो कि देव, परीक्षण और उत्पादन के लिए अलग-अलग सेटिंग्स होने के लिए उपयोगी हो सकता है। मुझे संदेह है कि आप इसे उत्पादन पर उपयोग करेंगे।
CloudFormation Parameters
जब आप CloudFormation टेम्पलेट चलाते हैं, तो आपको बहुत सारे पैरामीटर दर्ज करने होते हैं। अधिकांश आप डिफ़ॉल्ट रूप से छोड़ सकते हैं। यहाँ कुछ सबसे महत्वपूर्ण पैरामीटर हैं
अनुमतियाँ, नीतियाँ और भूमिकाएँ
CloudFormation टेम्पलेट का अनुमतियाँ / IAM भूमिका अनुभाग एक लाल हेरिंग है - अर्थात यह काफी हद तक अप्रासंगिक है। यह केवल क्लाउडफ़ॉर्मेशन स्क्रिप्ट को चलाने के लिए उपयोग की जाने वाली भूमिका को निर्दिष्ट करता है, यह बनाए गए संसाधनों या लैंबडा फ़ंक्शन चलाने पर उपयोग की जाने वाली भूमिका से कोई फ़र्क नहीं पड़ता है। पूर्वव्यापी में यह स्पष्ट है, लेकिन जब मैंने शुरू किया तो यह मेरे लिए स्पष्ट नहीं था।
इस स्क्रिप्ट को आप जो भी भूमिका निभाते हैं वही भूमिका और इनलाइन अनुमतियां IAM के भीतर बनाई जाती हैं। लैम्ब्डा फ़ंक्शन एक "ec2 अनुसूचक भूमिका" का उपयोग करता है जो स्क्रिप्ट बनाता है।
मैंने अपनी नीतियों को नीचे शामिल कर लिया है, जब वे किसी के लिए सहायक हों।
क्लाउडवाच इवेंट्स एंड मेट्रिक्स
यदि आप अपने लैम्बडा फंक्शन से लॉग देखना चाहते हैं तो क्लाउडवॉच इवेंट्स में जाएं। लॉगिंग काफी अच्छी है। साथ ही मेट्रिक्स भी हैं, इसलिए आप देख सकते हैं कि यह कब चलता है, कब चलता है, आदि।
अतिरिक्त
लैम्ब्डा फ़ंक्शन के लिए कोड Github पर उपलब्ध है ।
नीतियाँ
ये आम तौर पर आवश्यक नहीं होते हैं, लेकिन किसी के लिए हो सकते हैं इसलिए मैं उन्हें शामिल करूंगा।
IAM भूमिका के लिए नीति
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ec2:DescribeInstances",
"ec2:DescribeTags",
"iam:CreateRole",
"iam:GetRole",
"iam:PassRole",
"iam:PutRolePolicy",
"iam:DeleteRolePolicy",
"iam:DeleteRole",
"dynamodb:*",
"lambda:*",
"SNS:Publish",
"events:*"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "S3:GetObject",
"Resource": [
"arn:aws:s3:::solutions-us-west-2",
"arn:aws:s3:::solutions-us-west-2/*"
]
},
{
"Effect": "Allow",
"Action": [
"ec2:StopInstances",
"ec2:StartInstances"
],
"Resource": [
"arn:aws:ec2:us-west-2:123456789012:instance/i-0d112345Ab6789012"
]
}
]
}
IAM भूमिका के लिए ट्रस्ट नीति
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": [
"lambda.amazonaws.com",
"cloudformation.amazonaws.com"
]
},
"Action": "sts:AssumeRole"
}
]
}
यदि आप केवल उदाहरणों को शुरू करना और रोकना चाहते हैं, तो यहां एक और तरीका है जो लैम्बडा सेवा का उपयोग करता है। यह मानता है कि आप एक विशिष्ट इंस्टेंस आईडी को नियंत्रित करना चाहते हैं। आप अल्पविराम द्वारा अलग किए गए अधिक आईडी जोड़कर कई उदाहरणों को नियंत्रित कर सकते हैं। (उदा: 'i-3453453', 'i-45656745')। आप अपने उदाहरण की आईडी AWS कंसोल इंस्टेंस सेक्शन में पा सकते हैं।
नीचे कोड
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "arn:aws:logs:*:*:*"
},
{
"Effect": "Allow",
"Action": [
"ec2:Start*",
"ec2:Stop*"
],
"Resource": "*"
}
]
}
नीचे कोड
import boto3
region = ' eu-west-1'
instances = ['i-0dd344443184503fa']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.stop_instances(InstanceIds=instances)
print 'stopped your instances: ' + str(instances)
नीचे कोड
import boto3
region = 'eu-west-1'
instances = [' i-0dd344443184503fa']
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=region)
ec2.start_instances(InstanceIds=instances)
print 'started your instances: ' + str(instances)
यहां आप क्लाउडवेच इवेंट बनाएंगे जो रात में आपके लैम्ब्डा फ़ंक्शन को ट्रिगर करेगा
नोट: UTC में क्रोन अभिव्यक्तियों का मूल्यांकन किया जाता है। अपने पसंदीदा समय क्षेत्र के लिए अभिव्यक्ति को समायोजित करना सुनिश्चित करें। यहाँ एक उदाहरण है जो प्रतिदिन 08:00 GMT / UTC पर फ़ंक्शन चलाएगा):
0 08 * * ? *
सुबह अपने उदाहरणों को पुनः आरंभ करने के लिए, इन चरणों को दोहराएं और अपने पसंदीदा प्रारंभ समय का उपयोग करें। यदि आप एक मेल संदेश भेजना चाहते हैं जब भी फ़ंक्शन विफल हो जाते हैं, तो आप एक SNS विषय सेट कर सकते हैं और Lmbda फ़ंक्शन क्रिएशन विंडो में डीबगिंग के तहत उस संदेश को भेजने को कॉन्फ़िगर कर सकते हैं।
इस सब का स्रोत यहां पाया जा सकता है: एडब्ल्यूएस प्रलेखन