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

1. סקירה כללית

Spring Framework מספק הפשטה של ResourceLoader לקריאה ולכתיבה של קבצים בקלות ממקורות שונים, כגון מערכת הקבצים, classpath או אינטרנט. צריך רק לציין את ה-URI למשאב באמצעות קידומת הפרוטוקול המוכרת. לדוגמה, כדי לגשת לקובץ במערכת הקבצים המקומית, צריך לציין URI כמו file:/data/config.yaml.

כותבים אפליקציית Spring Boot שתיגש לקבצים שמאוחסנים ב-Cloud Storage באמצעות הפשטה של Spring Resource וקידומת הפרוטוקול gs:.

אפשר לעשות את זה באמצעות Cloud Shell וכלי שורת הפקודה של Cloud SDK של gcloud.

מה תלמדו

  • איך משתמשים באתחול Spring Spring ב-Cloud Storage
  • איך ניגשים לקבצים ב-Cloud Storage באמצעות Spring
  • איך להשתמש בהפשטות Resource ו-WritableResource של אביב

מה צריך להכין

  • פרויקט ב-Google Cloud
  • דפדפן, כמו Google Chrome
  • היכרות עם עורכי טקסט סטנדרטיים של Linux, כגון Vim, Emacs ו-GNU Nano

איך תשתמשו ב-Codelab?

קריאה בלבד קריאת התרגילים והשלמת התרגילים

איזה דירוג מגיע לדעתך לחוויה שלך עם אפליקציות אינטרנט של HTML ו-CSS?

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

איזה דירוג מגיע לדעתך לחוויית השימוש שלך בשירותי Google Cloud?

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

2. הגדרה ודרישות

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

  1. נכנסים למסוף Cloud ויוצרים פרויקט חדש או עושים שימוש חוזר בפרויקט קיים. (אם עדיין אין לכם חשבון Gmail או G Suite, עליכם ליצור חשבון).

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

חשוב לזכור את מזהה הפרויקט, שם ייחודי לכל הפרויקטים ב-Google Cloud (השם שלמעלה כבר תפוס ולא מתאים לכם, סליחה). בהמשך ב-Codelab הזה, היא תיקרא PROJECT_ID.

  1. בשלב הבא צריך להפעיל את החיוב במסוף Cloud כדי להשתמש במשאבים של Google Cloud.

מעבר ב-Codelab הזה לא אמור לעלות הרבה, אם בכלל. חשוב לבצע את כל ההוראות בקטע 'ניקוי' שמסביר איך להשבית משאבים כדי שלא תצברו חיובים מעבר למדריך הזה. משתמשים חדשים ב-Google Cloud זכאים להשתתף בתוכנית תקופת ניסיון בחינם בשווי 1,200 ש"ח.

Cloud Shell

משתמשים ב- Cloud Shell, סביבת שורת הפקודה שפועלת ב-Google Cloud.

הפעלת Cloud Shell

  1. במסוף Cloud, לוחצים על Activate Cloud Shell H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RWzVad_4nCwUyfp1RWzVad_4nCwlZUDZ5LtFCZUHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RWzVad_4nCwZlZ5Lt.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

אם זו הפעם הראשונה שאתם מפעילים את Cloud Shell, יוצג לכם מסך ביניים (בחלק הנגלל) שמתאר מהו. במקרה כזה, לוחצים על המשך (וזה לא יקרה שוב). כך נראה המסך החד-פעמי:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

ההקצאה וההתחברות ל-Cloud Shell נמשכת כמה דקות.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

למכונה הווירטואלית הזו נטען כל כלי הפיתוח הדרושים. יש בה ספריית בית בנפח מתמיד של 5GB והיא פועלת ב-Google Cloud, מה שמשפר משמעותית את ביצועי הרשת והאימות. אם לא את כולן, ניתן לבצע חלק גדול מהעבודה ב-Codelab הזה באמצעות דפדפן או Chromebook.

אחרי ההתחברות ל-Cloud Shell, אתם אמורים לראות שכבר בוצע אימות ושהפרויקט כבר מוגדר למזהה הפרויקט שלכם.

  1. מריצים את הפקודה הבאה ב-Cloud Shell כדי לוודא שהאימות בוצע:
gcloud auth list

פלט הפקודה

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
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 Boot

כדי להתחיל לכתוב את האפליקציה, משתמשים בשורת הפקודה כדי ליצור אפליקציית Springboot חדשה עם Spring Initializr:

$ curl https://start.spring.io/starter.tgz \
  -d type=maven-project \
  -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

צריך לוודא שבמכשיר JAVA_HOME מוגדרת גרסת ה-JDK הנכונה:

$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

פיתוח והפעלה של האפליקציה באמצעות Maven.

$ ./mvnw spring-boot:run

ההאזנה באפליקציה תתחיל ביציאה 8080. כדי לגשת לאפליקציה, פותחים כרטיסייה חדשה ב-Cloud Shell ומריצים את הפקודה curl.

$ curl localhost:8080

אתם אמורים לקבל תגובה 404 כי האפליקציה עדיין לא עושה שום דבר מועיל.

חזרו לכרטיסייה הקודמת של Cloud Shell שבה האפליקציה פועלת והפסיקו אותה עם Control+C (Command+C ב-Macintosh).

5. קריאת הקובץ ב-Cloud Storage

משנים את אפליקציית Springboot כדי לגשת אל my-file.txt, הקובץ שאחסנתם בעבר ב-Cloud Storage. המטרה שלכם היא פשוט להחזיר את התוכן של הקובץ דרך HTTP.

בהוראות הבאות תשתמשו ב-Vim כדי לערוך את הקבצים, אבל תוכלו גם להשתמש ב-Emmacs, GNU Nano או בעורך הקוד המובנה ב-Cloud Shell:

cloud-editor.png

$ cd ~/spring-gcs

מוסיפים לאפליקציה בקר REST GcsController.

$ vi src/main/java/com/example/demo/GcsController.java

הדביקו את הקוד הבא, ואל תשכחו לתקן את ה-URI של המשאב בקטגוריה שיצרתם קודם. כדי לבדוק את הקטגוריה, מריצים את הפקודה echo $BUCKET.

src/main/java/com/example/demo/GcsController.java

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.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GcsController {

  @Value("gs://REPLACE_WITH_YOUR_BUCKET/my-file.txt")
  private Resource gcsFile;

  @GetMapping("/")
  public String readGcsFile() throws IOException {
    return StreamUtils.copyToString(
        gcsFile.getInputStream(),
        Charset.defaultCharset());
  }
}

יצירה והפעלה של האפליקציה באמצעות Maven:

$ ./mvnw spring-boot:run

האפליקציה מתחילה להאזין ביציאה 8080. כדי לגשת לאפליקציה, פותחים כרטיסייה חדשה ב-Cloud Shell ומריצים את הפקודה curl.

$ curl localhost:8080

עכשיו אמור להופיע תוכן הקובץ שהוחזר מהאפליקציה. אפשר לעבור לכרטיסייה הקודמת של Cloud Shell שבה האפליקציה פועלת כדי להשבית אותה באמצעות Control+C (Command+C ב-Macintosh).

6. כתיבה לקובץ ב-Cloud Storage

קראתם את תוכן הקובץ ב-Cloud Storage וחשיפתם אותו באמצעות בקר REST ב-Spring. עכשיו, משנים את תוכן הקובץ על ידי פרסום התוכן החדש של הקובץ באותה נקודת קצה (endpoint) של HTTP.

צריך להוסיף ל-GcsController עוד שיטה שתענה ל-HTTP POST ותכתוב את הנתונים לקובץ ב-Cloud Storage. הפעם מפעילים Cast של תוכן האביב Resource אל WritableResource.

עליך לעדכן את GcsController בפעולות ייבוא נוספות שדרוש לך.

src/main/java/com/example/demo/GcsController.java

import java.io.OutputStream;
import org.springframework.core.io.WritableResource;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PostMapping;

מוסיפים לשלט רחוק את השיטה החדשה של נקודת הקצה.

src/main/java/com/example/demo/GcsController.java

@RestController
public class GcsController {

  @PostMapping("/")
  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. למדתם גם על הסימן לתחילת פעולה ב-Spring Boot ב-Cloud Storage שמאפשר את הפונקציונליות הזו.

מידע נוסף

רישיון

היצירה הזו בשימוש ברישיון Creative Commons Attribution 2.0 גנרי.