Bermigrasi dari layanan App Engine Images ke Cloud Run

ID region

REGION_ID adalah kode singkat yang ditetapkan Google berdasarkan region yang Anda pilih saat membuat aplikasi. Kode ini tidak sesuai dengan negara atau provinsi, meskipun beberapa ID region mungkin tampak mirip dengan kode negara dan provinsi yang umum digunakan. Untuk aplikasi yang dibuat setelah Februari 2020, REGION_ID.r disertakan dalam URL App Engine. Untuk aplikasi lama yang dibuat sebelum tanggal tersebut, ID region bersifat opsional dalam URL.

Pelajari ID region lebih lanjut.

Untuk memodernisasi pemrosesan gambar di aplikasi App Engine yang ada, Anda dapat men-deploy layanan transformasi gambar dalam container ke Cloud Run dan merutekan panggilan Images service App Engine ke layanan tersebut.

Migrasi ini tidak memerlukan penulisan ulang besar pada kode pemrosesan gambar atau hosting aplikasi App Engine di Cloud Run. Sebagai gantinya, saat Anda mengonfigurasi aplikasi, SDK layanan App Engine akan mencegat panggilan layanan App Engine Images dan merutekannya ke layanan Cloud Run. Layanan memproses gambar menggunakan mesin Pillow open source melalui gRPC dan menampilkan hasilnya ke aplikasi App Engine Anda. Penyiapan ini menggantikan backend layanan Gambar App Engine lama dengan solusi modern yang cloud-native.

Batasan

  • Saat menggunakan layanan pemrosesan gambar kustom, Anda tidak dapat membuat URL penayangan. App Engine akan menampilkan pengecualian runtime saat Anda memanggil metode getServingUrl(). Pembatasan ini mencegah ketergantungan pada backend lama untuk menyimpan dan menayangkan gambar.

    Untuk menayangkan gambar, sebaiknya Anda menayangkannya secara langsung dari URL Cloud Storage, atau menggunakan bucket Cloud Storage yang didukung oleh Cloud CDN, bergantung pada persyaratan aplikasi Anda.

    URL yang sudah ada yang Anda buat menggunakan panggilan lama ke metode getServingUrl() akan terus menayangkan gambar.

  • Saat Anda mengupgrade versi SDK layanan App Engine, App Engine tidak otomatis merutekan panggilan App Engine ke layanan Cloud Run. Aplikasi Anda hanya menerapkan perilaku baru setelah Anda mengonfigurasi variabel lingkungan migrasi APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE dan APPENGINE_IMAGES_SERVICE_ENDPOINT.

Sebelum memulai

  1. Pastikan Anda memiliki akses ke kode sumber App Engine.

  2. Aktifkan Cloud Run Admin API dan Artifact Registry API:

    Aktifkan API

Peran yang diperlukan

Anda dapat memilih untuk membuat akun layanan baru atau menggunakan akun layanan yang dikelola pengguna yang sama di Cloud Run yang Anda gunakan untuk App Engine. Anda atau administrator Anda harus memberikan peran IAM berikut kepada akun deployer dan akun layanan Cloud Build.

Klik untuk melihat peran yang diperlukan untuk akun deployer

Untuk mendapatkan izin yang Anda perlukan untuk membangun dan men-deploy dari sumber, minta administrator untuk memberi Anda peran IAM berikut:

Klik untuk melihat peran yang diperlukan untuk akun layanan Cloud Build

Cloud Build secara otomatis menggunakan akun layanan default Compute Engine sebagai akun layanan Cloud Build default untuk membangun kode sumber dan resource Cloud Run Anda, kecuali jika Anda mengganti perilaku ini. Agar Cloud Build dapat membangun sumber Anda, minta administrator Anda untuk memberikan peran Cloud Run Builder (roles/run.builder) ke akun layanan default Compute Engine di project Anda:

  gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com \
      --role=roles/run.builder
  

Ganti PROJECT_NUMBER dengan nomor project Google Cloud Anda, dan PROJECT_ID dengan project ID Google Cloud Anda. Untuk mengetahui petunjuk mendetail tentang cara menemukan project ID dan nomor project Anda, lihat Membuat dan mengelola project.

Pemberian peran builder Cloud Run ke akun layanan default Compute Engine memerlukan waktu beberapa menit untuk berlaku.

Untuk mengetahui daftar peran dan izin IAM yang terkait dengan Cloud Run, lihat Peran IAM Cloud Run dan Izin IAM Cloud Run. Jika layanan Cloud Run Anda berinteraksi dengan Google Cloud API, seperti Library Klien Cloud, lihat panduan konfigurasi identitas layanan. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat izin deployment dan mengelola akses.

Proses migrasi

Migrasi ini mencakup langkah-langkah berikut:

  1. Deploy layanan transformasi gambar di Cloud Run untuk mendapatkan URL layanan Anda.
  2. Konfigurasi file sumber App Engine dengan URL layanan Cloud Run dan flag perutean, lalu deploy atau deploy ulang aplikasi App Engine Anda.
  3. Uji aplikasi Anda untuk memeriksa fungsi pemrosesan gambar Anda.

Men-deploy layanan transformasi gambar di Cloud Run

Untuk men-deploy layanan transformasi gambar dan mengonfigurasi aksesnya ke Cloud Storage, ikuti langkah-langkah berikut:

  1. Deploy container layanan transformasi gambar yang telah dibuat sebelumnya ke layanan Cloud Run. Pastikan Anda men-deploy dengan autentikasi yang diterapkan (--no-allow-unauthenticated). App Engine Services SDK menangani autentikasi saat melakukan panggilan ke layanan ini:

    gcloud run deploy image-processing-service \
        --image=us-central1-docker.pkg.dev/gae-bundled-services-images/image-processing-service-staging/image-processing-service:public-image-d476f7ef9d1b \
        --no-allow-unauthenticated \
        --region=REGION
    

    Ganti REGION dengan region tempat Anda men-deploy layanan Cloud Run. Sebaiknya deploy layanan di region yang sama dengan layanan App Engine Anda.

    Catat URL layanan dari layanan Cloud Run yang di-deploy, misalnya, https://image-processing-service-xyz-uc.a.run.app.

  2. Berikan peran Cloud Run Invoker (roles/run.invoker) ke akun layanan App Engine default. Hal ini memungkinkan aplikasi App Engine Anda mengotorisasi dan merutekan panggilan ke layanan Cloud Run pribadi:

    gcloud run services add-iam-policy-binding image-processing-service \
        --member="serviceAccount:PROJECT_ID@appspot.gserviceaccount.com" \
        --role="roles/run.invoker" \
        --region=REGION
    
  3. Berikan peran Cloud Storage Object Viewer (roles/storage.objectViewer) ke akun layanan Compute Engine default. Hal ini memungkinkan layanan transformasi gambar membaca gambar yang disimpan di Cloud Storage:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member="serviceAccount:PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
        --role="roles/storage.objectViewer"
    

    Ganti kode berikut:

    • PROJECT_ID: ID project tempat Anda men-deploy layanan Cloud Run.
    • PROJECT_NUMBER: nomor project tempat Anda men-deploy layanan Cloud Run.

Mengonfigurasi file sumber

Untuk mengonfigurasi aplikasi Java agar menggunakan layanan transformasi gambar di Cloud Run, ikuti langkah-langkah berikut:

  1. Perbarui file pom.xml untuk menyertakan dependensi berikut:

    • Tambahkan atau perbarui dependensi appengine-api-1.0-sdk:

      <dependency>
        <groupId>com.google.appengine</groupId>
        <artifactId>appengine-api-1.0-sdk</artifactId>
        <version>5.0.5-beta.1</version>
      </dependency>
      
    • Tambahkan dependensi google-auth-library-oauth2-http untuk komunikasi yang aman dengan Cloud Run:

      <dependency>
        <groupId>com.google.auth</groupId>
        <artifactId>google-auth-library-oauth2-http</artifactId>
        <version>1.20.0</version>
      </dependency>
      
  2. Perbarui file appengine-web.xml untuk mengonfigurasi variabel lingkungan yang diperlukan:

    <?xml version="1.0" encoding="utf-8"?>
    <appengine-web-app xmlns="http://appengine.google.com/ns/1.0">
        <runtime>RUNTIME</runtime> <!-- a supported Java runtime version -->
        <threadsafe>true</threadsafe>
    
        <!-- List the Images service -->
        <app-engine-bundled-services>
            <api>images</api>
        </app-engine-bundled-services>
    
        <env-variables>
            <!-- Enable the custom gRPC Images service -->
            <env-var name="APPENGINE_USE_CUSTOM_IMAGES_GRPC_SERVICE" value="true" />
    
            <!-- The URL of the Cloud Run service you deployed -->
            <env-var name="APPENGINE_IMAGES_SERVICE_ENDPOINT" value="RUN_SERVICE_URL" />
        </env-variables>
    </appengine-web-app>
    

    Ganti kode berikut:

    • RUNTIME: versi runtime Java yang didukung.
    • RUN_SERVICE_URL: URL layanan Cloud Run yang di-deploy.
  3. Deploy aplikasi Anda ke App Engine:

    mvn clean package appengine:deploy clean
    
  4. Luncurkan browser Anda, dan akses layanan web Anda dengan menjalankan perintah berikut:

    gcloud app browse
    

Menguji aplikasi Anda

Untuk memverifikasi bahwa aplikasi Anda berhasil menggunakan layanan transformasi gambar Cloud Run:

  1. Aktifkan fungsi pemrosesan gambar di aplikasi App Engine yang di-deploy.
  2. Periksa Logs Explorer untuk aplikasi App Engine Anda. Pastikan tidak ada error terkait panggilan com.google.appengine.api.images.
  3. Periksa log image-processing-service Cloud Run Anda untuk memverifikasi bahwa Cloud Run menerima dan memproses permintaan.

Langkah berikutnya