programing

Google App Engine Flexible env 가격 책정, $500 교육

newsource 2023. 7. 29. 08:29

Google App Engine Flexible env 가격 책정, $500 교육

App Engine Flexible env 튜토리얼에서 Nodejs를 팔로우했습니다. https://cloud.google.com/appengine/docs/flexible/nodejs/create-app

튜토리얼을 성공적으로 배포하고 테스트한 후 코드를 조금 실험적으로 변경하여 성공적으로 배포했습니다...테스트 환경(공용이 아님)이었기 때문에 실행 상태를 유지했습니다.

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

트랜잭션 세부 정보에 다음이 표시됩니다.

2017년 10월 1일부터 31일까지 앱 엔진 Flex 인스턴스 RAM: 5948.774 Gibyte-hours ([MY PROJECT]) $42.24

2017년 10월 1일부터 31일까지 앱 엔진 Flex 인스턴스 코어 시간: 5948.774시간([MY PROJECT]) $312.91

거의 0개의 요청이 있는 이 테스트 환경에서 어떻게 약 6,000시간의 리소스가 필요했습니까?최악의 경우, 한 달 동안 720시간을 풀타임으로 @ 시간당 $0.05를 실행하면 ~40달러의 비용이 든다고 가정했을 것입니다. https://cloud.google.com/appengine/pricing

누가 이것을 밝히는 것을 도와줄 수 있습니까?왜 이렇게 많은 리소스가 필요한지 알 수 없었습니다.

도와주셔서 감사합니다!

추가 데이터의 경우 지난 한 달 동안의 트래픽입니다(기본적으로 0).

인스턴스Instance Data 데이터

업데이트: 패키지에 한 가지 수정 사항을 가져왔습니다.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

구글과 여러 번 오가며 몇 시간 동안 블로그를 읽고 보고서를 본 후에, 저는 마침내 무슨 일이 일어났는지에 대한 설명을 찾았습니다.다른 사람들도 이 문제의 희생양이 되지 않도록 저의 제안과 함께 여기에 올리겠습니다.

일부에서는 이 모든 것이 명백하게 보일 수 있지만, GAE의 새로운 사용자로서 이 모든 것이 저에게는 전혀 새로운 것이었습니다.

즉, GAE에 배포하고 다음 명령 "$gcloud app deploy"를 사용하면 새 버전을 생성하여 기본값으로 설정하지만, 더 중요한 것은 배포된 이전 버전을 제거하지 않는다는 것입니다.

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

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

Google의 설명:

App Engine은 기본적으로 실행 중인 인스턴스의 수를 로드에 맞게 조정하여 항상 일관된 성능을 제공하는 동시에 유휴 인스턴스를 최소화하여 비용을 절감합니다.

하지만 제 경험으로는 그렇지 않았습니다.아까 말씀드렸듯이 노드 앱을 오류가 발생한 것처럼 보이는 데모 없이 눌렀어요.

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

여전히 GAE FLEX ENV를 사용하려는 경우 권장 사항:

  1. 무엇보다도, 자동으로 CC에 청구되는 비싼 송장에 놀라지 않도록 청구서 예산과 경고를 설정하십시오. https://cloud.google.com/billing/docs/how-to/budgets

  2. 테스트 환경에서는 대부분 여러 버전이 필요하지 않으므로 배포하는 동안 다음 명령을 사용합니다.
    $ gcloud app deploy --version v1

  3. 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. 일별 지출 한도 설정

enter image description here

자세한 내용은 다음 블로그 게시물을 참조하십시오. 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를 보는 데 도움이 되기를 바랍니다.

GAE 비용을 줄이고 싶다면 사용하지 마십시오.manual_scaling 글에서 제안된 바와 같이 또는 수락된 답변!

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

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

애플리케이션 엔진 유연성 대 표준:

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

[표준] 무료 또는 매우 저렴한 비용으로 운영할 수 있도록 설계되었으며, 필요할 때 필요한 비용만 지불합니다.예를 들어 트래픽이 없을 때 응용 프로그램을 0개의 인스턴스로 확장할 수 있습니다.

스케일링 옵션:

  • 자동 확장: Google은 제공한 요구 및 구성에 따라 앱을 확장합니다.
  • 수동 스케일링:확장이 전혀 없습니다. GAE는 항상 요청한 인스턴스의 정확한 수를 실행합니다(매우 잘못된 이름 지정).
  • 기본 확장:사용자가 설정한 제한에 따라 스케일업되고 특정 시간이 지나면 스케일다운됩니다.

인스턴스 유형:두 가지 인스턴스 유형이 있으며 기본적으로 새 인스턴스를 스핀업하는 데 걸리는 시간이 다릅니다.F 클래스 인스턴스(자동 확장에 사용)는 0.1초 이내에 필요할 때, B 클래스 인스턴스(수동 확장/기본에 사용)는 0.7초 이내에 생성할 수 있습니다.

enter image description here

이제 기본 사항에 대해 이해하셨으므로 다음과 같이 수락된 답변으로 돌아가 보겠습니다.

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)

이것은 구글이 제공하는 무료 할당량 안에 들어갈 것이며, 실제 트래픽이 없다면 비용이 들지 않을 것입니다.

PS: 실행 중인 것을 잊었거나 어딘가에 비용이 많이 드는 설정이 있을 경우를 대비하여 일일 지출 한도를 설정하는 것이 좋습니다(일일 지출 한도는 권장되지 않지만 출처는 2021년 7월 24일까지 사용 가능).

우리는 캐스케이드, 기하급수적인 오류(반복된 전자 메일이 생성된 전자 메일 등)로 인해 GAEFE에 코드를 배포했고, 버그가 발생한 GAE 인스턴스를 해제할 수 없었습니다.4시간 이상 경과한 후, 100만 개 이상의 이메일이 전송되었습니다(Mailgun에서는 계정을 비활성화할 수 없습니다)."암호 변경이 적용될 때까지 최대 24시간 기다려 주십시오."라고 되어 있고, API 키를 취소해도 아무런 효과가 없었습니다.) redis VM이 중지되고, DB가 다운되었으며, 사이트의 모든 코드가 하나의 "Down For Maintenance" 정적 503 페이지로 축소되었습니다.) 이메일이 계속 전송되었습니다.

GAEFE는 단순히 CPU 로드가 있는 도커 VM이나 클라우드 컴퓨팅 VM(redis)을 종료하지 않는다고 판단했습니다.아마 절대로!컴퓨팅 VM을 "단순히" 중지하는 대신 실제로 삭제하면 e-메일이 즉시 중지됩니다.

그러나 GAE 앱이 버전 및 인스턴스의 100%를 "중지" 상태로 보고했음에도 불구하고 DB는 최대 2시간 동안 계속해서 "이메일을 보낼 수 없음" 알림으로 가득 찼습니다.결국 구글 클라우드 SQL 비밀번호를 변경해야 했습니다.

우리는 청구서를 계속 확인했고, 악성 인스턴스 7개가 CPU를 계속 사용해서 그 계정에 사용된 카드를 취소했고, 실제로 청구서가 만료되었을 때 사이트가 다운되었지만 악성 인스턴스도 다운되었습니다.우리는 GAE 이메일 지원으로 문제를 해결할 수 없었습니다.


업데이트(2020년 9월 30일):이것은 여전히 내 22년 경력 중 최악의 순간입니다!!15명의 크랙 천재 개발자들로 구성된 전체 회사는 GAE를 끄는 방법을 찾을 수 없었습니다.우리는 제 개발자 중 한 명이 그녀의 GMail 계정에 접속하지 못했을 때 고객들이 수백만 건의 이메일을 받고 있다는 것을 알고 있었습니다.플러그를 뽑을 수도, 끌 수도 없었습니다.그것은 정말 "터미네이터" 순간이었습니다!

MailGun이 실제로 API 액세스를 비활성화하거나 암호를 변경할 수 있었다면 비용을 제외하고 거의 그렇게 나쁘지 않았을 것입니다.하지만 GAE에서는 여전히 비용 면에서 좋지 않았을 것입니다.

발급할 수 없는 서버를 더 이상 신뢰하지 않는 경우reboot온에

결국 메일건은 우리에게 50달러밖에 청구하지 않았습니다. 하지만...만약 제가 "좋아요, 메일이 멈췄어요, 우리는 멈출 수 있어요"라고 가정했다면, 우리는 결국 20,000달러의 초과 청구서를 받을 수 있었을 것입니다!그것은 "단순히" 1,500달러였습니다.그리고 우리는 그것을 논쟁하기 위해 누구와도 연락할 수 없었습니다.그래서 사장님이 그냥 드셨어요.

또한 앱에 자동 확장 기능이 있지만 기본 최소 2개의 인스턴스를 항상 실행하지 않으려면 app.yaml을 다음과 같이 구성할 수 있습니다.

runtime: nodejs
env: flex
automatic_scaling:
  min_num_instances: 1

아무도 언급하지 않았기 때문에, 여기 버전과 관련된 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

약간의 지연 시간에도 상관없는 개발 환경의 경우 다음 설정을 사용합니다.

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

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

instance_class: F1
automatic_scaling:
  max_instances: 1

AppEngine 대시보드에서 인스턴스를 보고 시작 시간을 기록한 후 idle_timeout 기간이 경과한 후 인스턴스 수가 0으로 떨어지고 "이 버전에는 인스턴스가 배포되지 않았습니다"라는 메시지가 표시되는지 확인합니다.

이한옵에 할 수 없습니다.flexenv:

app.yaml:

    # 1.
    resources:
      cpu: .5
      memory_gb: .18
      disk_size_gb: 10
    
    # 2.
    automatic_scaling:
      min_instances: 1
      max_instances: 1
      
    # 3.
    beta_settings:
      machine_type: f1-micro

관련 오류:

1.

오류 응답: [3] App Engine Flexible 유효성 검사 오류:VCPU당 메모리 GB(0.58)는 0.90에서 6.50 사이여야 합니다.

오류: (gcloud.app.deploy) 잘못된_인수: VM 기반 자동 확장에는 [standard_scheduler_settings.min_in_instances, standard_scheduler_settings.max_instances] 매개 변수가 없어야 합니다.

  • '@type': type.googleapis.com/google.rpc.BadRequest 파일:
    • 설명: 'VM 기반 자동 확장에는 [standard_scheduler_settings.min_instances, standard_scheduler_settings.max_instances] 필드: 버전이 없어야 합니다.오토매틱

오류: (gcloud.app.deploy) INVALID_ARGUMNT: 구성 "beta_settings"에서 인식할 수 없거나 허용되지 않는 키입니다.

  • '@type': type.googleapis.com/google.rpc.BadRequest 파일:
    • 설명: 베타_설정 키를 env:flex 필드:machine_type과 함께 사용할 수 없습니다.

언급URL : https://stackoverflow.com/questions/47125661/pricing-of-google-app-engine-flexible-env-a-500-lesson