Google App Engine Flexible 환경의 가격, $ 500 강의


103

App Engine Flexible env 튜토리얼 @ : https://cloud.google.com/nodejs/getting-started/hello-world 에서 Nodejs를 따랐습니다.

튜토리얼을 성공적으로 배포하고 테스트 한 후 코드를 약간 변경하여 성공적으로 배포 한 다음 테스트 환경 (공개 아님)이므로 계속 실행했습니다.

한 달 후 Google로부터 370 달러가 넘는 청구서를 받았습니다!

거래 세부 정보에서 다음을 확인합니다.

2017 년 10 월 1 일 ~ 31 일 App Engine Flex 인스턴스 RAM : 5948.774 Gibibyte-hours ([MYPROJECT]) $ 42.24

2017 년 10 월 1 일 ~ 31 일 App Engine Flex 인스턴스 코어 시간 : 5948.774 시간 ([MYPROJECT]) $ 312.91

거의 요청이 거의없는이 테스트 환경에 약 6,000 시간의 리소스가 필요한 이유는 무엇입니까? 최악의 경우 한 달 동안 풀 타임으로 720 시간을 실행하는 데 시간당 $ 0.05의 비용이 40 달러라고 가정했을 것입니다. https://cloud.google.com/appengine/pricing

누군가 이것에 대해 밝힐 수 있습니까? 왜 그렇게 많은 자원이 필요한지 알 수 없었습니까?

도와 주셔서 감사합니다!

더 많은 데이터의 경우 지난 달 트래픽 (기본적으로 0)입니다. 교통 데이터

그리고 인스턴스 데이터인스턴스 데이터

업데이트 : package.json에 한 가지 수정 사항을 적용했습니다. nodemon을 종속성으로 추가하고 "nmp start"스크립트의 일부로 추가했습니다. 이것이 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 2017

4
@BrettJ에 대한 답장에 감사드립니다. 저는 이미 그들에게 연락을했고 다음과 같이 말했습니다. "언급했듯이 우리는 사용에 대한 자세한 보고서를 볼 수있는 능력이 없기 때문에 링크를 제공하여 게시 할 수도 있습니다. 커뮤니티 포럼에는 숙련 된 개발자가 기술 질문에 도움을 줄 것입니다. "
ddallala 2017

2
표준 환경 가격 책정 (및 B1 클래스 인스턴스 만)을 기준으로 기대치가 나타납니다. 그러나 flex env를 사용하고 있습니다-다른 가격. app.yaml에서 CPU 및 메모리 구성 GB를 확인하세요. 인스턴스 당 시간 승수입니다. 그런 다음 실행중인 인스턴스 수인 2를 곱합니다.
Dan Cornilescu

안녕하세요 @DanCornilescu 가격은 flex envs의 경우에도 여전히 ~ $ 0.0.5입니다. 코어 시간당 vCPU $ 0.0526 (아이오와). 내 app.yaml을 붙여 넣었습니다 ... 간단히 튜토리얼에서 수정하지 않았습니다.
ddallala

1
이제 GCP 결제 지원과 통신 할 더 나은 데이터 포인트가 있습니다.
Dan Cornilescu 2017

답변:


175

구글과 여러 번왔다 갔다하고 몇 시간 동안 블로그를 읽고 보고서를보고 마침내 (다소) 무슨 일이 일어 났는지에 대한 설명을 찾았습니다. 다른 사람들도이 문제의 희생양이되지 않도록 제 제안과 함께 여기에 게시하겠습니다.

일부 사람들에게는 이것이 분명해 보일 수 있지만, 새로운 GAE 사용자로서이 모든 것이 저에게 새로운 것이 었습니다.

간단히 말해서 GAE에 배포하고 다음 명령어 ' $ gcloud app deploy '를 사용하면 새 버전을 만들고 기본값으로 설정하지만 더 중요한 것은 배포 된 이전 버전을 제거하지 않는다는 것입니다.

버전 및 인스턴스에 대한 자세한 정보는 https://cloud.google.com/appengine/docs/standard/python/an-overview-of-app-engine 에서 확인할 수 있습니다.

그래서 제 경우에는 모르는 사이에 간단한 노드 앱의 여러 버전을 만들었습니다. 이러한 버전은 오류가 발생한 후 전환해야하는 경우를 대비하여 계속 실행됩니다. 그러나 이러한 버전에는 인스턴스도 필요하며 app.yaml에 명시되지 않는 한 기본값은 2 개의 인스턴스입니다.

구글 말한다 :

기본적으로 App Engine은 부하에 맞게 실행되는 인스턴스 수를 확장하고, 따라서 항상 앱에 일관된 성능을 제공하는 동시에 유휴 인스턴스를 최소화하여 비용을 절감합니다.

그러나 내 경험으로는 그렇지 않았습니다. 앞서 말했듯이 오류를 일으키는 것으로 보이는 nodemon으로 노드 앱을 푸시했습니다.

결국 튜토리얼을 따라 프로젝트를 종료하지 않고 각각 1.5 개월 동안 풀 타임으로 실행되는 2 개의 인스턴스가 0 개의 요청을 처리하고 많은 오류 메시지를 생성하는 4 개의 버전이 있었고 비용은 500 달러였습니다.

GAE FLEX ENV를 계속 사용하려는 경우 권장 사항 :

  1. 가장 먼저 CC에 자동으로 청구되는 비싼 인보이스에 놀라지 않도록 결제 예산 및 알림을 설정하세요. https://cloud.google.com/billing/docs/how-to/budgets

  2. 테스트 환경에서는 여러 버전이 필요하지 않을 가능성이 높으므로 배포하는 동안 다음 명령을 사용하십시오.
    $ gcloud app deploy --version v1

  3. 최소한의 리소스로 인스턴스 1 개만 강제하도록 app.yaml 을 업데이트합니다 .

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 환경은 이러한 세부 정보를 모두 알지 못하는 경우 까다로울 수 있습니다. 한 친구가 가격 책정과 무료 / 취미 혜택이 모두있는 Heroku를 알려주었습니다. 거기에 새로운 노드 앱을 빠르게 밀어 넣을 수 있었는데, 정말 매력적이었습니다! https://www.heroku.com/pricing

이 강의를 배우는 데 "단지"500 달러가 들었지만 Google App Engine Flex Env를 보는 다른 사람들에게 도움이되기를 바랍니다.


60
구글은 정말 형편없는 문서에 시장을 몰고있는 것 같다. 당신이 500 달러 지폐를 쳐서 안타깝게도, 당신은 많은 다른 사람들에게 총알을 뽑았고 당신의 통찰력을 제공함으로써 정말 감사합니다!
Drazen Bjelovuk

10
또 다른 가능성 "gcloud 응용 프로그램 배포 애플리케이션 제목을 --stop-이전 버전"
DeividasV

2
감사합니다, 매우 도움이되었습니다. 결제 알림 / 한도는 필수입니다. 최근에 비슷한 문제에 직면
Kartik

1
이것은 단일 인스턴스를 지속적으로 실행하기 때문에 가장 저렴한 방법은 아닙니다. 내 대답을 참조하십시오
Caner

AppEngine 표준 환경에서 똑같이 나쁜 놀라움을 기대할 수 있습니까? 아니면 언급 된 OP 문제가 flex env에서만 발생합니까?
John Doe

17

GAE 비용을 줄이려면 이 기사 에서 제안한대로 또는 허용 된 답변을 사용 하지 마십시오 !manual_scaling

Google App Engine의 멋진 점은 수요에 따라 밀리 초 내에 수백 대의 머신으로 확장 및 축소 할 수 있다는 것입니다. 그리고 실행중인 인스턴스에 대해서만 비용을 지불합니다.

비용을 최적화하려면 다양한 확장 옵션과 인스턴스 유형을 이해해야합니다.

1. 앱 엔진 플렉스 vs 표준 :

차이점에 대한 자세한 내용은 여기 에서 찾을 수 있지만이 질문과 관련된 중요한 차이점은 다음과 같습니다.

[Standard is] 무료 또는 매우 저렴한 비용으로 실행하도록되어 있으며 필요한 항목과 필요할 때만 지불하면됩니다. 예를 들어 애플리케이션은 트래픽이 없을 때 인스턴스를 0 개로 확장 할 수 있습니다.

2. 확장 옵션 :

  • 자동 확장 : Google은 사용자가 제공 한 수요와 구성에 따라 앱을 확장합니다.
  • 수동 확장 : 확장이 전혀 없으며 GAE는 사용자가 요청한 정확한 인스턴스 수를 항상 실행합니다 (매우 잘못된 이름 지정).
  • 기본 확장 : 설정 한 한도까지 확장되며 일정 시간이 지나면 축소됩니다.

3. 인스턴스 유형 : 2 개의 인스턴스 유형 이 있으며 기본적으로 새 인스턴스를 가동하는 데 걸리는 시간이 다릅니다. F 클래스 인스턴스 (자동 스케일링에 사용)는 ~ 0.1 초 이내에 필요가있을 때 생성되고 B 클래스 인스턴스 (수동 스케일링 / 기본에 사용)는 ~ 0.7 초 이내에 생성 될 수 있습니다. 여기에 이미지 설명 입력

여기에 이미지 설명 입력

이제 기본 사항을 이해 했으므로 수락 된 답변으로 돌아가 보겠습니다.

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

이것이 GAE에 지시하는 것은 항상 사용자 정의 인스턴스 클래스 ( 더 많은 비용이 드는 ) 를 실행하는 것입니다. B1 / F1 인스턴스 유형을 대신 사용할 수 있고 (스펙이 낮음) 인스턴스를 지속적으로 실행하기 때문에 이것은 분명히 가장 저렴한 옵션이 아닙니다.

어떤 것은 저렴한는 트래픽이없는 경우 인스턴스를 해제하는 것입니다. ~ 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

4
@yorbro min_instances 는 표준 환경에 대한 것임을 지적 해 주셔서 감사 합니다. 링크 한 문서 min_num_instances 는 플렉스 환경에 대한 다른 매개 변수 를 참조 합니다. 나는 이것을 명확하게 반영하기 위해 내 답변을 업데이트 할 것입니다.
Caner

아, 이런. 빠른 답변 감사합니다!
yorbro

min_instances에 대한 문서에서 경고 :이 기능이 제대로 작동하려면 준비 요청이 활성화되어 있고 애플리케이션이 준비 요청을 처리하는지 확인해야합니다. 이 기능을 활성화해야합니까? 이것이 구현되지 않으면 지연 시간에 어떤 영향을 미칠까요? 약 600 명의 사용자가있는 앱의 실행 비용을 줄이려고 노력하고 있으므로 최상의 확장 설정이 무엇인지 알아 보려고합니다.
Pete Nice

그 경고는 새로운 것처럼 보이지만 전에는 본 적이 없습니다. 즉, 성능 영향에 대해 알지 못합니다. 자세한 내용은 여기를 참조하세요. cloud.google.com/appengine/docs/standard/python/…
Caner

16

우리는 GAE FE에 배포 된 코드가 계단식, 기하 급수적 실패 (반송 된 이메일이 반송 된 이메일 이메일을 생성하는 등)로 인해 완전히 미치게되었고 버그가 발생한 GAE 인스턴스를 끌 수 없었습니다. 4 시간 이상 및 100 만 개 이상의 이메일이 전송 된 후 (Mailgun은 계정을 비활성화 할 수 없습니다. "비밀번호 변경이 적용 되려면 최대 24 시간을 기다려주세요."라고 표시되고 API 키를 취소해도 아무 작업도 수행되지 않음) redis VM 중지되고 DB가 다운되고 모든 사이트의 코드가 단일 "유지 관리를위한 다운"정적 503 페이지로 축소됨) 이메일이 계속 전송되었습니다.

GAE FE는 단순히 CPU 부하를받는 도커 VM 또는 클라우드 컴퓨팅 VM (redis)을 종료하지 않는다는 것을 확인했습니다. 아마 절대! 실제로 Compute VM을 삭제하면 ( "단순"중지하는 대신) 이메일이 즉시 중지되었습니다.

그러나 GAE 앱이 버전 및 인스턴스의 100 %가 "중지"된 것으로보고 했음에도 불구하고 DB는 최대 2 시간 동안 "이메일을 보낼 수 없음"알림으로 계속 채워졌습니다. 결국 Google Cloud SQL 비밀번호를 변경해야했습니다.

우리는 청구서를 계속 확인했고 7 개의 불량 인스턴스가 CPU를 계속 사용했기 때문에 해당 계정에 사용 된 카드를 취소했고 실제로 청구서가 연체되었을 때 사이트가 다운되었지만 불량 인스턴스도 마찬가지였습니다. GAE 이메일 지원으로 상황을 해결할 수 없었습니다.


오래 전에 그 회사를 떠났으므로 월 청구서가 약 $ 5,000, 일반적으로 약 $ 300에 해당한다고 말할 수 있습니다.
Theodore R. Smith

저는 지난 몇 년 동안 GCP와 AWS를 사용해 왔으며, 이와 같은 이야기로 인해 전 시간적으로 AWS의 팔에 비명을 지르고 싶습니다. GCP 문서 및 오류 검사의 허점은 비참합니다. 개선되지만 여전히 비참합니다. 이유가있어서 싸다. 즉, GAE에 앱을 배포하려고합니다. 맥주를 마시
세요

GCP에 심각한 문제가있는 경우 Google의 누구에게나 연락하는 것은 말 그대로 불가능합니다. 우리는 심각한 불안정성 문제에 대해 몇 달 동안 연락을 취했습니다. 안돼.
Theodore R. Smith

기술 지원은 괜찮 았지만 우리 회사도 지원 계정에 대한 비용을 지불합니다. soooo
ingernet

4

또한 앱에 자동 확장 기능이 있지만 기본 최소 2 개의 인스턴스가 항상 실행되는 것을 원하지 않는 경우 다음과 같이 app.yaml을 구성 할 수 있습니다.

runtime: nodejs
env: flex
automatic_scaling:
  min_num_instances: 1

내 생각 엔 max_num_instances?
Dominic

4
인스턴스를 제한하는 옵션은 확실히 없습니다. DDoS 공격 중에 인스턴스 1,000 개를 가동하고 고객에게 $ 1,000 달러를 청구하는 것은 GCP의 비즈니스 전략입니다.
Theodore R. Smith

2
@ TheodoreR.Smith 실제로 당신이 할 수있는 최대 및도 일일 한도 설정과 함께
zardilior

3
중복성을 희생 min_num_instances하면서 유휴 상태에서 돈을 절약하려는 경우 @Dominic 이 정확합니다. @Theodore 인스턴스를 제한하는 max_num_instances 도 있지만 App Engine flexible에 일일 지출 한도를 설정할 수는 없지만 표준에서는 가능합니다. 그러나 예산 및 알림을 설정할 수 있습니다.
jon_wu

4

아무도 언급하지 않았으므로 다음은 버전과 관련된 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

1

약간의 지연 시간을 신경 쓰지 않는 개발 환경의 경우 다음 설정을 사용하고 있습니다.

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

무료 백엔드 인스턴스 허용량보다 더 많이 인스턴스를 사용하는 경우 다음을 시도하십시오.

instance_class: F1
automatic_scaling:
  max_instances: 1

AppEngine 대시 보드에서 인스턴스를 관찰하고 시작 시간을 기록한 다음 idle_timeout 기간이 지나면 인스턴스 수가 0으로 떨어지고 "이 버전에는 배포 된 인스턴스가 없습니다."라는 메시지가 표시되는지 확인합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.