מידע על Codelab זה
1. סקירה כללית
מערכת Spring Framework מספקת אבסטרציה של ResourceLoader
כדי לקרוא ולכתוב בקלות קבצים ממקורות שונים, כמו מערכת הקבצים, נתיב הכיתה או אינטרנט. צריך פשוט לציין את ה-URI למשאב באמצעות קידומת הפרוטוקול המפורסמת. לדוגמה, כדי לגשת לקובץ במערכת הקבצים המקומית, יש לציין URI כמו file:/data/config.yaml
.
עליך לכתוב אפליקציה לאתחול ספרינג, כדי לקבל גישה לקבצים המאוחסנים ב-Cloud Storage. לשם כך יש להשתמש במובאה באמצעות Spring Resource ובקידומת של gs:
.
ניתן לעשות זאת באמצעות Cloud Shell והכלי לשורת הענן ב-Cloud SDK.
מה תלמדו
- איך משתמשים ב-Cloud Storage אתחול Starter
- איך לגשת לקבצים ב-Cloud Storage באמצעות Spring
- איך להשתמש בתקצירים של
Resource
ושלWritableResource
באביב
מה צריך?
- פרויקט ב-Google Cloud
- דפדפן כמו Google Chrome
- היכרות עם עורכי טקסט רגילים של Linux, כמו Vim , Emacs ו-GNU Nano
איך תשתמשו ב-Codelab?
איך היית מדרג את החוויה שלך ביצירת אפליקציות HTML ו-CSS באינטרנט?
איך היית מדרג את חוויית השימוש שלך בשירותי Google Cloud?
2. הגדרה ודרישות
הגדרת סביבה בקצב עצמי
אם עדיין אין לכם חשבון Google (Gmail או Google Apps), עליכם ליצור חשבון. נכנסים למסוף ב-Google Cloud Platform (console.cloud.google.com) ויוצרים פרויקט חדש:
חשוב לזכור את מזהה הפרויקט הוא שם ייחודי בכל הפרויקטים ב-Google Cloud (השם הקודם כבר תפוס, והוא לא יעבוד בשבילך.) נתייחס אליו מאוחר יותר ב-codelab הזה בתור PROJECT_ID
.
לאחר מכן, עליך להפעיל חיוב ב-Cloud Console כדי להשתמש במשאבים של Google Cloud.
התהליך של קוד Lab זה לא אמור לעלות יותר מדולר אחד, אבל יכול להיות שתצטרכו לשלם על משאבים נוספים או להשאיר אותו פעיל (עיינו בקטע "cleanup" בסוף המסמך).
משתמשים חדשים ב-Google Cloud Platform זכאים לתקופת ניסיון בחינם בשווי 300 $.
Cloud Shell
אתם תשתמשו ב-Cloud Shell – סביבת שורת פקודה שפועלת ב-Google Cloud.
הפעלת Google Cloud Shell
במסוף GCP, לוחצים על הסמל של Cloud Shell בסרגל הכלים שבפינה השמאלית העליונה:
לאחר מכן לוחצים על "Start Cloud Shell":
יחלפו רק כמה רגעים עד שההקצאה והחיבור לסביבת העבודה יושלמו:
המכונה הווירטואלית הזו נטענת באמצעות כל כלי הפיתוח הדרושים לך. יש בה ספריית בית בנפח עקבי של 5GB, והיא פועלת ב-Google Cloud, וכך משפרת באופן משמעותי את הביצועים ואת האימות של הרשת. את רוב העבודה שלכם בשיעור ה-Lab הזה (אם לא כולם) אפשר לבצע בדפדפן או ב-Google Chromebook.
לאחר החיבור ל-Cloud Shell, אתם אמורים לראות שכבר בוצע אימות, ושהפרויקט כבר מוגדר ב-PROJECT_ID.
מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שאתם מאומתים:
gcloud auth list
פלט הפקודה
Credentialed accounts: - <myaccount>@<mydomain>.com (active)
gcloud config list project
פלט הפקודה
[core] project = <PROJECT_ID>
אם לא, אפשר להגדיר אותה באמצעות הפקודה הבאה:
gcloud config set project <PROJECT_ID>
פלט הפקודה
Updated property [core/project].
3. יצירת קובץ ב-Cloud Storage
לאחר ההשקה של Cloud Shell, תוכלו להתחיל ליצור קבצים ולהעביר אותם ל-Cloud Storage.
יצירת קובץ בשם my-file.txt
:
$ echo "Hello World from GCS" > my-file.txt
לאחר מכן, יוצרים קטגוריה ייחודית חדשה ב-Cloud Storage ומעבירים את הקובץ לשם באמצעות gsutil
.
$ BUCKET=spring-bucket-$USER $ gsutil makebucket gs://$BUCKET $ gsutil copy my-file.txt gs://$BUCKET
עוברים אל דפדפן האחסון ב-Cloud Storage ומוודאים שהקטגוריה והקובץ נמצאים שם.
4. אתחול של אפליקציית Spring אתחול
מתחילים לכתוב את האפליקציה באמצעות שורת הפקודה כדי ליצור אפליקציה חדשה לאביב ב-Spring אתחול:
$ curl https://start.spring.io/starter.tgz \ -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -
לתשומת ליבכם: הסימן 'אתחול' יוסיף באופן אוטומטי את spring-boot-starter-web
ואת spring-cloud-gcp-starter-storage
לתלויות שלכם ב-pom.xml
של אפליקציית התבנית.
שינוי לספרייה של אפליקציית התבנית:
$ cd spring-gcs
בונים ומפעילים את האפליקציה באמצעות Maven.
$ ./mvnw spring-boot:run
האפליקציה תתחיל להאזין ליציאה 8080. פותחים כרטיסייה חדשה ב-Cloud Shell ומריצים את curl
כדי לגשת לאפליקציה.
$ curl localhost:8080
אמורה להופיע תגובה ל-404 כי האפליקציה עדיין לא עוזרת. חוזרים לכרטיסייה הקודמת של Cloud Shell שבה האפליקציה פועלת וסוגרים אותה באמצעות Control+C
(Command+C
ב-Macintosh).
5. קריאת הקובץ ב-Cloud Storage
עליך לשנות את אפליקציית Spring אתחול כדי לגשת אל my-file.txt
, הקובץ שאחסנת בעבר ב-Cloud Storage. המטרה היא פשוט להחזיר את תוכן הקובץ באמצעות HTTP.
בהוראות הבאות אפשר להשתמש ב-Vim כדי לערוך את הקבצים, אבל אפשר גם להשתמש ב-Emacs , GNU Nano או בעורך הקוד המובנה ב-Cloud Shell:
$ cd ~/spring-gcs
יש להוסיף לאפליקציה שלט ל-REST GcsController
.
$ vi src/main/java/com/example/demo/GcsController.java
הדבק את הקוד הבא ואל תשכח לתקן את ה-URI של המשאב עם הקטגוריה שיצרת בעבר. אפשר לבדוק את הקטגוריה באמצעות הרצת פקודה echo $BUCKET
.
src/main/javascript/com/example/demo/GcsController.JavaScript
package com.example.demo;
import java.io.IOException;
import java.nio.charset.Charset;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class GcsController {
@Value("gs://REPLACE_WITH_YOUR_BUCKET/my-file.txt")
private Resource gcsFile;
@RequestMapping(value = "/", method = RequestMethod.GET)
public String readGcsFile() throws IOException {
return StreamUtils.copyToString(
gcsFile.getInputStream(),
Charset.defaultCharset()) + "\n";
}
}
בונים ומפעילים את האפליקציה עם Maven:
$ ./mvnw spring-boot:run
האפליקציה מתחילה להאזין ביציאה 8080. פותחים כרטיסייה חדשה ב-Cloud Shell ומריצים את curl
כדי לגשת לאפליקציה.
$ curl localhost:8080
עכשיו אמור להופיע תוכן הקובץ מהאפליקציה. עוברים לכרטיסייה הקודמת של Cloud Shell שבה האפליקציה פועלת וסוגרים אותה באמצעות Control+C
(Command+C
ב-Macintosh).
6. כתיבה לקובץ ב-Cloud Storage
קראת את התוכן של הקובץ ב-Cloud Storage ונחשפת אותו דרך שלט רחוק ל-Spring REST. עכשיו צריך לשנות את תוכן הקובץ על ידי פרסום תוכן הקובץ באותה נקודת קצה (endpoint) של HTTP.
עליך להוסיף עוד שיטה ל-GcsController
תגיב ל-HTTP POST ולכתוב את הנתונים בקובץ ב-Cloud Storage. הפעם צריך להעביר את האביב Resource
אל WritableResource
.
יש לעדכן את GcsController
בייבוא הנוסף הנדרש.
src/main/javascript/com/example/demo/GcsController.JavaScript
import java.io.OutputStream;
import org.springframework.core.io.WritableResource;
import org.springframework.web.bind.annotation.RequestBody;
מוסיפים את השיטה החדשה של נקודת הקצה לבקר.
src/main/javascript/com/example/demo/GcsController.JavaScript
@RestController
public class GcsController {
@RequestMapping(value = "/", method = RequestMethod.POST)
String writeGcs(@RequestBody String data) throws IOException {
try (OutputStream os = ((WritableResource) gcsFile).getOutputStream()) {
os.write(data.getBytes());
}
return "file was updated\n";
}
...
}
בונים ומפעילים את האפליקציה עם Maven:
$ ./mvnw spring-boot:run
האפליקציה מתחילה להאזין ביציאה 8080. פותחים כרטיסייה חדשה ב-Cloud Shell ומריצים את ההודעה curl
כדי לפרסם הודעה באפליקציה.
$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080
אמורה להופיע הודעה שמאשרת שתוכן הקובץ עודכן. עם זאת, אפשר לאמת את הזהות על ידי GET
.
$ curl localhost:8080
עליך לראות את התוכן המעודכן של הקובץ שהוחזר מהאפליקציה. יש לחזור לכרטיסייה הקודמת של Cloud Shell שבה האפליקציה פועלת ולסגור אותה באמצעות Control+C
(Command+C
ב-Macintosh).
7. מעולה!
למדת להשתמש בהפשטה באמצעות Spring Resource כדי לגשת בקלות לקבצים ב-Cloud Storage. כתבת אפליקציית אינטרנט של Spring boot שניתן לקרוא ולכתוב בקובץ ב-Cloud Storage. למדתם גם על אתחול האביב עבור Cloud Storage שמאפשר את הפונקציונליות הזו.
למידע נוסף
רישיון
היצירה הזו ברישיון תחת רישיון Creative Commons Attribution 2.0.