גישה לקבצים ב-Cloud Storage באמצעות הפשטת המשאבים של Spring

מערכת 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?

מתחילים מתחילים בקיאים

הגדרת סביבה בקצב עצמי

אם עדיין אין לכם חשבון Google (Gmail או Google Apps), עליכם ליצור חשבון. נכנסים למסוף ב-Google Cloud Platform (console.cloud.google.com) ויוצרים פרויקט חדש:

צילום מסך מ-2016-02-10 12:45:26.png

חשוב לזכור את מזהה הפרויקט הוא שם ייחודי בכל הפרויקטים ב-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].

לאחר ההשקה של 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 ומוודאים שהקטגוריה והקובץ נמצאים שם.

מתחילים לכתוב את האפליקציה באמצעות שורת הפקודה כדי ליצור אפליקציה חדשה לאביב ב-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).

עליך לשנות את אפליקציית 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).

קראת את התוכן של הקובץ ב-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).

למדת להשתמש בהפשטה באמצעות Spring Resource כדי לגשת בקלות לקבצים ב-Cloud Storage. כתבת אפליקציית אינטרנט של Spring boot שניתן לקרוא ולכתוב בקובץ ב-Cloud Storage. למדתם גם על אתחול האביב עבור Cloud Storage שמאפשר את הפונקציונליות הזו.

למידע נוסף

רישיון

היצירה הזו ברישיון תחת רישיון Creative Commons Attribution 2.0.