arrow_back

Go と Cloud Run を使用した PDF の作成

ログイン 参加
700 以上のラボとコースにアクセス

Go と Cloud Run を使用した PDF の作成

ラボ 1時間 universal_currency_alt クレジット: 5 show_chart 中級
info このラボでは、学習をサポートする AI ツールが組み込まれている場合があります。
700 以上のラボとコースにアクセス

GSP762

Google Cloud セルフペース ラボのロゴ

概要

このラボでは、Cloud Run 上で PDF コンバータ ウェブアプリをビルドします。Cloud Run はサーバーレス サービスで、Google ドライブに保存されているファイルを PDF に自動変換し、別の Google ドライブ フォルダに保存する機能を持っています。

シナリオ

このラボでは、Pet Theory 獣医クリニックが顧客の利便性向上のために請求書を PDF に自動変換する取り組みを支援します。

アーキテクチャの図

このラボでは、Google API を使用する必要があります。次の API はすでに有効になっています。

名前 API
Cloud Build cloudbuild.googleapis.com
Cloud Storage storage-component.googleapis.com
Cloud Run Admin run.googleapis.com

目標

このラボでは、次のタスクの実行方法について学びます。

  • ラボのソースコードをダウンロードする。
  • Go アプリケーションをコンテナに変換する。
  • Google Cloud Build でコンテナをビルドする。
  • クラウドでファイルを PDF ファイルに変換する Cloud Run サービスを作成する。
  • サービス アカウントを作成して権限を追加する。
  • Cloud Storage 通知のトリガーを開始する。
  • Cloud Storage でイベント処理を使用する。

設定と要件

[ラボを開始] ボタンをクリックする前に

こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。

このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
  • ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるダイアログでお支払い方法を選択してください。 左側の [ラボの詳細] ペインには、以下が表示されます。

    • [Google Cloud コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google Cloud コンソールを開く] をクリックします(Chrome ブラウザを使用している場合は、右クリックして [シークレット ウィンドウで開く] を選択します)。

    ラボでリソースがスピンアップし、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、下のユーザー名をコピーして、[ログイン] ダイアログに貼り付けます。

    {{{user_0.username | "Username"}}}

    [ラボの詳細] ペインでもユーザー名を確認できます。

  4. [次へ] をクリックします。

  5. 以下のパスワードをコピーして、[ようこそ] ダイアログに貼り付けます。

    {{{user_0.password | "Password"}}}

    [ラボの詳細] ペインでもパスワードを確認できます。

  6. [次へ] をクリックします。

    重要: ラボで提供された認証情報を使用する必要があります。Google Cloud アカウントの認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  7. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後、このタブで Google Cloud コンソールが開きます。

注: Google Cloud のプロダクトやサービスにアクセスするには、ナビゲーション メニューをクリックするか、[検索] フィールドにサービス名またはプロダクト名を入力します。 ナビゲーション メニュー アイコンと検索フィールド

Cloud Shell をアクティブにする

Cloud Shell は、開発ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Cloud Shell を使用すると、コマンドラインで Google Cloud リソースにアクセスできます。

  1. Google Cloud コンソールの上部にある「Cloud Shell をアクティブにする」アイコン 「Cloud Shell をアクティブにする」アイコン をクリックします。

  2. ウィンドウで次の操作を行います。

    • Cloud Shell 情報ウィンドウで操作を進めます。
    • Cloud Shell が認証情報を使用して Google Cloud API を呼び出すことを承認します。

接続した時点で認証が完了しており、プロジェクトに各自の Project_ID が設定されます。出力には、このセッションの PROJECT_ID を宣言する次の行が含まれています。

Your Cloud Platform project in this session is set to {{{project_0.project_id | "PROJECT_ID"}}}

gcloud は Google Cloud のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

  1. (省略可)次のコマンドを使用すると、有効なアカウント名を一覧表示できます。
gcloud auth list
  1. [承認] をクリックします。

出力:

ACTIVE: * ACCOUNT: {{{user_0.username | "ACCOUNT"}}} To set the active account, run: $ gcloud config set account `ACCOUNT`
  1. (省略可)次のコマンドを使用すると、プロジェクト ID を一覧表示できます。
gcloud config list project

出力:

[core] project = {{{project_0.project_id | "PROJECT_ID"}}} 注: Google Cloud における gcloud ドキュメントの全文については、gcloud CLI の概要ガイドをご覧ください。

タスク 1. ソースコードを取得する

このタスクでは、このラボで必要なコードをダウンロードして、作業を開始します。

  1. Cloud Shell で次のコマンドを実行して、ラボアカウントを有効にします。

    gcloud auth list --filter=status:ACTIVE --format="value(account)"
  2. 次のコマンドを実行して、Pet Theory リポジトリのクローンを作成します。

    git clone https://github.com/Deleplace/pet-theory.git
  3. 次のコマンドを実行して、正しいディレクトリに移動します。

    cd pet-theory/lab03

Cloud Shell IDE で Gemini Code Assist を有効にする

Cloud Shell などの統合開発環境(IDE)で Gemini Code Assist を使用して、コードに関するガイダンスを受けたり、コードの問題を解決したりできます。使用を開始する前に、Gemini Code Assist を有効にする必要があります。

  1. Cloud Shell で、次のコマンドを使用して Gemini for Google Cloud API を有効にします。
gcloud services enable cloudaicompanion.googleapis.com
  1. Cloud Shell ツールバーの [エディタを開く] をクリックします。
注: Cloud Shell エディタを開くには、Cloud Shell ツールバーの [エディタを開く] をクリックします。必要に応じて、[エディタを開く] または [ターミナルを開く] をクリックして、Cloud Shell とコードエディタを切り替えることができます。
  1. 左側のペインで [設定] アイコンをクリックし、[設定] ビューで「Gemini Code Assist」を検索します。

  2. [Geminicodeassist: Enable] のチェックボックスがオンになっていることを確認し、[設定] を閉じます。

  3. 画面下部のステータスバーで [Cloud Code - No Project] をクリックします。

  4. 指示に従ってプラグインを承認します。プロジェクトが自動的に選択されない場合は、[Google Cloud プロジェクトを選択する] をクリックして を選択します。

  5. ステータスバーの Cloud Code ステータス メッセージに Google Cloud プロジェクト()が表示されていることを確認します。

タスク 2. 請求書のマイクロサービスを作成する

このタスクでは、リクエストを処理する Go アプリケーションを作成します。アーキテクチャ図に記載されているように、Cloud Storage をソリューションの一部として統合します。

  1. Cloud Shell エディタのファイル エクスプローラで、pet-theory > lab03 > server.go に移動します。

  2. server.go ファイルを開きます。この操作により、エディタの右上隅に Gemini Code Assist: Smart Actions アイコンが表示され、Gemini Code Assist が有効になります。

  3. server.go ソースコードを開き、次のコードと同じになるように編集します。

    package main import ( "fmt" "log" "net/http" "os" "os/exec" "regexp" "strings" ) func main() { http.HandleFunc("/", process) port := os.Getenv("PORT") if port == "" { port = "8080" log.Printf("Defaulting to port %s", port) } log.Printf("Listening on port %s", port) err := http.ListenAndServe(fmt.Sprintf(":%s", port), nil) log.Fatal(err) } func process(w http.ResponseWriter, r *http.Request) { log.Println("Serving request") if r.Method == "GET" { fmt.Fprintln(w, "Ready to process POST requests from Cloud Storage trigger") return } // // Cloud Storage オブジェクト メタデータを含むリクエスト本文を読み取る // gcsInputFile, err1 := readBody(r) if err1 != nil { log.Printf("Error reading POST data: %v", err1) w.WriteHeader(http.StatusBadRequest) fmt.Fprintf(w, "Problem with POST data: %v \n", err1) return } // // 作業ディレクトリ(並行処理に対応) localDir, err := os.MkdirTemp("", "") if err != nil { log.Printf("Error creating local temp dir: %v", err) w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Could not create a temp directory on server. \n") return } defer os.RemoveAll(localDir) // // Cloud Storage から入力ファイルをダウンロードする // localInputFile, err2 := download(gcsInputFile, localDir) if err2 != nil { log.Printf("Error downloading Cloud Storage file [%s] from bucket [%s]: %v", gcsInputFile.Name, gcsInputFile.Bucket, err2) w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Error downloading Cloud Storage file [%s] from bucket [%s]", gcsInputFile.Name, gcsInputFile.Bucket) return } // // LibreOffice を使用してローカル入力ファイルをローカル PDF ファイルに変換する // localPDFFilePath, err3 := convertToPDF(localInputFile.Name(), localDir) if err3 != nil { log.Printf("Error converting to PDF: %v", err3) w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Error converting to PDF.") return } // // 生成した PDF を Cloud Storage にアップロードする // targetBucket := os.Getenv("PDF_BUCKET") err4 := upload(localPDFFilePath, targetBucket) if err4 != nil { log.Printf("Error uploading PDF file to bucket [%s]: %v", targetBucket, err4) w.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(w, "Error downloading Cloud Storage file [%s] from bucket [%s]", gcsInputFile.Name, gcsInputFile.Bucket) return } // // 元の入力ファイルを Cloud Storage から削除する // err5 := deleteGCSFile(gcsInputFile.Bucket, gcsInputFile.Name) if err5 != nil { log.Printf("Error deleting file [%s] from bucket [%s]: %v", gcsInputFile.Name, gcsInputFile.Bucket, err5) // これはブロッキング エラーではない // PDF が正常に生成され、アップロードされた } log.Println("Successfully produced PDF") fmt.Fprintln(w, "Successfully produced PDF") } func convertToPDF(localFilePath string, localDir string) (resultFilePath string, err error) { log.Printf("Converting [%s] to PDF", localFilePath) cmd := exec.Command("libreoffice", "--headless", "--convert-to", "pdf", "--outdir", localDir, localFilePath) cmd.Stdout, cmd.Stderr = os.Stdout, os.Stderr log.Println(cmd) err = cmd.Run() if err != nil { return "", err } pdfFilePath := regexp.MustCompile(`\.\w+$`).ReplaceAllString(localFilePath, ".pdf") if !strings.HasSuffix(pdfFilePath, ".pdf") { pdfFilePath += ".pdf" } log.Printf("Converted %s to %s", localFilePath, pdfFilePath) return pdfFilePath, nil }
  4. Gemini Code Assist: Smart Actions アイコン Gemini Code Assist: Smart Actions をクリックし、[この内容を説明] を選択します。

  5. Gemini Code Assist により、「この内容を説明」というプロンプトが事前入力されたチャットペインが開きます。Code Assist チャットのインライン テキスト ボックスで、事前入力されたプロンプトを次のプロンプトに置き換えて、[送信] をクリックします。

あなたは Cymbal AI のエキスパート Go デベロッパーです。新しいチームメンバーは、このサーバーの実装に慣れていません。この「server.go」ファイルについて、コードで使用されている主要なコンポーネントを分解して詳しく説明してください。 改善案の提案がある場合でも、このファイルを更新しないでください。

server.go ファイルのコードの説明が、Gemini Code Assist のチャットに表示されます。

  1. Cloud Shell ターミナルで次のコマンドを実行して、アプリケーションをビルドします。

    go build -o server

    このトップレベルのコードによって呼び出される関数はソースファイルにあります。

    • server.go
    • notification.go
    • gcs.go

アプリケーションが正常にビルドされたので、PDF コンバータ サービスを作成できます。

タスク 3. PDF コンバータ サービスを作成する

PDF サービスでは、ファイルが指定ストレージにアップロードされるたびに、Cloud Run と Cloud Storage を使ってプロセスが開始されます。

そのために、Cloud Pub/Sub と一般的なイベント通知パターンを併用することにしました。これにより、アプリケーションは情報の処理のみに集中できるようになります。情報の受け渡しは他のサービスが担当するため、アプリケーションをシンプルに保てます。

請求書モジュールをビルドするには、2 つのコンポーネントを統合する必要があります。

2 つのコンポーネント、サーバーと LibreOffice を含むコンテナ

LibreOffice パッケージを追加すると、アプリケーションで使用できるようになります。

  1. [エディタを開く] で、既存の Dockerfile マニフェストを開き、次のようにファイルを更新します。

    FROM amd64/debian RUN apt-get update -y \ && apt-get install -y libreoffice \ && apt-get clean WORKDIR /usr/src/app COPY server . CMD [ "./server" ]
  2. 更新した Dockerfile保存します。

  3. Gemini Code Assist: Smart Actions アイコン Gemini Code Assist: Smart Actions をクリックし、[この内容を説明] を選択します。

  4. Gemini Code Assist により、「この内容を説明」というプロンプトが事前入力されたチャットペインが開きます。Code Assist チャットのインライン テキスト ボックスで、事前入力されたプロンプトを次のプロンプトに置き換えて、[送信] をクリックします。

あなたは Cymbal AI のシニア DevOps エンジニアです。新しいチームメンバーから Dockerfile について説明してほしいと頼まれました。この Dockerfile の内容・構造、使用命令とベストプラクティスを包括的に説明してください。 改善案の提案がある場合でも、このファイルを更新しないでください。

Dockerfile ファイルのコードの説明が Gemini Code Assist のチャットに表示されます。

  1. Cloud Build を使って pdf-converter イメージの再ビルドを開始します。

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

    [進行状況を確認] をクリックして、上記のタスクを実行したことを確認します。

    Cloud Build でイメージをビルドする
  2. 更新した PDF コンバータ サービスをデプロイします。

    注: LibreOffice の処理には、RAM を 2 GB に指定することをおすすめします。--memory オプションの行をご覧ください。
  3. 次のコマンドを実行し、コンテナをビルドしてデプロイします。

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

    [進行状況を確認] をクリックして、このタスクを実行したことを確認します。

    PDF コンバータ サービスをデプロイする

Cloud Run サービスが正常にデプロイされました。しかし、デプロイしたアプリケーションには適切なアクセス権が必要です。

タスク 4. サービス アカウントを作成する

サービス アカウントは、Google API へのアクセス権を持つ特殊なタイプのアカウントです。

このラボで Cloud Storage イベントを処理する際は、サービス アカウントを使って Cloud Run にアクセスします。Cloud Storage は、イベントのトリガーに使用できる豊富な通知機能をサポートしています。

このタスクでは、ファイルのアップロード時にアプリケーションへ通知する機能を構成します。

  1. ナビゲーション メニュー > [Cloud Storage] をクリックして、2 つのバケットが作成されたことを確認します。次のように表示されます。

    • -processed
    • -upload
  2. 新しいファイルがアップロード バケット(末尾が「-upload」)にアップロードされたことを示す Pub/Sub 通知を作成します。通知は Pub/Sub トピック「new-doc」にパブリッシュされます。

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

    想定される出力:

    Created Cloud Pub/Sub topic projects/{{{project_0.project_id | "PROJECT_ID"}}}/topics/new-doc Created notification config projects/_/buckets/{{{project_0.project_id | "PROJECT_ID"}}}-upload/notificationConfigs/1
  3. 新しいサービス アカウントを作成して、Cloud Run サービスをトリガーします。

    gcloud iam service-accounts create pubsub-cloud-run-invoker --display-name "PubSub Cloud Run Invoker"

    想定される出力:

    Created service account [pubsub-cloud-run-invoker].
  4. PDF コンバータ サービスを呼び出す権限をサービス アカウントに付与します。

    gcloud run services add-iam-policy-binding pdf-converter \ --member=serviceAccount:pubsub-cloud-run-invoker@$GOOGLE_CLOUD_PROJECT.iam.gserviceaccount.com \ --role=roles/run.invoker \ --region {{{ project_0.default_region | "REGION" }}} \ --platform managed

    想定される出力:

    Updated IAM policy for service [pdf-converter]. bindings: - members: - serviceAccount:pubsub-cloud-run-invoker@{{{project_0.project_id | "PROJECT_ID"}}}.iam.gserviceaccount.com role: roles/run.invoker etag: BwYYfbXS240= version: 1
  5. 次のコマンドを実行して、プロジェクト番号を見つけます。

    PROJECT_NUMBER=$(gcloud projects list \ --format="value(PROJECT_NUMBER)" \ --filter="$GOOGLE_CLOUD_PROJECT")
  6. プロジェクトで Cloud Pub/Sub 認証トークンを作成できるようにします。

    gcloud projects add-iam-policy-binding $GOOGLE_CLOUD_PROJECT \ --member=serviceAccount:{{{ project_0.project_id | "PROJECT_ID" }}}@{{{ project_0.project_id | "PROJECT_ID" }}}.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator

    [進行状況を確認] をクリックして、このタスクを実行したことを確認します。

    サービス アカウントを作成する

サービス アカウントが作成され、Cloud Run サービスの呼び出しに使用できるようになりました。

タスク 5. Cloud Run サービスをテストする

次へ進む前に、デプロイされたサービスをテストする必要があります。このサービスは認証が必要なため、実際に非公開であることを確認するテストを行います。

  1. 環境変数 $SERVICE_URL にサービスの URL を保存します。

    SERVICE_URL=$(gcloud run services describe pdf-converter \ --platform managed \ --region {{{ project_0.default_region | "REGION" }}} \ --format "value(status.url)")
  2. SERVICE URL を表示します。

    echo $SERVICE_URL
  3. 新しいサービスに匿名の GET リクエストを行います。

    curl -X GET $SERVICE_URL

    想定される出力:

    <html><head> <meta http-equiv="content-type" content="text/html;charset=utf-8"> <title>403 Forbidden</title> </head> <body text=#000000 bgcolor=#ffffff> <h1>Error: Forbidden</h1> <h2>Your client does not have permission to get URL <code>/</code> from this server.</h2> <h2></h2> 注: 匿名の GET リクエストを実行すると、「"Your client does not have permission to get URL」というエラー メッセージが表示されます。 これは「匿名ユーザーはサービスを呼び出せない」ということですので、表示されても問題ありません。
  4. 次に、承認されたユーザーとしてサービスを呼び出してみます。

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

    想定される出力:

    Ready to process POST requests from Cloud Storage trigger

認証された Cloud Run サービスを正常にデプロイできました。

タスク 6. Cloud Storage トリガーを構成する

新しいコンテンツが Cloud Storage にアップロードされたときに処理を実行するには、既存の Pub/Sub トピックにサブスクリプションを追加します。

注: 新しいコンテンツがアップロードされると、Cloud Storage の通知が自動的にトピックへメッセージを送信します。通知を使用することで、追加コードを記述しなくても、イベントに応答する強力なアプリケーションを作成できます。
  • 通知メッセージがトピック new-doc にパブリッシュされるたびに PDF コンバータが実行されるように、Pub/Sub サブスクリプションを作成します。

    gcloud 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

    想定される出力:

    Created subscription [projects/{{{ project_0.project_id| "PROJECT_ID" }}}/subscriptions/pdf-conv-sub].

    [進行状況を確認] をクリックして、このタスクを実行したことを確認します。

    Pub/Sub サブスクリプションを確認する

これで、ファイルがアップロードされるたびに、Pub/Sub サブスクリプションとサービス アカウントが連携するようになりました。これにより、サービス アカウントが PDF コンバータの Cloud Run サービスを開始します。

タスク 7. Cloud Storage の通知をテストする

Cloud Run サービスをテストするには、使用可能なサンプル ファイルを利用します。

  1. テストファイルをアップロード バケットにコピーします。

    gsutil -m cp -r gs://spls/gsp762/* gs://$GOOGLE_CLOUD_PROJECT-upload

    想定される出力:

    Copying gs://spls/gsp762/cat-and-mouse.jpg [Content-Type=image/jpeg]... Copying gs://spls/gsp762/file-sample_100kB.doc [Content-Type=application/msword]... Copying gs://spls/gsp762/file-sample_500kB.docx [Content-Type=application/vnd.openxmlformats-officedocument.wordprocessingml.document]... Copying gs://spls/gsp762/file_example_XLS_10.xls [Content-Type=application/vnd.ms-excel]... Copying gs://spls/gsp762/file-sample_1MB.docx [Content-Type=application/vnd.openxmlformats-officedocument.wordprocessingml.document]... Copying gs://spls/gsp762/file_example_XLSX_50.xlsx [Content-Type=application/vnd.openxmlformats-officedocument.spreadsheetml.sheet]... Copying gs://spls/gsp762/file_example_XLS_100.xls [Content-Type=application/vnd.ms-excel]... Copying gs://spls/gsp762/file_example_XLS_50.xls [Content-Type=application/vnd.ms-excel]... Copying gs://spls/gsp762//Copy of cat-and-mouse.jpg [Content-Type=image/jpeg]...
  2. Cloud コンソールで [Cloud Storage] > [バケット] をクリックし、末尾が「-upload」のバケットをクリックします。

  3. [更新] ボタンを数回クリックし、PDF への変換に伴いファイルが 1 つずつ削除されるのを確認します。

  4. 次に、[バケット] をクリックし、末尾が「-processed」のバケットをクリックします。そのバケットには、すべてのファイルの PDF 版が含まれているはずです。

    注: ファイルの処理には数分かかることがあります。[更新] ボタンを使って、処理の完了状況を確認できます。
  5. PDF ファイルを開いて、適切に変換されていることを確認してください。

  6. 処理が完了したら、ナビゲーション メニュー > [Cloud Run] をクリックし、pdf-converter サービスをクリックします。

  7. [LOGS] タブを選択し、「Converting」でフィルタして変換されたファイルを確認します。

  8. ナビゲーション メニュー > [Cloud Storage] に移動して、末尾が「-upload」のバケットを開き、アップロードしたファイルがすべて処理されたことを確認します。

新しいサービスの構築に成功し、Cloud Storage にアップロードされたファイルから PDF を作成できるようになりました。

お疲れさまでした

このラボでは、Go アプリケーションをコンテナに変換する方法を学び、Google Cloud Build を使用してコンテナを構築し、Cloud Run サービスを起動しました。

また、サービス アカウントによる権限付与と Cloud Storage のイベント処理を活用するスキルも習得しました。これらはすべて、ドキュメントを PDF に変換して「processed」バケットに保存する PDF コンバータ サービスの運用に不可欠な要素です。

Google Cloud トレーニングと認定資格

Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。

マニュアルの最終更新日: 2025 年 8 月 18 日

ラボの最終テスト日: 2025 年 8 月 11 日

Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。

始める前に

  1. ラボでは、Google Cloud プロジェクトとリソースを一定の時間利用します
  2. ラボには時間制限があり、一時停止機能はありません。ラボを終了した場合は、最初からやり直す必要があります。
  3. 画面左上の [ラボを開始] をクリックして開始します

シークレット ブラウジングを使用する

  1. ラボで使用するユーザー名パスワードをコピーします
  2. プライベート モードで [コンソールを開く] をクリックします

コンソールにログインする

    ラボの認証情報を使用して
  1. ログインします。他の認証情報を使用すると、エラーが発生したり、料金が発生したりする可能性があります。
  2. 利用規約に同意し、再設定用のリソースページをスキップします
  3. ラボを終了する場合や最初からやり直す場合を除き、[ラボを終了] はクリックしないでください。クリックすると、作業内容がクリアされ、プロジェクトが削除されます

このコンテンツは現在ご利用いただけません

利用可能になりましたら、メールでお知らせいたします

ありがとうございます。

利用可能になりましたら、メールでご連絡いたします

1 回に 1 つのラボ

既存のラボをすべて終了して、このラボを開始することを確認してください

シークレット ブラウジングを使用してラボを実行する

このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウントの競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。