꿈꾸는 시스템 디자이너

Flutter 강좌 - [Firebase] 레거시 GAE 및 GCF 메타데이터 서버 엔드포인드 사용 문제 | Legacy GAE and GCF Metadata Server endpoints Problem 본문

Development/Flutter

Flutter 강좌 - [Firebase] 레거시 GAE 및 GCF 메타데이터 서버 엔드포인드 사용 문제 | Legacy GAE and GCF Metadata Server endpoints Problem

독행소년 2020. 2. 5. 14:42

Flutter Code Examples 강좌를 추천합니다.

  • 제 블로그에서 Flutter Code Examples 프로젝트를 시작합니다.
  • Flutter의 다양한 예제를 소스코드와 실행화면으로 제공합니다.
  • 또한 모든 예제는 Flutter Code Examples 앱을 통해 테스트 가능합니다.

Flutter Code Examples 강좌로 메뉴로 이동

Flutter Code Examples 강좌 목록 페이지로 이동

Flutter Code Examples 앱 설치 | Google Play Store로 이동

 

Flutter Code Examples - Google Play 앱

Are you a beginner at Flutter? Check out the various features of Flutter through the demo. Source code for all demos is also provided.

play.google.com


Flutter 강좌 시즌2 목록 : https://here4you.tistory.com/149

 

최근 Google Cloud Platform으로부터 경고 메일을 받았다. 영문 메일을 먼저 받았고, 약 보름만에 한글로 동일한 메일을 받았다.

제목은 다음과 같이 날라온다.

Reminder: [Action Required] Legacy GAE and GCF Metadata Server endpoints will be turned down on April 30, 2020

알림: [조치 필요] 2020년 4월 30일에 레거시 GAE 및 GCF 메타데이터 서버 엔드포인트의 사용이 중단될 예정입니다.

 

메일의 내용은 본인 소유의 App Engine 애플리케이션이나 Cloud Functions 프로젝트에서 App Engine 및 Cloud Functions 메타 데이터 서버의 v0.1 혹은 v1beta1 엔드포인트로 요청을 보내고 있는데 4월 30일 이후에는 정식 v1 엔드포인트가 아닌 URL로 접근하는 요청에 대해서는 HTTP 404 NOT FOUND 응답이 반환되니 기한내에 v1으로 업그레이드를 하라는 말인데 영문도 그렇고 번역된 한글도 그렇고 도무지 이해를 못하겠다.

우선 내 경우에는 3개의 Cloud Function을 Firebase에 등록해서 개발 중인 상황이다. 그런데 정작 메일은 Firebase가 아닌 GCP(Google Cloud Platform)에서 발송되었다. GCP내에 App Engine이나 Cloud Functions을 쓰고 있는데 그 기능에서 v0.1 혹으 v1beta를 사용하고 있어 문제가 발생하는 것이고 이를 정식 v1으로 업그레이드 하라는 뜻인거 같다.

정작 본인은 GCP는 사용 안하고 있는데 하면서 살펴보니 Firebase에 Cloud Functions을 등록하면 GCP에도 등록되는가 보다. 아마 실체는 하나인데 Firebase와 GCP를 통해 접근이 가능한 것 같다.

여튼 내가 만든 Cloud 함수가 아래와 같은 URL을 요청할 경우 v1 형식으로 업그레이드를 해야한다는 뜻인 것 같다.

 

우선 문제 해결을 위해 Stackoverflow를 돌아봐도 동일 문제를 문의한 글은 봤으나 명확한 답변이 없는 상황이다.

그나마 가장 답변다운 답변이 달린 링크는 다음과 같다.

https://stackoverflow.com/questions/58759895/firebase-sendmessage-function-update-to-v1-google-cloud-endpoint

 

내용인 즉, firebase CLI 프로젝트의 functions에 설치한 npm 패키지 중에 문제의 URL을 요청하는 패키지를 찾아서 업그래이드를 하면 해결된다는 내용이었다.

방식은 grep 명령어를 통해 문제의 키워드를 검색해서 검색된 패키지를 업그래이드 하는 것이다. 답변자의 경우 firebase-admin에서 문제가 발생해서 관련 패키지들을 업그레이드해서 해결했다고 한다.

본인의 경우는 문제가 되는 함수에서 firebase-tools를 사용하고 있었다. 해당 패키지에서 문제의 URL이 나오는지 확인하고 업그래이드를 시도했다.

사용한 grep 명령어는 다음과 같다. firebaes CLI 프로젝트의 functions 디렉토리에서 시작한다.

grep -rni "computeMetadata/" *

 

첫번째 시도

λ grep -rni "computeMetadata/" *
node_modules/firebase-admin/lib/auth/credential.js:31:var GOOGLE_METADATA_SERVICE_TOKEN_PATH = '/computeMetadata/v1/instance/service-accounts/default/token';
node_modules/firebase-admin/lib/auth/credential.js:32:var GOOGLE_METADATA_SERVICE_PROJECT_ID_PATH = '/computeMetadata/v1/project/project-id';
node_modules/firebase-admin/lib/auth/token-generator.js:128:            url: 'http://metadata/computeMetadata/v1/instance/service-accounts/default/email',
node_modules/gcp-metadata/build/src/index.d.ts:10:export declare const BASE_PATH = "/computeMetadata/v1";
node_modules/gcp-metadata/build/src/index.js:12:exports.BASE_PATH = '/computeMetadata/v1';
node_modules/google-auto-auth/node_modules/gcp-metadata/index.js:6:var BASE_URL = 'http://metadata.google.internal/computeMetadata/v1'
node_modules/google-auto-auth/node_modules/google-auth-library/lib/auth/computeclient.js:27:  'http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token';
node_modules/google-auto-auth/node_modules/google-auth-library/lib/auth/googleauth.js:254:    uri: 'http://169.254.169.254/computeMetadata/v1/project/project-id',

google-auto-auth 패키지 내 google-auth-library에서 v1beta1이 검색되었다. 일단 firebae-tools는 아니다. ㅡ,ㅡ

당시 google-auth-auth는 0.7.2 였고 0.10.1로 업그래이드 했다.

λ npm install google-auto-auth --save

 

두번째 시도

λ grep -rni "computeMetadata/" *
node_modules/firebase-admin/lib/auth/credential.js:31:var GOOGLE_METADATA_SERVICE_TOKEN_PATH = '/computeMetadata/v1/instance/service-accounts/default/token';
node_modules/firebase-admin/lib/auth/credential.js:32:var GOOGLE_METADATA_SERVICE_PROJECT_ID_PATH = '/computeMetadata/v1/project/project-id';
node_modules/firebase-admin/lib/auth/token-generator.js:128:            url: 'http://metadata/computeMetadata/v1/instance/service-accounts/default/email',
node_modules/firebase-tools/node_modules/gcp-metadata/index.js:6:var BASE_URL = 'http://metadata.google.internal/computeMetadata/v1'
node_modules/firebase-tools/node_modules/google-auto-auth/node_modules/google-auth-library/lib/auth/computeclient.js:27:  'http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token';
node_modules/firebase-tools/node_modules/google-auto-auth/node_modules/google-auth-library/lib/auth/googleauth.js:254:    uri: 'http://169.254.169.254/computeMetadata/v1/project/project-id',
node_modules/gcp-metadata/build/src/index.d.ts:10:export declare const BASE_PATH = "/computeMetadata/v1";
node_modules/gcp-metadata/build/src/index.js:12:exports.BASE_PATH = '/computeMetadata/v1';
node_modules/google-auto-auth/node_modules/gcp-metadata/build/src/index.d.ts:3:export declare const BASE_PATH = "/computeMetadata/v1";
node_modules/google-auto-auth/node_modules/gcp-metadata/build/src/index.js:42:exports.BASE_PATH = '/computeMetadata/v1';

firebase-tools 패키지 내 google-auth-auth 패키지 내 google-auth-library에서 v1beta1이 검색되었다.

google-auto-auth 디렉토리까지 이동한 후 업그레이드를 시도한다.

당시 google-auth-library는 1.6.1이었고 5.9.2로 업그래이드 했다. 그냥 인스톨하면 버전이 오히려 내려가서 @latest 옵션을 추가하여 최신 버전으로 업그래이드 했다.

λ npm install google-auth-library@latest --save

 

세번재 시도

λ grep -rni "computeMetadata/" *
node_modules/firebase-admin/lib/auth/credential.js:31:var GOOGLE_METADATA_SERVICE_TOKEN_PATH = '/computeMetadata/v1/instance/service-accounts/default/token';
node_modules/firebase-admin/lib/auth/credential.js:32:var GOOGLE_METADATA_SERVICE_PROJECT_ID_PATH = '/computeMetadata/v1/project/project-id';
node_modules/firebase-admin/lib/auth/token-generator.js:128:            url: 'http://metadata/computeMetadata/v1/instance/service-accounts/default/email',
node_modules/firebase-tools/node_modules/gcp-metadata/index.js:6:var BASE_URL = 'http://metadata.google.internal/computeMetadata/v1'
node_modules/firebase-tools/node_modules/google-auto-auth/node_modules/google-auth-library/node_modules/gcp-metadata/build/src/index.d.ts:10:export declare const BASE_PATH = "/computeMetadata/v1";
node_modules/firebase-tools/node_modules/google-auto-auth/node_modules/google-auth-library/node_modules/gcp-metadata/build/src/index.js:12:exports.BASE_PATH = '/computeMetadata/v1';
node_modules/gcp-metadata/build/src/index.d.ts:10:export declare const BASE_PATH = "/computeMetadata/v1";
node_modules/gcp-metadata/build/src/index.js:12:exports.BASE_PATH = '/computeMetadata/v1';
node_modules/google-auto-auth/node_modules/gcp-metadata/build/src/index.d.ts:3:export declare const BASE_PATH = "/computeMetadata/v1";
node_modules/google-auto-auth/node_modules/gcp-metadata/build/src/index.js:42:exports.BASE_PATH = '/computeMetadata/v1';

v1beta로 검색되는 패키지가 없어졌다.

 

이 상태에서 firebase deploy 명령어를 통해 함수를 다시 배포한다.

 

이렇게 해서 해결이 된 것인지는 본인도 모르겠다. 메일을 받은 것 외에는 Firebase나 GCP 콘솔상의 Cloud Functions 메뉴에서는 어떠한 경고문구도 출력되지 않았었다. 이번 조치로 해결되었는지 확인할 방법도 현재까지 찾지 못했다.

이번달 출시할 서비스인데 4월 30일부터 문제가 생기는 것은 아닌지 불안하기만 하다.

 

[2020년 2월 24일 추가]

지난 2월 5일의 조치를 정리하여 포스팅하였는데 지난 2월 22일에 다시 동일한 메일을 받았다. 문제가 발생하는 Cloud Functions도 동일하다. 문제가되는 함수에서 사용하는 구글 관련 라이브러리는 Firebase-tools 였다. 때마침 새로운 버전(7.13.1)이 출시되었길래 일단 업데이트를 한 후 deploy를 했다.

또한 메일의 후반부에 Cloud Functions을 사용한다면 환경 변수를 추가하라는 아내에 따라 다음과 같이 환경변수도 추가했다.

아직도 현재까지의 조치가 맞는 조치인지와 문제가 해결되었는지의 유무를 알 수 없다. stackoverflow에도 명확한 자료가 없어서 답답하다.

 

Comments