arrow_back

Membangun Aplikasi Serverless dengan Cloud Run yang Membuat File PDF

Login Gabung
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

Membangun Aplikasi Serverless dengan Cloud Run yang Membuat File PDF

Lab 1 jam universal_currency_alt 5 Kredit show_chart Menengah
Test and share your knowledge with our community!
done
Get access to over 700 hands-on labs, skill badges, and courses

GSP644

Lab Mandiri Google Cloud

Logo Pet Theory

Ringkasan

Dua belas tahun lalu, Lily memulai jaringan klinik hewan Pet Theory. Saat ini, Pet Theory mengirimkan invoice dalam format DOCX kepada klien, tetapi banyak dari mereka yang mengeluh tidak bisa membuka file tersebut. Untuk meningkatkan kepuasan pelanggan, Lily meminta Patrick dari bagian IT untuk mencari alternatif guna mengatasi keluhan tersebut.

Pet Theory hanya memiliki satu staf operasional yang menangani bermacam tugas. Karena itulah, mereka ingin berinvestasi dalam solusi hemat biaya yang tidak memerlukan banyak pemeliharaan berkelanjutan. Setelah menganalisis berbagai opsi pemrosesan, Patrick memutuskan untuk menggunakan Cloud Run.

Cloud Run bersifat serverless sehingga dapat mengabstraksi semua pengelolaan infrastruktur dan memungkinkan Anda berfokus pada membangun aplikasi, bukan memikirkan overhead. Sebagai produk serverless Google, Cloud Run dapat melakukan penskalaan hingga nol, yang berarti layanan ini tidak akan menimbulkan biaya jika tidak digunakan. Cloud Run juga memungkinkan Anda menggunakan paket biner kustom berbasis container, yang berarti sekarang Anda dapat membangun artefak yang terisolasi dan konsisten.

Dalam lab ini, Anda akan membangun aplikasi web pengonversi PDF di Cloud Run yang otomatis mengonversi file yang disimpan di Cloud Storage menjadi PDF yang disimpan di folder terpisah.

Arsitektur

Diagram ini memberikan ringkasan terkait layanan yang akan Anda gunakan dan bagaimana layanan tersebut terhubung dengan satu sama lain:

Diagram arsitektur

Tujuan

Dalam lab ini, Anda akan mempelajari cara:

  • Mengonversi aplikasi Node JS menjadi container.
  • Membangun container dengan Google Cloud Build.
  • Membuat layanan Cloud Run yang mengonversi file menjadi file PDF di cloud.
  • Menggunakan pemrosesan peristiwa dengan Cloud Storage

Prasyarat

Ini adalah lab tingkat menengah. Anda dianggap sudah familier dengan Konsol Cloud dan lingkungan shell. Pengalaman dalam menggunakan Firebase akan bermanfaat, tetapi tidak wajib. Sebelum mengikuti lab ini, sebaiknya Anda telah menyelesaikan lab Google Cloud Skills Boost berikut:

Setelah Anda siap, scroll ke bawah dan ikuti langkah berikut ini untuk menyiapkan lingkungan lab Anda.

Penyiapan dan persyaratan

Sebelum mengklik tombol Mulai Lab

Baca petunjuk ini. Lab memiliki timer dan Anda tidak dapat menjedanya. Timer, yang dimulai saat Anda mengklik Start Lab, akan menampilkan durasi ketersediaan resource Google Cloud untuk Anda.

Lab praktik ini dapat Anda gunakan untuk melakukan sendiri aktivitas lab di lingkungan cloud sungguhan, bukan di lingkungan demo atau simulasi. Untuk mengakses lab ini, Anda akan diberi kredensial baru yang bersifat sementara dan dapat digunakan untuk login serta mengakses Google Cloud selama durasi lab.

Untuk menyelesaikan lab ini, Anda memerlukan:

  • Akses ke browser internet standar (disarankan browser Chrome).
Catatan: Gunakan jendela Samaran atau browser pribadi untuk menjalankan lab ini. Hal ini akan mencegah konflik antara akun pribadi Anda dan akun Siswa yang dapat menyebabkan tagihan ekstra pada akun pribadi Anda.
  • Waktu untuk menyelesaikan lab. Ingat, setelah dimulai, lab tidak dapat dijeda.
Catatan: Jika Anda sudah memiliki project atau akun pribadi Google Cloud, jangan menggunakannya untuk lab ini agar terhindar dari tagihan ekstra pada akun Anda.

Cara memulai lab dan login ke Google Cloud Console

  1. Klik tombol Start Lab. Jika Anda perlu membayar lab, jendela pop-up akan terbuka untuk memilih metode pembayaran. Di sebelah kiri adalah panel Lab Details dengan berikut ini:

    • Tombol Open Google Console
    • Waktu tersisa
    • Kredensial sementara yang harus Anda gunakan untuk lab ini
    • Informasi lain, jika diperlukan, untuk menyelesaikan lab ini
  2. Klik Open Google Console. Lab akan menjalankan resource, lalu membuka tab lain yang menampilkan halaman Login.

    Tips: Atur tab di jendela terpisah secara berdampingan.

    Catatan: Jika Anda melihat dialog Choose an account, klik Use Another Account.
  3. Jika perlu, salin Username dari panel Lab Details dan tempel ke dialog Sign in. Klik Next.

  4. Salin Password dari panel Lab Details dan tempel ke dialog Welcome. Klik Next.

    Penting: Anda harus menggunakan kredensial dari panel sebelah kiri. Jangan menggunakan kredensial Google Cloud Skills Boost. Catatan: Menggunakan akun Google Cloud sendiri untuk lab ini dapat dikenai biaya tambahan.
  5. Klik halaman berikutnya:

    • Setujui persyaratan dan ketentuan.
    • Jangan tambahkan opsi pemulihan atau autentikasi 2 langkah (karena ini akun sementara).
    • Jangan daftar uji coba gratis.

Setelah beberapa saat, Cloud Console akan terbuka di tab ini.

Catatan: Anda dapat melihat menu dengan daftar Produk dan Layanan Google Cloud dengan mengklik Menu navigasi di kiri atas. Ikon menu navigasi

Mengaktifkan Cloud Shell

Cloud Shell adalah mesin virtual yang dilengkapi dengan berbagai alat pengembangan. Mesin virtual ini menawarkan direktori beranda persisten berkapasitas 5 GB dan berjalan di Google Cloud. Cloud Shell menyediakan akses command-line untuk resource Google Cloud Anda.

  1. Klik Activate Cloud Shell Ikon Activate Cloud Shell di bagian atas konsol Google Cloud.

Setelah terhubung, Anda sudah diautentikasi, dan project ditetapkan ke PROJECT_ID Anda. Output berisi baris yang mendeklarasikan PROJECT_ID untuk sesi ini:

Project Cloud Platform Anda dalam sesi ini disetel ke YOUR_PROJECT_ID

gcloud adalah alat command line untuk Google Cloud. Alat ini sudah terinstal di Cloud Shell dan mendukung pelengkapan command line.

  1. (Opsional) Anda dapat menampilkan daftar nama akun yang aktif dengan perintah ini:
gcloud auth list
  1. Klik Authorize.

  2. Output Anda sekarang akan terlihat seperti ini:

Output:

ACTIVE: * ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net Untuk menyetel akun aktif, jalankan: $ gcloud config set account `ACCOUNT`
  1. (Opsional) Anda dapat menampilkan daftar project ID dengan perintah ini:
gcloud config list project

Output:

[core] project = <project_ID>

Contoh output:

[core] project = qwiklabs-gcp-44776a13dea667a6 Catatan: Untuk mendapatkan dokumentasi gcloud yang lengkap di Google Cloud, baca panduan ringkasan gcloud CLI.

Tugas 1. Memahami tugas

Pet Theory ingin mengonversi invoice mereka menjadi PDF agar dapat dibuka pelanggan dengan mudah. Tim ingin konversi tersebut berjalan otomatis untuk mengurangi beban kerja Lisa, manajer kantor mereka.

Ruby, konsultan komputer Pet Theory, menerima pesan dari Patrick di IT...

Patrick

Patrick, Admin IT

Halo Ruby,

Setelah saya pelajari, tampaknya LibreOffice bagus untuk mengonversi banyak format file menjadi PDF.

Bisakah kita menjalankan LibreOffice di cloud tanpa harus mengelola server?

Patrick

RubyRuby, Konsultan Software

Halo Patrick,

Saya sudah menemukan solusi untuk situasi ini.

Saya baru saja menonton video menarik di YouTube dari Next 19 tentang Cloud Run. Sepertinya kita bisa menjalankan LibreOffice di lingkungan serverless dengan Cloud Run. Kita tidak perlu memelihara server.

Saya akan mengirimkan beberapa referensi untuk membantu Anda memulai.

Ruby

Bantu Patrick menyiapkan dan men-deploy Cloud Run.

Tugas 2. Mengaktifkan Cloud Run API

  1. Buka Navigation menu (Ikon Navigation menu) dan klik APIs & Services > Library. Di kotak penelusuran, ketik "Cloud Run" dan pilih Cloud Run Admin API dari daftar hasil.

  2. Klik Enable, lalu tekan tombol kembali di browser dua kali. Konsol Anda akan terlihat seperti berikut:

Hasil Cloud Run API

Tugas 3. Men-deploy layanan Cloud Run sederhana

Ruby telah mengembangkan prototipe Cloud Run dan ingin Patrick men-deploy-nya di Google Cloud. Sekarang, bantu Patrick membuat layanan Cloud Run PDF untuk Pet Theory.

  1. Buka sesi Cloud Shell baru dan jalankan perintah berikut untuk meng-clone repositori Pet Theory:

    git clone https://github.com/rosera/pet-theory.git
  2. Kemudian, ubah direktori kerja saat ini menjadi lab03:

    cd pet-theory/lab03
  3. Edit package.json dengan Editor Kode Cloud Shell atau editor teks pilihan Anda. Di bagian "scripts", tambahkan "start": "node index.js", seperti terlihat di bawah ini:

    ... "scripts": { "start": "node index.js", "test": "echo \"Error: no test specified\" && exit 1" }, ...
  4. Sekarang, jalankan perintah berikut di Cloud Shell untuk menginstal paket yang akan digunakan skrip konversi Anda:

    npm install express npm install body-parser npm install child_process npm install @google-cloud/storage
  5. Selanjutnya, buka file lab03/index.js dan tinjau kodenya.

    Aplikasi akan di-deploy sebagai layanan Cloud Run yang menerima POST HTTP. Jika permintaan POST adalah notifikasi Pub/Sub tentang file yang diupload, layanan akan menuliskan detail file ke log. Jika tidak, layanan akan menampilkan string "OK".

  6. Periksa file lab03/Dockerfile.

    File di atas disebut manifes dan berisi urutan langkah perintah Docker untuk membangun image. Setiap baris dimulai dengan perintah yang memberi tahu Docker cara memproses informasi berikut:

    • Baris pertama menunjukkan bahwa image dasar harus menggunakan node sebagai template untuk image yang akan dibuat.
    • Baris terakhir menunjukkan perintah yang harus dijalankan, yang dalam contoh ini disebut "npm start".
  7. Untuk membangun dan men-deploy REST API, gunakan Google Cloud Build. Jalankan proses ini untuk memulai proses build:

    gcloud builds submit \ --tag gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter

    Perintah ini akan membangun container dengan kode Anda dan menempatkannya di Artifact Registry project Anda.

  8. Kembali ke Konsol Cloud, buka Navigation menu, dan pilih Artifact Registry > Images. Anda akan melihat container Anda telah dihosting:

    Artifact Registry yang mencantumkan pdf-converter

Uji tugas yang sudah selesai

Klik Check my progress untuk memastikan Anda telah melakukan tugas di atas.

Membangun REST API sederhana
  1. Kembali ke tab editor kode Anda dan jalankan perintah berikut di Cloud Shell untuk men-deploy aplikasi Anda:

    gcloud run deploy pdf-converter \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter \ --platform managed \ --region {{{ project_0.default_region | Region }}} \ --no-allow-unauthenticated \ --max-instances=1
  2. Setelah deployment selesai, Anda akan melihat pesan seperti ini:

    Service [pdf-converter] revision [pdf-converter-00001] has been deployed and is serving 100 percent of traffic at https://pdf-converter-[hash].a.run.app
  3. Buat variabel lingkungan $SERVICE_URL untuk aplikasi ini agar Anda dapat mengaksesnya dengan mudah:

    SERVICE_URL=$(gcloud beta run services describe pdf-converter --platform managed --region {{{ project_0.default_region | Lab Region }}} --format="value(status.url)") echo $SERVICE_URL

Uji tugas yang sudah selesai

Klik Check my progress untuk memastikan Anda telah melakukan tugas di atas.

Membuat Revisi untuk Cloud Run
  1. Buat permintaan POST anonim ke layanan baru Anda:

    curl -X POST $SERVICE_URL CATATAN:
    Perintah ini akan menghasilkan pesan error `"Your client does not have permission to get the URL".` Tidak apa-apa; Anda tidak menginginkan layanan tersebut dapat dipanggil oleh pengguna anonim.
  2. Sekarang, cobalah memanggil layanan tersebut sebagai pengguna yang berwenang:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" $SERVICE_URL

    Jika mendapatkan respons "OK", Anda telah berhasil men-deploy layanan Cloud Run. Selamat!

Tugas 4. Memicu layanan Cloud Run saat file baru diupload

Setelah layanan Cloud Run tersebut berhasil di-deploy, Ruby ingin Patrick membuat area staging untuk data yang akan dikonversi. Bucket Cloud Storage akan menggunakan pemicu peristiwa untuk memberi tahu aplikasi saat ada file yang diupload dan perlu diproses.

  1. Jalankan perintah berikut untuk membuat bucket di Cloud Storage untuk dokumen yang diupload:

    gsutil mb gs://$GOOGLE_CLOUD_PROJECT-upload
  2. Dan bucket lainnya untuk PDF hasil proses:

    gsutil mb gs://$GOOGLE_CLOUD_PROJECT-processed
  3. Sekarang, kembali ke tab Konsol Cloud, buka Navigation menu, dan pilih Cloud Storage. Verifikasi bahwa bucket telah dibuat (akan ada bucket lain di sana, selain bucket yang digunakan oleh platform.)

Uji tugas yang sudah selesai

Klik Check my progress untuk memastikan Anda telah melakukan tugas di atas.

Membuat dua bucket Cloud Storage
  1. Di Cloud Shell, jalankan perintah berikut untuk memberi tahu Cloud Storage agar mengirim notifikasi Pub/Sub setiap kali ada file baru yang selesai diupload ke bucket dokumen:

    gsutil notification create -t new-doc -f json -e OBJECT_FINALIZE gs://$GOOGLE_CLOUD_PROJECT-upload

    Notifikasi ini akan diberi label dengan topik "new-doc".

Uji tugas yang sudah selesai

Klik Check my progress untuk memastikan Anda telah melakukan tugas di atas.

Membuat topik Pub/Sub untuk menangani notifikasi dari bucket Cloud Storage
  1. Kemudian, buat akun layanan baru yang akan digunakan Pub/Sub untuk memicu layanan Cloud Run:

    gcloud iam service-accounts create pubsub-cloud-run-invoker --display-name "PubSub Cloud Run Invoker"
  2. Beri akun layanan ini izin untuk memanggil layanan pengonversi PDF:

    gcloud beta run services add-iam-policy-binding pdf-converter \ --member=serviceAccount:pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \ --role=roles/run.invoker \ --platform managed \ --region {{{ project_0.default_region | Lab Region }}}
  3. Temukan nomor project Anda dengan menjalankan perintah berikut:

    gcloud projects list --filter="PROJECT_ID={{{ project_0.project_id | PROJECT_ID }}}"

    Anda akan menggunakan nilai Project Number di perintah berikutnya.

    PROJECT_ID: {{{ project_0.project_id | PROJECT_ID }}} NAME: {{{ project_0.project_id | PROJECT_ID }}} PROJECT_NUMBER: 103480415252
  4. Buat variabel lingkungan PROJECT_NUMBER

    PROJECT_NUMBER=$(gcloud projects list --filter="PROJECT_ID={{{ project_0.project_id | PROJECT_ID }}}" --format=json | jq -r .[0].projectNumber)
  5. Terakhir, buat langganan Pub/Sub sehingga pengonversi PDF dapat berjalan setiap kali ada pesan yang dipublikasikan di topik "new-doc".

    gcloud beta pubsub subscriptions create pdf-conv-sub \ --topic new-doc \ --push-endpoint=$SERVICE_URL \ --push-auth-service-account=pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com

Uji tugas yang sudah selesai

Klik Check my progress untuk memastikan Anda telah melakukan tugas di atas.

Membuat langganan Pub/Sub

Tugas 5. Melihat apakah layanan Cloud Run dipicu saat file diupload ke Cloud Storage

Untuk memverifikasi bahwa aplikasi mereka berfungsi sesuai harapan, Ruby meminta Patrick mengupload beberapa data percobaan ke bucket penyimpanan yang dimaksud dan kemudian memeriksa Cloud Logging.

  1. Salin beberapa file pengujian ke bucket upload:

    gsutil -m cp gs://spls/gsp644/* gs://$GOOGLE_CLOUD_PROJECT-upload
  2. Setelah proses upload selesai, kembali ke tab Konsol Cloud, Buka Navigation menu, dan pilih Logging dari bagian Operations.

  3. Di dropdown Resource, filter hasil ke Cloud Run Revision dan klik Apply. Kemudian, klik Run Query.

  4. Di Query results, temukan entri log yang diawali dengan file: dan klik entri tersebut. Kumpulan data file yang dikirim Pub/Sub ke layanan Cloud Run saat file baru diupload akan ditampilkan.

  5. Dapatkah Anda menemukan nama file yang Anda upload di objek ini?

    Hasil kueri

    Catatan:
    Jika entri log yang diawali dengan "file" tidak terlihat, coba klik tombol "load newer logs" di dekat bagian bawah halaman.
  6. Sekarang, kembali ke tab editor kode dan jalankan perintah berikut di Cloud Shell untuk membersihkan direktori upload dengan menghapus file yang ada di dalamnya:

    gsutil -m rm gs://$GOOGLE_CLOUD_PROJECT-upload/*

Tugas 6. Container

Patrick perlu mengonversi tumpukan invoice menjadi PDF agar pelanggan dapat membukanya. Ia mengirim email kepada Ruby untuk meminta bantuan...

Patrick

Patrick, Admin IT

Halo Ruby

Sesuai temuan Anda, saya rasa kita bisa mengotomatiskan proses ini, sekaligus beralih ke penggunaan PDF sebagai format invoice.

Kemarin saya sempat meluangkan waktu menulis kode dan membuat skrip Node.js untuk keperluan tersebut. Bisakah Anda memeriksanya?

Patrick

Patrick mengirimi Ruby fragmen kode yang ia tulis untuk menghasilkan PDF dari file:

const {promisify} = require('util'); const exec = promisify(require('child_process').exec); const cmd = 'libreoffice --headless --convert-to pdf --outdir ' + `/tmp "/tmp/${fileName}"`; const { stdout, stderr } = await exec(cmd); if (stderr) { throw stderr; }

Ruby membalas pesan Patrick...

Ruby

Ruby, Konsultan Software

Halo Patrick

Cloud Run menggunakan container, jadi kita perlu menyediakan aplikasi dalam format ini. Untuk langkah selanjutnya, kita perlu membuat manifes Dockerfile untuk aplikasi itu.

Kode Anda menggunakan LibreOffice. Bisakah Anda mengirimi saya perintah untuk menginstal software tersebut? Saya perlu menyertakannya dalam container.

Ruby

Patrick

Patrick, Admin IT

Halo Ruby

Bagus. Biasanya saya menginstal LibreOffice pada server di kantor dengan perintah ini:

apt-get update -y && apt-get install -y libreoffice && apt-get clean

Beri tahu saya jika perlu informasi lainnya.

Patrick

Untuk membangun container, sejumlah komponen harus berintegrasi:

Komponen: index.js, OfficeLibre, Express, body-parser, child_process, dan @google-cloud/storage

Mengupdate Manifes

Setelah semua file diidentifikasi, manifes dapat dibuat. Bantu Ruby menyiapkan dan men-deploy container.

Paket untuk LibreOffice sebelumnya tidak disertakan dalam container, yang berarti paket tersebut sekarang harus ditambahkan. Ruby sudah menerima perintah yang digunakan Patrick untuk membangun aplikasi dan akan menambahkannya sebagai perintah RUN dalam Dockerfile.

  1. Buka manifes Dockerfile dan tambahkan baris perintah RUN apt-get update -y && apt-get install -y libreoffice && apt-get clean seperti ditunjukkan di bawah:

    FROM {{{ project_0.startup_script.node_version | NODE_VERSION }}} RUN apt-get update -y \ && apt-get install -y libreoffice \ && apt-get clean WORKDIR /usr/src/app COPY package.json package*.json ./ RUN npm install --only=production COPY . . CMD [ "npm", "start" ]

Men-deploy layanan pdf-conversion versi baru

  1. Buka file index.js dan tambahkan persyaratan paket berikut di bagian atas file:

    const {promisify} = require('util'); const {Storage} = require('@google-cloud/storage'); const exec = promisify(require('child_process').exec); const storage = new Storage();
  2. Ganti app.post('/', async (req, res) dengan kode berikut:

    app.post('/', async (req, res) => { try { const file = decodeBase64Json(req.body.message.data); await downloadFile(file.bucket, file.name); const pdfFileName = await convertFile(file.name); await uploadFile(process.env.PDF_BUCKET, pdfFileName); await deleteFile(file.bucket, file.name); } catch (ex) { console.log(`Error: ${ex}`); } res.set('Content-Type', 'text/plain'); res.send('\n\nOK\n\n'); })
  3. Sekarang, tambahkan kode berikut, yang akan memproses dokumen LibreOffice, ke bagian bawah file:

    async function downloadFile(bucketName, fileName) { const options = {destination: `/tmp/${fileName}`}; await storage.bucket(bucketName).file(fileName).download(options); } async function convertFile(fileName) { const cmd = 'libreoffice --headless --convert-to pdf --outdir /tmp ' + `"/tmp/${fileName}"`; console.log(cmd); const { stdout, stderr } = await exec(cmd); if (stderr) { throw stderr; } console.log(stdout); pdfFileName = fileName.replace(/\.\w+$/, '.pdf'); return pdfFileName; } async function deleteFile(bucketName, fileName) { await storage.bucket(bucketName).file(fileName).delete(); } async function uploadFile(bucketName, fileName) { await storage.bucket(bucketName).upload(`/tmp/${fileName}`); }
  4. Pastikan file index.js Anda terlihat seperti berikut ini:

    Catatan:
    Untuk menghindari error format, sebaiknya ganti semua kode dalam file index.js Anda dengan kode contoh ini.
    const {promisify} = require('util'); const {Storage} = require('@google-cloud/storage'); const exec = promisify(require('child_process').exec); const storage = new Storage(); const express = require('express'); const bodyParser = require('body-parser'); const app = express(); app.use(bodyParser.json()); const port = process.env.PORT || 8080; app.listen(port, () => { console.log('Listening on port', port); }); app.post('/', async (req, res) => { try { const file = decodeBase64Json(req.body.message.data); await downloadFile(file.bucket, file.name); const pdfFileName = await convertFile(file.name); await uploadFile(process.env.PDF_BUCKET, pdfFileName); await deleteFile(file.bucket, file.name); } catch (ex) { console.log(`Error: ${ex}`); } res.set('Content-Type', 'text/plain'); res.send('\n\nOK\n\n'); }) function decodeBase64Json(data) { return JSON.parse(Buffer.from(data, 'base64').toString()); } async function downloadFile(bucketName, fileName) { const options = {destination: `/tmp/${fileName}`}; await storage.bucket(bucketName).file(fileName).download(options); } async function convertFile(fileName) { const cmd = 'libreoffice --headless --convert-to pdf --outdir /tmp ' + `"/tmp/${fileName}"`; console.log(cmd); const { stdout, stderr } = await exec(cmd); if (stderr) { throw stderr; } console.log(stdout); pdfFileName = fileName.replace(/\.\w+$/, '.pdf'); return pdfFileName; } async function deleteFile(bucketName, fileName) { await storage.bucket(bucketName).file(fileName).delete(); } async function uploadFile(bucketName, fileName) { await storage.bucket(bucketName).upload(`/tmp/${fileName}`); }
  • Logika utamanya ditampung dalam fungsi berikut:
const file = decodeBase64Json(req.body.message.data); await downloadFile(file.bucket, file.name); const pdfFileName = await convertFile(file.name); await uploadFile(process.env.PDF_BUCKET, pdfFileName); await deleteFile(file.bucket, file.name);

Setiap kali ada file yang diupload, layanan ini akan dipicu. Layanan menjalankan tugas berikut, satu tugas per baris perintah di atas:

  • Mengekstrak detail file dari notifikasi Pub/Sub.
  • Mendownload file dari Cloud Storage ke hard drive lokal. Ini sebenarnya bukan disk fisik, melainkan bagian dari memori virtual yang berperilaku seperti disk.
  • Mengonversi file yang sudah didownload menjadi PDF.
  • Mengupload file PDF ke Cloud Storage. Variabel lingkungan process.env.PDF_BUCKET berisi nama bucket Cloud Storage tempat menuliskan PDF. Anda akan menetapkan nilai ke variabel ini saat men-deploy layanan di bawah.
  • Menghapus file asli dari Cloud Storage.

Isi file index.js sisanya mengimplementasikan fungsi yang dipanggil oleh kode tingkat atas ini.

Sekarang, saatnya men-deploy layanan dan menetapkan variabel lingkungan PDF_BUCKET. Ada baiknya juga Anda mengalokasi 2 GB RAM untuk digunakan LibreOffice (lihat baris dengan opsi --memory).

  1. Jalankan perintah berikut untuk membangun container:

    gcloud builds submit \ --tag gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter
Catatan:
Ketik Y jika Anda menerima pop-up untuk mengaktifkan Cloud Build API

Uji tugas yang sudah selesai

Klik Check my progress untuk memastikan Anda telah melakukan tugas di atas.

Membuat build lain untuk REST API
  1. Sekarang, deploy versi terakhir aplikasi Anda:

    gcloud run deploy pdf-converter \ --image gcr.io/$GOOGLE_CLOUD_PROJECT/pdf-converter \ --platform managed \ --region {{{ project_0.default_region | Lab Region }}} \ --memory=2Gi \ --no-allow-unauthenticated \ --max-instances=1 \ --set-env-vars PDF_BUCKET=$GOOGLE_CLOUD_PROJECT-processed

Setelah LibreOffice menjadi bagian container, deployment build ini akan memerlukan waktu lebih lama daripada build sebelumnya. Manfaatkan untuk berdiri dan meregangkan otot selama beberapa menit.

Klik Check my progress untuk memverifikasi tujuan.

Membuat Revisi baru

Tugas 7. Menguji layanan pdf-conversion

  1. Begitu perintah deployment selesai, pastikan layanan di-deploy dengan benar dengan menjalankan:

    curl -X POST -H "Authorization: Bearer $(gcloud auth print-identity-token)" $SERVICE_URL
  2. Jika mendapatkan respons "OK", Anda berhasil men-deploy layanan Cloud Run yang telah diupdate. LibreOffice dapat mengonversi banyak jenis file menjadi PDF: DOCX, XLSX, JPG, PNG, GIF, dll.

  3. Jalankan perintah berikut untuk mengupload beberapa file contoh:

    gsutil -m cp gs://spls/gsp644/* gs://$GOOGLE_CLOUD_PROJECT-upload
  4. Kembali ke Konsol Cloud, buka Navigation menu dan pilih Cloud Storage. Buka bucket -upload dan klik tombol Refresh beberapa kali untuk melihat bagaimana file dihapus, satu per satu, saat dikonversi menjadi PDF.

  5. Kemudian, klik Buckets dari menu kiri dan klik bucket yang namanya diakhiri dengan "-processed". Bucket tersebut akan menampung versi PDF dari semua file. Silakan buka file-file PDF tersebut untuk memastikan konversinya diproses dengan benar:

    Catatan:
    Jalankan kembali perintah jika Anda tidak melihat semua file PDF hasil konversi di bucket -processed.

Selamat!

Pet Theory sekarang memiliki sistem untuk mengonversi arsip file lama mereka menjadi PDF. Cukup dengan mengupload file lama ke bucket "upload", layanan pengonversi pdf akan mengonversi file tersebut dan menuliskannya ke bucket "processed" sebagai PDF.

Lanjutkan perjalanan Serverless Anda dalam kursus Serverless Cloud Run Development. Anda akan membaca skenario bisnis fiktif dan membantu para karakter menerapkan rencana migrasi serverless mereka.

Sertifikasi dan pelatihan Google Cloud

...membantu Anda mengoptimalkan teknologi Google Cloud. Kelas kami mencakup keterampilan teknis dan praktik terbaik untuk membantu Anda memahami dengan cepat dan melanjutkan proses pembelajaran. Kami menawarkan pelatihan tingkat dasar hingga lanjutan dengan opsi on demand, live, dan virtual untuk menyesuaikan dengan jadwal Anda yang sibuk. Sertifikasi membantu Anda memvalidasi dan membuktikan keterampilan serta keahlian Anda dalam teknologi Google Cloud.

Manual Terakhir Diperbarui 28 Mei 2024

Lab Terakhir Diuji 28 Mei 2024

Hak cipta 2024 Google LLC Semua hak dilindungi undang-undang. Google dan logo Google adalah merek dagang dari Google LLC. Semua nama perusahaan dan produk lain mungkin adalah merek dagang masing-masing perusahaan yang bersangkutan.