$ 500 पाठ में Google App Engine Flexible env का मूल्य निर्धारण


103

मैंने ऐप इंजन फ्लेक्सिबल एनवी ट्यूटोरियल @: https://cloud.google.com/nodejs/getting-started/hello-world पर नोड्स का अनुसरण किया

ट्यूटोरियल को सफलतापूर्वक तैनात और परीक्षण करने के बाद, मैंने कोड को थोड़ा प्रयोग करने के लिए बदल दिया और सफलतापूर्वक इसे तैनात कर दिया ... और फिर इसे चलाना छोड़ दिया क्योंकि यह एक परीक्षण वातावरण था (सार्वजनिक नहीं)।

एक महीने बाद, मुझे Google से $ 370 से अधिक का बिल प्राप्त होता है!

लेन-देन के विवरण में मैं निम्नलिखित देखता हूं:

अक्टूबर 1 - 31, 2017 ऐप इंजन फ्लेक्स इंस्टेंस रैम: 5948.774 गिब्बीटे-घंटे ([MYPROJECT]) $ 42.24

अक्टूबर 1 - 31, 2017 ऐप इंजन फ्लेक्स इंस्टेंस कोर घंटे: 5948.774 घंटे ([MYPROJECT]) $ 312.91

लगभग 0 अनुरोधों के साथ इस परीक्षण वातावरण को लगभग 6,000 घंटों के संसाधनों की आवश्यकता कैसे हुई? सबसे खराब में, मुझे लगता है कि 720 hrs एक महीने के लिए फुलटाइम चल रहा है @ $ 0.05 प्रति घंटे की लागत मुझे ~ $ 40 होगी। https://cloud.google.com/appengine/pricing

क्या कोई इस पर प्रकाश डालने में मदद कर सकता है? मुझे यह पता नहीं चल पाया है कि इतने सारे संसाधनों की आवश्यकता क्यों थी?

सहायता के लिए धन्यवाद!

अधिक डेटा के लिए, यह पिछले महीने का ट्रैफ़िक है (मूल रूप से 0): ट्रैफ़िक डेटा

और उदाहरण के लिए डेटाउदाहरण डेटा

अद्यतन: ध्यान दें कि मैंने पैकेज में एक संशोधन लाया था। जेसन: मैंने एक निर्भरता के रूप में नोडेम जोड़ा और इसे मेरी "एनपीपी स्टार्ट" स्क्रिप्ट के हिस्से के रूप में जोड़ा। हालाँकि मुझे संदेह है कि यह 6000 घंटे संसाधनों की व्याख्या करता है:

  "scripts": {
    "deploy": "gcloud app deploy",
    "start": "nodemon app.js",
    "dev": "nodemon app js",
    "lint": "samples lint",
    "pretest": "npm run lint",
    "system-test": "samples test app",
    "test": "npm run system-test",
    "e2e-test": "samples test deploy"
  },

App.yaml (डिफ़ॉल्ट-ट्यूटोरियल से कोई परिवर्तन नहीं)

runtime: nodejs
env: flex

आपको बिलिंग के लिए सहायता के लिए GCP समर्थन से संपर्क करना चाहिए: support.google.com/cloud/contact/cloud_platform_billing
BrettJ

4
प्रतिक्रिया के लिए धन्यवाद @BrettJ, मैंने पहले ही उनसे संपर्क किया था और यह उन्होंने मुझे बताया था: "जैसा कि उल्लेख किया गया है, हमारे पास उपयोग की विस्तृत रिपोर्ट देखने की कोई क्षमता नहीं है, इसलिए मैंने लिंक प्रदान किए हैं ताकि आप भी पोस्ट कर सकें। सामुदायिक मंच पर और फिर से अनुभवी डेवलपर्स आपके तकनीकी प्रश्नों में आपकी सहायता कर सकते हैं। "
ddallala

2
आपकी उम्मीदें मानक एनवी मूल्य निर्धारण (और केवल बी 1 क्लास उदाहरण) के आधार पर दिखाई देती हैं। लेकिन आप फ्लेक्स एनवी - अलग मूल्य निर्धारण का उपयोग कर रहे हैं। सीपीयू और GB के मेमोरी कॉन्फिगर के लिए अपने app.yaml की जांच करें - वे आपके प्रति घंटे के घंटे के गुणक हैं। फिर आप 2 से गुणा करें - आपके द्वारा चलाए जा रहे उदाहरणों की संख्या।
बजे डैन कॉर्निलेस्कु

हाय @DanCornilescu मूल्य निर्धारण अभी भी फ्लेक्स एनवीएस के लिए ~ $ 0.0.5 पर है ... vCPU प्रति घंटा घंटे $ 0.0526 (आयोवा)। मैं अपने app.yaml चिपकाया ... संक्षेप में, यह ट्यूटोरियल से संशोधित नहीं किया।
ddallala

1
ठीक है, अब आपके पास GCP बिलिंग सहायता के लिए संवाद करने के लिए beter datapoints हैं।
डैन कॉर्निलेस्कु

जवाबों:


174

Google के साथ कई बार आगे-पीछे होने के बाद, और घंटों ब्लॉग पढ़ने और रिपोर्ट देखने के बाद, मैंने आखिरकार (कुछ) जो हुआ उसके लिए स्पष्टीकरण पाया। मैं इसे अपने सुझावों के साथ यहां पोस्ट करूंगा ताकि अन्य लोग भी इस समस्या के शिकार न हों।

ध्यान दें, यह कुछ के लिए स्पष्ट लग सकता है, लेकिन एक नए GAE उपयोगकर्ता के रूप में, यह सब मेरे लिए बिल्कुल नया था।

संक्षेप में, जब जीएई को तैनात किया जाता है और निम्नलिखित कमांड " $ gcloud एप्लिकेशन को तैनात करता है " का उपयोग करते हुए , यह एक नया संस्करण बनाता है और इसे डिफ़ॉल्ट के रूप में सेट करता है, लेकिन यह भी और अधिक महत्वपूर्ण बात, यह पिछले संस्करण को नहीं हटाता है जो तैनात किया गया था।

संस्करणों और उदाहरणों के बारे में अधिक जानकारी यहां देखी जा सकती है: https://cloud.google.com/appengine/docs/standard/python/an-overview-of-app-engine

तो मेरे मामले में, इसे जाने बिना, मैंने अपने सरल नोड ऐप के कई संस्करण बनाए थे। एक त्रुटि के बाद स्विच करने की आवश्यकता होने पर ये संस्करण अभी भी चल रहे हैं। लेकिन इन संस्करणों के लिए भी उदाहरणों की आवश्यकता होती है, और डिफ़ॉल्ट, जब तक कि app.yaml में नहीं कहा जाता है, 2 उदाहरण हैं।

Google कहता है:

डिफ़ॉल्ट रूप से ऐप इंजन लोड से मिलान करने के लिए ऊपर और नीचे चलने वाले इंस्टेंस की संख्या को मापता है, इस प्रकार निष्क्रिय उदाहरणों को कम करते हुए और इस प्रकार लागत को कम करते हुए आपके ऐप के लिए लगातार प्रदर्शन प्रदान करता है।

हालांकि, मेरे अनुभव से, यह मामला नहीं था। जैसा कि मैंने पहले कहा था, मैंने अपने नोड ऐप को नोडमोन के साथ धकेल दिया था जो ऐसा लगता है कि त्रुटियां पैदा कर रहा था।

अंत में, ट्यूटोरियल का अनुसरण करते हुए और परियोजना को बंद नहीं करने पर, मेरे पास 4 संस्करण थे, जिनमें से प्रत्येक में 2 उदाहरण 1.5 महीने के लिए पूर्णकालिक चल रहे थे, 0 अनुरोधों को पूरा करने और बहुत सारे त्रुटि संदेश उत्पन्न करने और मुझे $ 500 का खर्च आया।

यदि आप चाहते हैं कि आप केवल एनईएल फ्लेक्स ईएनवी का उपयोग करना चाहते हैं:

  1. सबसे पहले और सबसे पहले, बिलिंग बजट और अलर्ट सेट करें ताकि आप अपने चालान के लिए स्वचालित रूप से चार्ज किए गए महंगे चालान से आश्चर्यचकित न हों: https://cloud.google.com/billing/docs/how-to/budgets

  2. एक परीक्षण एनवी में, आपको सबसे अधिक संभावना है कि कई संस्करणों की आवश्यकता नहीं है, इसलिए निम्नलिखित कमांड का उपयोग करते समय तैनात करें:
    $ gcloud app deploy --version v1

  3. अपने ऐप को अपडेट करें। केवल न्यूनतम संसाधनों के साथ 1 उदाहरण के लिए बाध्य करें:

runtime: nodejs
env: flex

# This sample incurs costs to run on the App Engine flexible environment.
# The settings below are to reduce costs during testing and are not appropriate
# for production use. For more information, see:
# https://cloud.google.com/appengine/docs/flexible/nodejs/configuring-your-app-with-app-yaml
manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10
  1. दैनिक खर्च सीमा निर्धारित करें

यहां छवि विवरण दर्ज करें

अधिक जानकारी के लिए इस ब्लॉग पोस्ट को देखें: https://medium.com/google-cloud/three-simple-steps-to-save-costs-when-prototyping-with-app-engine-flexible-environment-104fc6736495

मैं चाहता हूं कि इनमें से कुछ चरणों को ट्यूटोरियल में शामिल किया गया था ताकि उन लोगों की रक्षा की जा सके जो सीखने और प्रयोग करने की कोशिश कर रहे हैं, लेकिन यह नहीं था।

यदि कोई इन सभी विवरणों को नहीं जानता है तो Google App Engine Flex env मुश्किल हो सकता है। एक दोस्त ने मुझे हेरोकू की ओर इशारा किया, जिसमें मूल्य निर्धारण और फ्री / हॉबी ऑफर दोनों हैं। मैं जल्दी से वहाँ एक नया नोड एप्लिकेशन पुश करने में सक्षम था, और यह आकर्षण की तरह काम किया! https://www.heroku.com/pricing

इस पाठ को सीखने के लिए मुझे "केवल" $ 500 का खर्च आया, लेकिन मुझे उम्मीद है कि इससे दूसरों को Google App Engine Flex Env ​​को देखने में मदद मिलेगी।


58
लगता है कि वास्तव में Google घटिया प्रलेखन पर बाजार में कब्जा कर लिया है। यह दुर्भाग्यपूर्ण है कि आपको $ 500 बिल के साथ थप्पड़ मारा गया, लेकिन आपने कई अन्य लोगों के लिए गोली ले ली है, मुझे यकीन है कि आपकी अंतर्दृष्टि की पेशकश करके, बहुत सराहना की जाएगी!
द्राज़न बेज़ेलोवुक

10
एक और संभावना "gcloud ऐप परिनियोजित app.yaml --stop-last-version"
DeividasV

2
धन्यवाद, बहुत मददगार। बिलिंग अलर्ट / सीमाएँ आवश्यक हैं। इसी तरह के एक मुद्दे का सामना हाल ही में
कार्तिक

1
यह निश्चित रूप से सबसे सस्ता तरीका नहीं है, क्योंकि यह लगातार एकल उदाहरण चलाएगा। कृपया मेरा उत्तर देखें
कनेर

क्या हम संभावित रूप से AppEngine standard env के साथ उसी बुरे आश्चर्य की उम्मीद कर सकते हैं? या ओपी का उल्लेख केवल फ्लेक्स एनवी में होता है?
जॉन डोए

16

हमारे पास GAE FE पर जाने वाले कोड एक कैस्केडिंग, घातीय विफलता (बाउंस किए गए ईमेल बाउंस किए गए ईमेल ईमेल आदि) के कारण बिल्कुल पागल हो गए थे और हम जीएई इंस्टेंसेस को बंद नहीं कर सकते थे जो कि खराब थे। 4+ घंटे के बाद, और 1M + ईमेल भेजे गए (Mailgun ने हमें खाते को निष्क्रिय नहीं करने दिया। यह कहा कि "कृपया प्रभाव में जाने के लिए पासवर्ड बदलने के लिए 24 घंटे तक प्रतीक्षा करें", और एपीआई कुंजियों को निरस्त करने से कुछ नहीं हुआ), redis VM रोक दिया गया था, डीबी डाउन, और साइट के सभी कोड एक "डाउन फॉर मेंटेनेंस" स्टैटिक 503 पेज पर घट गए, जो ईमेल भेजे गए थे।

मैंने निर्धारित किया है कि GAE FE बस या तो docker VMs या Cloud Compute VMs (redis) को समाप्त नहीं करता है जो CPU लोड के अंतर्गत आता है। शायद कभी नहीं! एक बार जब हमने वास्तव में कंप्यूट वीएम ("केवल" इसे रोकने के बजाय) को हटा दिया, तो ईमेल तुरंत बंद हो गए।

लेकिन, हमारा डीबी 2% से अधिक घंटों के लिए "ईमेल नहीं भेज सका" के साथ भरा होना जारी रहा, जीएई ऐप के 100% संस्करणों और "स्टॉप" होने के उदाहरणों के बावजूद। मैंने Google क्लाउड SQL पासवर्ड बदलने के लिए समाप्त कर दिया है।

हम बिल की जाँच करते रहे, और 7 बदमाश इंस्टालेशन सीपीयू का उपयोग करते रहे और इसलिए हमने उस खाते में उपयोग किए गए कार्ड को रद्द कर दिया, और साइट ने वास्तव में, जब बिल बकाया था, तो नीचे चले गए, लेकिन बदमाश ने ऐसा किया। हम कभी भी जीएई ईमेल समर्थन के साथ स्थिति को हल करने में सक्षम नहीं थे।


अब जब मैंने बहुत पहले उस कंपनी को छोड़ दिया है, तो मैं आपको बता सकता हूं कि मासिक बिल कुछ $ 5,000 का था, सामान्य तौर पर लगभग $ 300।
थियोडोर आर। स्मिथ

मैंने पिछले कुछ वर्षों से GCP और AWS का उपयोग किया है, और इस तरह की कहानियां मुझे हर बार AWS की बाहों में चिल्लाते हुए भागना चाहती हैं। जीसीपी के प्रलेखन और त्रुटि जाँच में छेद विकट हैं - सुधार, लेकिन फिर भी मनहूस। यह एक कारण से सस्ता है। उस ने कहा, मैं एक ऐप को
जीएई के

यदि आपके पास GCP के साथ गंभीर समस्या है, तो Google पर किसी के भी संपर्क में आना सचमुच असंभव है। हमने महीनों से कोशिश की कि उन्हें स्थाई अस्थिरता के मुद्दों के बारे में संपर्क करना चाहिए। नही जाओ।
थियोडोर आर। स्मिथ

मैं उनके तकनीकी समर्थन के साथ ठीक है, लेकिन मेरी कंपनी भी एक समर्थन खाते के लिए भुगतान करता है, soooo
ingernet

16

यदि आप अपनी GAE लागत को कम करना चाहते हैं तो कृपया इस लेख या सुझाए गए उत्तर में सुझाए अनुसार उपयोग करें !manual_scaling

Google ऐप इंजन के बारे में सुंदर बात यह है कि यह मांग के आधार पर मिलीसेकंड के भीतर सैकड़ों मशीनों को स्केल कर सकता है। और आप केवल उन उदाहरणों के लिए भुगतान करते हैं जो चल रहे हैं।

अपनी लागतों का अनुकूलन करने में सक्षम होने के लिए आपको विभिन्न स्केलिंग विकल्पों और उदाहरण प्रकारों को समझने की आवश्यकता है:

1. ऐप इंजन फ्लेक्स बनाम मानक:

अंतर के बारे में विवरण यहाँ पाया जा सकता है , लेकिन इस प्रश्न के लिए प्रासंगिक एक महत्वपूर्ण अंतर है:

[मानक] मुफ्त या बहुत कम लागत पर चलाने का इरादा है, जहां आप केवल उसी चीज का भुगतान करते हैं जो आपको चाहिए और जब आपको इसकी आवश्यकता होती है। उदाहरण के लिए, ट्रैफ़िक नहीं होने पर आपका एप्लिकेशन 0 इंस्टेंस पर स्केल हो सकता है।

2. स्केलिंग विकल्प:

  • स्वचालित स्केलिंग: Google आपके द्वारा प्रदान की गई मांग और कॉन्फ़िगरेशन के आधार पर आपके ऐप को स्केल करेगा।
  • मैनुअल स्केलिंग: कोई स्केलिंग बिल्कुल नहीं, GAE आपके द्वारा पूछे गए उदाहरणों का सटीक रूप से चलेगा, हर समय (बहुत भ्रामक नामकरण)
  • बेसिक स्केलिंग: यह आपके द्वारा निर्धारित की गई सीमा को पूरा करेगा और निश्चित समय के बाद कम हो जाएगा

3. उदाहरण के प्रकार: 2 उदाहरण प्रकार होते हैं , और वे मूल रूप से उस समय में भिन्न होते हैं जो एक नए उदाहरण को स्पिन करने के लिए लेता है। एफ क्लास इंस्टेंसेस (ऑटोमैटिक स्केलिंग में इस्तेमाल) बनाया जा सकता है जब ~ 0.7 सेकंड के भीतर और बी क्लास इंस्टेंसेस (मैन्युअल स्केलिंग / बेसिक में इस्तेमाल) ~ 0.7 सेकंड के भीतर की जरूरत हो: यहां छवि विवरण दर्ज करें

यहां छवि विवरण दर्ज करें

अब जब आप मूल बातें समझ गए हैं तो स्वीकार किए गए उत्तर पर वापस जाते हैं:

manual_scaling:
  instances: 1
resources:
  cpu: 1
  memory_gb: 0.5
  disk_size_gb: 10

यह क्या निर्देश देता है कि GAE हर समय एक कस्टम इंस्टेंस क्लास ( अधिक महंगा ) चलाता है । स्पष्ट रूप से यह सबसे सस्ता विकल्प नहीं है क्योंकि बी 1 / एफ 1 इंस्टेंस टाइप को इसके बजाय इस्तेमाल किया जा सकता है (इसमें कम स्पेक्स हैं) और यह लगातार एक इंस्टेंस चल रहा है।

जब कोई ट्रैफ़िक न हो तो इंस्टेंस को बंद करना सबसे सस्ता क्या होगा । अगर आपको इस समय के साथ ~ 0.1 सेकंड स्पिन अप का मन नहीं है, तो आप इसके साथ जा सकते हैं:

instance_class: F1
automatic_scaling:
  max_instances: 1 (--> you can adjust this as you wish)
  min_instances: 0 (--> will scale to 0 when there is no traffic so won't incur costs)

यह मुफ्त कोटा Google प्रदान के भीतर गिर जाएगा और यदि आपके पास कोई वास्तविक ट्रैफ़िक नहीं है तो यह आपको कुछ भी खर्च नहीं करना चाहिए।

पुनश्च: यदि आप कुछ चलाना भूल गए हैं या आपके पास कुछ महंगी सेटिंग्स हैं, तो दैनिक खर्च सीमा निर्धारित करना अत्यधिक अनुशंसित है।


2
आप min_instances0. प्रति प्रलेखन पर सेट नहीं कर सकते हैं :The minimum number of instances given to your service. When a service is deployed, it is given this many instances and scales according to traffic. Must be 1 or greater, default is 2 to reduce latency.
yorbro 13

3
@yorbro कि बाहर इशारा करने के लिए धन्यवाद, min_instances मानक पर्यावरण के लिए है, आपके द्वारा जोड़ा गया दस्तावेज़ विभिन्न पैरामीटर को संदर्भित करता है min_num_instances जो फ्लेक्स पर्यावरण के लिए है। मैं अपने उत्तर को स्पष्ट रूप से प्रतिबिंबित करने के लिए अपडेट करूंगा।
कनेर

आह मेरी बुर। जल्दी जवाब देने का शुक्रिया!
योरब्रुक

Min_instances के लिए दस्तावेज़ीकरण में चेतावनी कहा गया है: इस सुविधा को ठीक से काम करने के लिए, आपको यह सुनिश्चित करना होगा कि वार्मअप अनुरोध सक्षम हैं और आपका एप्लिकेशन वार्मअप अनुरोधों को संभालता है। क्या यह सक्षम होना चाहिए? यदि इसे लागू नहीं किया गया तो यह विलंबता का क्या प्रभाव डालेगा? मैं एक ऐसे ऐप के लिए अपनी चल रही लागत को कम करने की कोशिश कर रहा हूं जिसमें लगभग 600 उपयोगकर्ता हैं इसलिए मैं यह पता लगाने की कोशिश कर रहा हूं कि सर्वश्रेष्ठ स्केलिंग सेटिंग्स क्या हैं।
पीट नीस

यह चेतावनी नई प्रतीत होती है, मैंने इसे पहले नहीं देखा है। कहा जा रहा है, प्रदर्शन प्रभाव के बारे में पता नहीं है। यहाँ विवरण: Cloud.google.com/appengine/docs/standard/python/…
Caner

4

यह भी ध्यान दें कि यदि आप अभी भी चाहते हैं कि आपके ऐप में स्वचालित स्केलिंग हो, लेकिन आप हर समय चलने वाले न्यूनतम 2 इंस्टेंस को नहीं चाहते हैं, तो आप अपने ऐप को कॉन्फ़िगर कर सकते हैं।

runtime: nodejs
env: flex
automatic_scaling:
  min_num_instances: 1

मुझे लगता है कि आपका मतलब है max_num_instances?
डॉमिनिक

4
उदाहरणों को सीमित करने का कोई विकल्प नहीं है। डीडीओएस हमले के दौरान 1,000 उदाहरणों को स्पिन करना और ग्राहक को $ डॉलर का बिल देना GCP की एक व्यावसायिक रणनीति है।
थियोडोर आर। स्मिथ

2
@ TheodoreR.Smith वास्तव में अधिकतम के साथ आप एक दैनिक सीमा भी निर्धारित कर सकते हैं
zardilior

3
@ डंडिक min_num_instancesयहाँ सही है अगर आप अतिरेक की कीमत पर निष्क्रिय रहते हुए पैसे बचाना चाहते हैं। @ थियोडोर में भी इंस्टेंस को सीमित करने के लिए मैक्सिमम_स्टेंस हैं , लेकिन आप ऐप इंजन पर दैनिक खर्च सीमा को लचीला नहीं रख सकते (लेकिन आप मानक पर कर सकते हैं)। हालाँकि आप बजट और अलर्ट सेट कर सकते हैं।
jon_wu

3

चूंकि किसी ने भी उल्लेख नहीं किया है, यहां संस्करणों से संबंधित gcloud कमांड हैं

# List all versions
$ gcloud app versions list

SERVICE  VERSION.ID       TRAFFIC_SPLIT  LAST_DEPLOYED              SERVING_STATUS
default  20200620t174631  0.00           2020-06-20T17:46:56+03:00  SERVING
default  20200620t174746  0.00           2020-06-20T17:48:12+03:00  SERVING
default  prod             1.00           2020-06-20T17:54:51+03:00  SERVING

# Delete these 2 versions (you can't delete all versions, you have to have at least one remaining)
$ gcloud app versions delete 20200620t174631 20200620t174746

# Help
$ gcloud app versions --help

0

देव वातावरण के लिए जहां मुझे थोड़ी विलंबता नहीं है, मैं निम्नलिखित सेटिंग्स का उपयोग कर रहा हूं:

instance_class: B1
basic_scaling:
  max_instances: 1
  idle_timeout: 1m

और यदि आप अपने उदाहरण का उपयोग फ्री बैकएंड उदाहरण भत्ता से अधिक करते हैं तो यह कोशिश करें:

instance_class: F1
automatic_scaling:
  max_instances: 1

यह AppEngine डैशबोर्ड है, इंस्टेंस देखें, प्रारंभ समय पर ध्यान दें, और यह सुनिश्चित करने के लिए देखें कि निष्क्रिय_समय अवधि बीतने के बाद इंस्टेंस काउंट ड्रॉप शून्य हो गया है और आप संदेश देखते हैं "इस संस्करण में कोई इंस्टेंस नहीं है"।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.