>source

App Engine Flexible에서 Airflow Webserver를 실행하려고하는데 작동하려면 탑재 된 GCS 버킷이 필요합니다. 사용자 정의 런타임을 사용하고 있습니다. 내가하는 이유는 App Engine이 IAP와 함께 제공하는 보안 엔드 포인트를 얻는 것입니다.

내 app.yaml은 서비스 이름, env 및 런타임을 가진 간단한 파일입니다. 내 Dockerfile은 많은 apt-get install 입니다 CMD에는 gcsfuse에 공기 흐름 웹 서버를 마운트하고 실행하는 것이 많지 않습니다.

App Engine에서 gcsfuse를 사용할 때 발생하는 오류는 다음과 같습니다.

daemonize.Run: readFromProcess: sub-process: mountWithArgs: mountWithConn: Mount: mount: running fusermount: exit status 1
stderr:
fusermount: fuse device not found, try 'modprobe fuse' first

Google Composer가 존재하지만 내 요구에 비해 너무 비싸다는 것을 알고 있습니다. 따라서 GAE에서 스케줄러와 웹 서버를 사용하여 VM을 생성하고 Composer가 제공하는 것과 비슷하지만 실행하려는 간단한 작업에 대한 HA 및 미친 비용없이 GCS 버킷을 공유합니다.

App Engine에서이 작업을 수행하려고합니다. 지금까지 찾은 모든 답변은 어떤 이유로 든 GKE를 언급했습니다.

이것은 권한 문제라는 것을 알고 있지만 App Engine에서는 권한을 설정하는 옵션이 표시되지 않으므로 권한을 설정하는 방법이 매우 유용합니다.

App Engine에서하고 싶은 일을 할 수 있습니까?

  • 답변 # 1

    이것은 가능합니다. 수동으로 수행하는 방법을 보여 드리겠습니다. 여러 인스턴스를 처리하기 위해 쉘 스크립트를 사용해야 할 수도 있습니다.

      이 매뉴얼에 사용 된 몇 가지 변수 정의

      service=YOUR_APPENGINE_VERSION
      version=YOUR_APPENGINE_VERSION
      project=PROJECTID
      
      

      인스턴스 목록 받기

      gcloud app instances list  --project $project
      SERVICE  VERSION          ID                                VM_STATUS  DEBUG_MODE
      default  ***************  instance-id-1                     RUNNING    YES
      default  ***************  instance-id-2                     RUNNING
      
      

      하나의 인스턴스로

      gcloud app instances ssh instance-id-1 --service $service --version $version --project $project
      
      

      이미지 ID 받기

      docker ps | grep gaeapp | awk '{print $2}'
      
      

      이미지 ID를 얻습니다

      gaeapp 의 환경을 얻으십시오

      docker exec gaeapp env
      PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
      HOSTNAME=*****
      GAE_MEMORY_MB=614
      GAE_INSTANCE=****
      GAE_SERVICE=default
      PORT=8080
      GCLOUD_PROJECT=*****
      GAE_VERSION=*****
      GOOGLE_CLOUD_PROJECT=*****
      
      

      권한으로 gaeapp 다시 시작

      docker rm -f gaeapp
      docker run --privileged -d -p 8080:8080 --name gaeapp -e GAE_MEMORY_MB=614 -e GAE_INSTANCE=instance-id-1 -e GAE_SERVICE=$service -e PORT=8080 -e GCLOUD_PROJECT=$project -e GAE_VERSION=$version -e GOOGLE_CLOUD_PROJECT=$project $imageid
      
      

      gaeapp 입력 (gcsfuse가 설치되어 있고 서비스 계정 키 json이 있다고 가정 : /test-service-account.json )

      $ docker exec -it gaeapp bash
      [in gaeapp] # GOOGLE_APPLICATION_CREDENTIALS=/test-service-account.json gcsfuse BUCKET /mnt/
      Using mount point: /mnt
      Opening GCS connection...
      Opening bucket...
      Mounting file system...
      File system has been successfully mounted.
      
      

관련 자료

  • 이전 c# - 새로운 안내 목록에 가입하는 방법?
  • 다음 javascript - 검색하려는 URL 매개 변수가 완전히 표시되지 않는 이유는 무엇입니까?