GSP315

はじめに
チャレンジラボでは、シナリオと一連のタスクが提供されます。手順ガイドに沿って進める形式ではなく、コース内のラボで習得したスキルを駆使して、ご自身でタスクを完了していただきます。タスクが適切に完了したかどうかは、このページに表示される自動スコアリング システムで確認できます。
チャレンジラボは、Google Cloud の新しいコンセプトについて学習するためのものではありません。デフォルト値を変更する、エラー メッセージを読み調査を行ってミスを修正するなど、習得したスキルを応用する能力が求められます。
100% のスコアを達成するには、制限時間内に全タスクを完了する必要があります。
このラボは、「Google Cloud におけるアプリ開発環境の設定」スキルバッジに登録している受講者を対象としています。準備が整ったらチャレンジを開始しましょう。
設定
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
- ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。
チャレンジ シナリオ
Jooli Inc. のジュニア クラウド エンジニアという新たな役割を任されて間もないあなたは、各チームが Google Cloud のリソースを作成して管理できるようサポートしています。
これらのタスクのスキルや知識があるという前提のため、手順ガイドは提供されません。
チャレンジ
あなたには任務が与えられています。それは、新たに結成された開発チームが取り組んでいる、写真を保管して整理するための Memories という新しいプロジェクトの初期の作業をサポートすることです。Memories チームによるアプリケーション開発環境の初期構成を支援することが求められているのです。
次のタスクを行うよう依頼されています。
- 写真を保管するためのバケットを作成する。
- Cloud Run functions で使用する Pub/Sub トピックを作成する。
- Cloud Run functions の関数を作成する。
- 前任のクラウド エンジニアのアクセス権限を Memories プロジェクトから削除する。
従う必要のある Jooli Inc. の規則は以下のとおりです。
- 特別な指示がない限り、すべてのリソースを リージョンの ゾーンに作成する。
- プロジェクトの Virtual Private Cloud(VPC)を使用する。
- 通常は team-resource の形式で命名する(たとえば、インスタンスには nucleus-webserver1 のような名前を指定します)。
- 費用対効果の高いリソースサイズを割り当てる。プロジェクトはモニタリングされており、リソースが過剰に使用された場合、そのリソースを含むプロジェクトは終了する(ご自身のプロジェクトも終了される可能性があります)ので注意が必要です。モニタリング チームからのガイダンスによれば、指示がない限り、小規模の Linux VM には e2-micro を使用し、Kubernetes ノードなどの Windows アプリケーションまたはその他のアプリケーションには e2-medium を使用することとされています。
それぞれのタスクについて以下に詳しく説明します。それでは始めましょう。
タスク 1. バケットの作成
写真を保管するための というバケットを作成する必要があります。
リソースが リージョンの ゾーンに作成されることを確認してください。
[進行状況を確認] をクリックして、目標を確認します。
というバケットを作成する
タスク 2. Pub/Sub トピックを作成する
メッセージを送信するために、Cloud Run functions の という Pub/Sub トピックを作成します。
[進行状況を確認] をクリックして、目標を確認します。
という Pub/Sub トピックを作成する
タスク 3. サムネイル用の Cloud Run functions の関数を作成する
関数を作成する
バケットに追加される画像のサムネイルを作成する、 という Cloud Run functions の関数を作成します。
Cloud Run functions の関数が Cloud Run functions 環境(第 2 世代)を使用していることを確認してください。
リソースが リージョンの ゾーンに作成されることを確認してください。
-
Node.js 22
を使用して、 という Cloud Run functions の関数(第 2 世代)を作成します。
注:
この Cloud Run functions の関数は、タスク 1 で作成したバケット内にオブジェクトが作成されるたびに実行される必要があります。Cloud Run functions の関数の処理中に、API を有効にする権限、またはサービス アカウントにロールを付与する権限をリクエストされる場合があります。リクエストに応じて、必要な API を有効にしてロールを付与してください。
-
エントリ ポイント(実行する関数)を に、トリガーを Cloud Storage
に設定します。
-
index.js
に次のコードを追加します。
const functions = require('@google-cloud/functions-framework');
const { Storage } = require('@google-cloud/storage');
const { PubSub } = require('@google-cloud/pubsub');
const sharp = require('sharp');
functions.cloudEvent('{{{ project_0.startup_script.function }}}', async cloudEvent => {
const event = cloudEvent.data;
console.log(`Event: ${JSON.stringify(event)}`);
console.log(`Hello ${event.bucket}`);
const fileName = event.name;
const bucketName = event.bucket;
const size = "64x64";
const bucket = new Storage().bucket(bucketName);
const topicName = "{{{ project_0.startup_script.topic }}}";
const pubsub = new PubSub();
if (fileName.search("64x64_thumbnail") === -1) {
// サムネイルが存在しない場合、ファイル名の拡張子を取得
const filename_split = fileName.split('.');
const filename_ext = filename_split[filename_split.length - 1].toLowerCase();
const filename_without_ext = fileName.substring(0, fileName.length - filename_ext.length - 1); // fix sub string to remove the dot
if (filename_ext === 'png' || filename_ext === 'jpg' || filename_ext === 'jpeg') {
// 現時点では png と jpg のみのサポート
console.log(`Processing Original: gs://${bucketName}/${fileName}`);
const gcsObject = bucket.file(fileName);
const newFilename = `${filename_without_ext}_64x64_thumbnail.${filename_ext}`;
const gcsNewObject = bucket.file(newFilename);
try {
const [buffer] = await gcsObject.download();
const resizedBuffer = await sharp(buffer)
.resize(64, 64, {
fit: 'inside',
withoutEnlargement: true,
})
.toFormat(filename_ext)
.toBuffer();
await gcsNewObject.save(resizedBuffer, {
metadata: {
contentType: `image/${filename_ext}`,
},
});
console.log(`Success: ${fileName} → ${newFilename}`);
await pubsub
.topic(topicName)
.publishMessage({ data: Buffer.from(newFilename) });
console.log(`Message published to ${topicName}`);
} catch (err) {
console.error(`Error: ${err}`);
}
} else {
console.log(`gs://${bucketName}/${fileName} is not an image I can handle`);
}
} else {
console.log(`gs://${bucketName}/${fileName} already has a thumbnail`);
}
});
-
package.json
に次のコードを追加します。
{
"name": "thumbnails",
"version": "1.0.0",
"description": "Create Thumbnail of uploaded image",
"scripts": {
"start": "node index.js"
},
"dependencies": {
"@google-cloud/functions-framework": "^3.0.0",
"@google-cloud/pubsub": "^2.0.0",
"@google-cloud/storage": "^6.11.0",
"sharp": "^0.32.1"
},
"devDependencies": {},
"engines": {
"node": ">=4.3.2"
}
}
注: 必要なすべての権限がサービス エージェントに反映されるまでに数分かかることがある旨の権限拒否エラーが発生した場合は、数分待ってからもう一度実行してください。適切なロール(Eventarc サービス エージェント、Eventarc イベント受信者、サービス アカウント トークン作成者、Pub/Sub パブリッシャー)が、正しいサービス アカウントに割り当てられていることを確認してください。
関数をテストする
- 任意の PNG または JPG 画像を バケットにアップロードします。
注: または、https://storage.googleapis.com/cloud-training/gsp315/map.jpg
にある画像をマシンにダウンロードして、バケットにアップロードすることもできます。
アップロードするとすぐに、サムネイル画像が表示されます(バケットの詳細ページで [更新] を使用してください)。
画像ファイルをアップロードしたら、以下の [進行状況を確認] をクリックできます。サムネイル画像が作成されるまで待つ必要はありません。
省略可: 関数が正常にデプロイされてもバケットにサムネイル画像が表示されない場合は、[トリガー] タブに、関数に対して以前に指定したトリガー情報が表示されていることを確認します。以前にエラーが発生した場合は、トリガー情報が正しく保存されていない可能性があります。関数の [トリガー] タブに Cloud Storage トリガーが表示されない場合は、トリガーを再作成します(サービスのトリガーを作成するというドキュメント ページをご覧ください)。その後、新しいファイルを再度アップロードして再度テストを実行します(新しいファイルを追加した後、ページを更新します)。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Run functions の関数を確認する
タスク 4. 前任のクラウド エンジニアを削除する
このプロジェクトでは 2 名のユーザーが定義されていることがわかります。
- 1 つはあなたのアカウント(オーナーのロールの )。
- もう 1 つは前任のクラウド エンジニアのアカウント(閲覧者のロールの )。
- 前任のクラウド エンジニアのアクセス権限をプロジェクトから削除してください。
[進行状況を確認] をクリックして、目標を確認します。
前任のクラウド エンジニアを削除する
お疲れさまでした

次のステップと詳細情報
このスキルバッジは、Google の学習プログラム「Perform Foundational Infrastructure Tasks in Google Cloud」および「Cloud Architect」の一部です。学習プログラムの他のスキルバッジを取得済みの場合は、他の登録可能なスキルバッジを Google Cloud Skills Boost カタログで検索してみてください。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2025 年 3 月 8 日
ラボの最終テスト日: 2025 年 3 月 8 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。