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

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