ARC101
概要
チャレンジラボでは、シナリオと一連のタスクが提供されます。手順ガイドに沿って進める形式ではなく、コース内のラボで習得したスキルを駆使して、ご自身でタスクを完了していただきます。タスクが適切に完了したかどうかは、このページに表示される自動スコアリング システムで確認できます。
チャレンジラボは、Google Cloud の新しいコンセプトについて学習するためのものではありません。デフォルト値を変更する、エラー メッセージを読み調査を行ってミスを修正するなど、習得したスキルを応用する能力が求められます。
100% のスコアを達成するには、制限時間内に全タスクを完了する必要があります。
設定
[ラボを開始] ボタンをクリックする前に
こちらの説明をお読みください。ラボには時間制限があり、一時停止することはできません。タイマーは、Google Cloud のリソースを利用できる時間を示しており、[ラボを開始] をクリックするとスタートします。
このハンズオンラボでは、シミュレーションやデモ環境ではなく実際のクラウド環境を使って、ラボのアクティビティを行います。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モード(推奨)またはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生しないようにすることができます。
- ラボを完了するための時間(開始後は一時停止できません)
注: このラボでは、受講者アカウントのみを使用してください。別の Google Cloud アカウントを使用すると、そのアカウントに料金が発生する可能性があります。
チャレンジ シナリオ
あなたは、新たにジュニア クラウド エンジニアの職務についたところです。各チームが Google Cloud のリソースを作成して管理できるようサポートしています。
これらのタスクのスキルや知識がすでにあると想定されています。
チャレンジ
あなたには任務が与えられています。それは、新たに結成された開発チームが取り組んでいる、旅行の写真を保管して整理するための Travel という新しいプロジェクトの最初の作業をサポートすることです。具体的には、Travel チームによるアプリケーション開発環境の初期構成を支援することが求められています。
次の操作を行う必要があります。
- Cloud Storage バケットを作成し、2 人目のユーザーと共有する。
- メッセージを送信するために、Cloud Run functions の Pub/Sub トピックを作成する。
- Cloud Storage バケットに新しいオブジェクトが作成されるたびに実行される Cloud Run functions の関数を作成する。
- アクティブな Cloud Run functions インスタンスの数に関する通知メールを送信するアラート ポリシーを作成する。
以下のような基準に従う必要があります。
- 特別な指示がない限り、すべてのリソースを リージョンに作成する。
- プロジェクトの VPC を使用する。
- 通常は team-resource の形式で命名する(たとえば、インスタンスには kraken-webserver1 のような名前を指定します)。
- 費用対効果の高いリソースサイズを割り当てる。プロジェクトはモニタリングされており、リソースが過剰に使用された場合、そのリソースを含むプロジェクトは終了する(ご自身のプロジェクトも終了される可能性があります)ので注意が必要です。モニタリング チームからのガイダンスによれば、指示がない限り、小規模の Linux VM には f1-micro を使用し、Kubernetes ノードなどの Windows アプリケーションまたはその他のアプリケーションには e2-medium を使用することとされています。
それぞれのタスクについて以下に詳しく説明します。それでは始めましょう。
タスク 1. バケットを作成する
-
写真を保管するために、リージョン に という名前のバケットを作成します。
-
この新しいバケットを含むプロジェクトで、 に Storage オブジェクト閲覧者を付与します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
というバケットを作成し、 にアクセス権を付与する。
タスク 2. Pub/Sub トピックを作成する
- メッセージを送信するために、Cloud Run functions の という Pub/Sub トピックを作成します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
という Pub/Sub トピックを作成する
タスク 3. サムネイルを表示する Cloud Run functions の関数を作成する
-
タスク 1 で作成したバケット 内にオブジェクトが作成されるたびに実行される、(Node.js 22 を使用)という Cloud Run functions の関数(第 2 世代)を作成します。
-
必ずエントリ ポイント(実行する関数)を thumbnail に、トリガーを Cloud Storage に設定してください。
-
index.js の 15 行目にあるテキスト REPLACE_WITH_YOUR_TOPIC ID を、タスク 2 で作成した に置き換えます。
index.js:
/* globals exports, require */
//jshint strict: false
//jshint esversion: 6
"use strict";
const crc32 = require("fast-crc32c");
const { Storage } = require('@google-cloud/storage');
const gcs = new Storage();
const { PubSub } = require('@google-cloud/pubsub');
const imagemagick = require("imagemagick-stream");
exports.thumbnail = (event, context) => {
const fileName = event.name;
const bucketName = event.bucket;
const size = "64x64"
const bucket = gcs.bucket(bucketName);
const topicName = "REPLACE_WITH_YOUR_TOPIC ID";
const pubsub = new PubSub();
if ( fileName.search("64x64_thumbnail") == -1 ){
// doesn't have a thumbnail, get the filename extension
var filename_split = fileName.split('.');
var filename_ext = filename_split[filename_split.length - 1];
var filename_without_ext = fileName.substring(0, fileName.length - filename_ext.length );
if (filename_ext.toLowerCase() == 'png' || filename_ext.toLowerCase() == 'jpg'){
// only support png and jpg at this point
console.log(`Processing Original: gs://${bucketName}/${fileName}`);
const gcsObject = bucket.file(fileName);
let newFilename = filename_without_ext + size + '_thumbnail.' + filename_ext;
let gcsNewObject = bucket.file(newFilename);
let srcStream = gcsObject.createReadStream();
let dstStream = gcsNewObject.createWriteStream();
let resize = imagemagick().resize(size).quality(90);
srcStream.pipe(resize).pipe(dstStream);
return new Promise((resolve, reject) => {
dstStream
.on("error", (err) => {
console.log(`Error: ${err}`);
reject(err);
})
.on("finish", () => {
console.log(`Success: ${fileName} → ${newFilename}`);
// コンテンツ タイプの設定
gcsNewObject.setMetadata(
{
contentType: 'image/'+ filename_ext.toLowerCase()
}, function(err, apiResponse) {});
pubsub
.topic(topicName)
.publisher()
.publish(Buffer.from(newFilename))
.then(messageId => {
console.log(`Message ${messageId} published.`);
})
.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/pubsub": "^2.0.0",
"@google-cloud/storage": "^5.0.0",
"fast-crc32c": "1.0.4",
"imagemagick-stream": "4.1.1"
},
"devDependencies": {},
"engines": {
"node": ">=4.3.2"
}
}
注:
サムネイルが作成されたことを確認するには、バケットに JPG 画像または PNG 画像を 1 つアップロードする必要があります(関数が正常に作成された後)。画像ファイル https://storage.googleapis.com/cloud-training/arc102/wildlife.jpg をマシンにダウンロードしてからバケットにアップロードします。
アップロードするとすぐに、サムネイル画像が表示されます(バケットの詳細ページで [更新] を使用してください)。
画像ファイルをアップロードしたら、以下の [進行状況を確認] をクリックできます。サムネイル画像が作成されるまで待つ必要はありません。
注: 関数が正常にデプロイされてもバケットにサムネイル画像が表示されない場合は、[トリガー] タブに、関数に対して以前に指定したトリガー情報が表示されていることを確認します。以前にエラーが発生した場合は、トリガー情報が正しく保存されていない可能性があります。
関数の [トリガー] タブに Cloud Storage トリガーが表示されない場合は、トリガーを再作成します(サービスのトリガーを作成するというドキュメント ページをご覧ください)。その後、新しいファイルを再度アップロードして再度テストを実行します(新しいファイルを追加した後、ページを更新します)。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Run functions の関数が機能することを確認する。
タスク 4. アラート ポリシーを作成する
-
アクティブな Cloud Run functions のインスタンス数がゼロ(0)より大きい場合に、個人のメールアカウントに通知する Active Cloud Run Function Instances という名前のアラート ポリシーを作成します。
-
指標に関しては、[Cloud Functions の関数] > [関数] > [アクティブなインスタンス] を選択していることを確認してくだださい。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Run functions のアラートが作成されたことを確認する。
お疲れさまでした

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