GSP315

はじめに
チャレンジラボでは、シナリオと一連のタスクが提供されます。手順ガイドに沿って進める形式ではなく、コース内のラボで習得したスキルを駆使して、ご自身でタスクを完了していただきます。タスクが適切に完了したかどうかは、このページに表示される自動スコアリング システムで確認できます。
チャレンジラボは、Google Cloud の新しいコンセプトについて学習するためのものではありません。デフォルト値を変更する、エラー メッセージを読み調査を行ってミスを修正するなど、習得したスキルを応用する能力が求められます。
100% のスコアを達成するには、制限時間内に全タスクを完了する必要があります。
このラボは、「Set Up an App Dev Environment on Google Cloud」スキルバッジに登録している受講者を対象としています。準備が整ったらチャレンジを開始しましょう。
設定
[ラボを開始] ボタンをクリックする前に
こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。
このハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。
このラボを完了するためには、下記が必要です。
- 標準的なインターネット ブラウザ(Chrome を推奨)
注: このラボの実行には、シークレット モードまたはシークレット ブラウジング ウィンドウを使用してください。これにより、個人アカウントと受講者アカウント間の競合を防ぎ、個人アカウントに追加料金が発生することを防ぎます。
- ラボを完了するために十分な時間を確保してください。ラボをいったん開始すると一時停止することはできません。
注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、このラボでは使用しないでください。アカウントへの追加料金が発生する可能性があります。
チャレンジ シナリオ
Jooli Inc. のジュニア クラウド エンジニアという新たな役割を任されて間もないあなたは、各チームが Google Cloud のリソースを作成して管理できるようサポートしています。
これらのタスクのスキルや知識があるという前提のため、手順ガイドは提供されません。
チャレンジ
あなたに新しい任務が与えられました。それは、新たに結成された開発チームが取り組んでいる、写真を保管して整理するための Memories という新しいプロジェクトの初期の作業をサポートすることです。Memories チームによるアプリケーション開発環境の初期構成を支援するために、
次のタスクを行うよう依頼されています。
- 写真を保管するためのバケットを作成する。
- Cloud Functions 関数で使用する Pub/Sub トピックを作成する。
- Cloud 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 Functions 関数用の という Pub/Sub トピックを作成します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
という Pub/Sub トピックを作成する
タスク 3. サムネイル用の Cloud Functions 関数を作成する
バケットに追加される画像のサムネイルを作成する、 という Cloud Functions の関数を作成します。この Cloud Functions 関数は第 2 世代環境を使用するようにします。リソースが リージョンの ゾーンに作成されることを確認してください。
-
という Cloud Functions の関数を作成します。
注:
この Cloud Functions 関数は、タスク 1 で作成したバケット内にオブジェクトが作成されるたびに実行される必要があります。Cloud Functions 関数の処理中に、API を有効にする権限をリクエストされる場合があります。リクエストに応じて、必要な API を有効にしてください。
-
必ずエントリ ポイント(実行する関数)を に、トリガーを Cloud Storage
に設定してください。
-
index.js
に次のコードを追加します。
const functions = require('@google-cloud/functions-framework');
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");
functions.cloudEvent('{{{ project_0.startup_script.function }}}', cloudEvent => {
const event = cloudEvent.data;
console.log(`Event: ${event}`);
console.log(`Hello ${event.bucket}`);
const fileName = event.name;
const bucketName = event.bucket;
const size = "64x64"
const bucket = gcs.bucket(bucketName);
const topicName = "{{{ project_0.startup_script.topic }}}";
const pubsub = new PubSub();
if ( fileName.search("64x64_thumbnail") == -1 ){
// サムネイルが存在しない場合、ファイル名の拡張子を取得
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'){
// 現時点では png と jpg のみのサポート
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/functions-framework": "^3.0.0",
"@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"
}
}
サムネイルが作成されたことを確認します。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
Cloud Functions 関数を確認する
タスク 4. インフラストラクチャをテストする
1 つの JPG 画像または PNG 画像をバケットにアップロードする必要があります。
- 1 つの JPG 画像または PNG 画像を バケットにアップロードします。
注: または、https://storage.googleapis.com/cloud-training/gsp315/map.jpg
にある画像をマシンにダウンロードして、バケットにアップロードすることもできます。
- アップロードするとすぐに、サムネイル画像が表示されます(バケットの詳細で [更新] を使用してください)。
タスク 5. 前任のクラウド エンジニアを削除する
このプロジェクトに定義されている 2 名のユーザーが表示されます。
- 1 つはあなたのアカウント(オーナーのロールの )。
- もう 1 つは前任のクラウド エンジニアのアカウント(閲覧者のロールの )。
- プロジェクトから前任のクラウド エンジニアのアクセス権限を削除してください。
[進行状況を確認] をクリックして、目標に沿って進んでいることを確認します。
前任のクラウド エンジニアを削除する
お疲れさまでした

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