ARC100

概要
チャレンジラボでは、シナリオと一連のタスクが提供されます。手順ガイドに沿って進める形式ではなく、コース内のラボで習得したスキルを駆使して、ご自身でタスクを完了していただきます。タスクが適切に完了したかどうかは、このページに表示される自動スコアリング システムで確認できます。
チャレンジラボは、Google Cloud の新しいコンセプトについて学習するためのものではありません。デフォルト値を変更する、エラー メッセージを読み調査を行ってミスを修正するなど、習得したスキルを応用する能力が求められます。
100% のスコアを達成するには、制限時間内に全タスクを完了する必要があります。
設定
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
- ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。
チャレンジ シナリオ
あなたは、新たにジュニア クラウド エンジニアの職務についたところです。各チームが Google Cloud のリソースを作成して管理できるようサポートしており、
これらのタスクのスキルや知識がすでにあると想定されています。
チャレンジ
あなたには任務が与えられています。それは、新たに結成された開発チームが取り組んでいる、写真を保管して整理するための Memories という新しいプロジェクトの初期の作業をサポートすることです。Memories チームによるアプリケーション開発環境の初期構成を支援するために、次のタスクを行うよう依頼されています。
- 写真を保管するためのバケットを作成する。
- Cloud Run functions の関数で使用する Pub/Sub トピックを作成する。
- Cloud Run functions の関数を作成する
以下のような基準に従う必要があります。
- 特別な指示がない限り、すべてのリソースを リージョンに作成する。
- プロジェクトの VPC を使用する。
- 通常は team-resource の形式で命名する(たとえば、インスタンスには kraken-webserver1 のような名前を指定します)。
- 費用対効果の高いリソースサイズを割り当てる。プロジェクトはモニタリングされており、リソースが過剰に使用された場合、そのリソースを含むプロジェクトは終了する(ご自身のプロジェクトも終了される可能性があります)ため注意が必要です。モニタリング チームが進んで共有しているガイダンスとして、指示がない限り、小規模の Linux VMには f1-micro を使用し、Kubernetes ノードなどの Windows アプリケーションまたはその他のアプリケーションには n1-standard-1 を使用します。
それぞれのタスクについて以下に詳しく説明します。それでは始めましょう。
タスク 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 Storage
に設定します。
注:
この Cloud Run functions の関数は、タスク 1 で作成したバケット内にオブジェクトが作成されるたびに実行される必要があります。Cloud Run functions の関数の処理中に、API を有効にする権限、またはサービス アカウントにロールを付与する権限をリクエストされる場合があります。リクエストに応じて、必要な API を有効にしてロールを付与してください。
権限を付与したら、数分待ってから関数を作成するボタンをクリックし、権限が更新されていることを確認します。
コンソールを使用して関数を作成する際の注意点: 関数の作成を開始したら、次のステップでコードを更新する前に、[Eventarc トリガーを作成しています]([サービスを作成しています] の下のページの上部)に緑色のチェックボックスが表示されるまで待ちます。
[Eventarc トリガーを作成しています] の緑色のチェックボックスが表示されるまで待たないと、トリガーが正常に作成されず、関数の [トリガー] タブに表示されないことがあります。
-
必ず [エントリ ポイント](実行する関数)を に設定してください。
-
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 パブリッシャー)が、正しいサービス アカウントに割り当てられていることを確認してください。
タスク 4. インフラストラクチャをテストする
関数をテストするには、JPG 画像または PNG 画像をバケットにアップロードします。
- 1 つの JPG 画像または PNG 画像を バケットにアップロードします。
注:
サムネイルが作成されたことを確認するには、1 つの JPG 画像または PNG 画像をバケットにアップロードする必要があります(関数が正常に作成された後)。アップロードする画像には、任意の JPG 画像または PNG 画像を使用できます。または、https://storage.googleapis.com/cloud-training/arc101/travel.jpg
にある画像をマシンにダウンロードしてから、その画像ファイルをバケットにアップロードすることもできます。
- アップロードするとすぐに、サムネイル画像が表示されます(バケットの詳細で [更新] を使用してください)。
画像ファイルをアップロードしたら、以下の [進行状況を確認] をクリックできます。サムネイル画像が作成されるまで待つ必要はありません。
注: 関数が正常にデプロイされてもバケットにサムネイル画像が表示されない場合は、[トリガー] タブに、関数に対して以前に指定したトリガー情報が表示されていることを確認します。以前にエラーが発生した場合は、トリガー情報が正しく保存されていない可能性があります。
関数の [トリガー] タブに Cloud Storage トリガーが表示されない場合は、トリガーを再作成します(「サービスのトリガーを作成する」というドキュメント ページをご覧ください)。その後、新しいファイルを再度アップロードして再度テストを実行します(新しいファイルを追加した後、ページを更新してください)。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Run functions の関数によってサムネイルが正常に作成されたことを確認する
お疲れさまでした
これで完了です。このラボでは、バケット、Pub/Sub トピック、バケットに追加された画像からサムネイルを作成する Cloud Run functions の関数を正常に作成しました。

次のスキルバッジを獲得する
このセルフペース ラボは、「Google Cloud におけるデータの保存、処理、管理 - コンソール」コースの一部です。このコースを完了すると成果が認められて上のようなバッジが贈られます。獲得したバッジを履歴書やソーシャル プラットフォームに記載し、#GoogleCloudBadge を使用して成果を公表しましょう。
Google Cloud トレーニングと認定資格
Google Cloud トレーニングと認定資格を通して、Google Cloud 技術を最大限に活用できるようになります。必要な技術スキルとベスト プラクティスについて取り扱うクラスでは、学習を継続的に進めることができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、バーチャル参加など、多忙なスケジュールにも対応できるオプションが用意されています。認定資格を取得することで、Google Cloud テクノロジーに関するスキルと知識を証明できます。
マニュアルの最終更新日: 2025 年 4 月 4 日
ラボの最終テスト日: 2025 年 4 月 4 日
Copyright 2025 Google LLC. All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。