স্প্রিং রিসোর্স অ্যাবস্ট্রাকশন সহ ক্লাউড স্টোরেজে ফাইলগুলি অ্যাক্সেস করুন৷

১. সংক্ষিপ্ত বিবরণ

Spring Framework বিভিন্ন উৎস, যেমন ফাইল সিস্টেম, ক্লাসপাথ বা ওয়েব থেকে সহজে ফাইল পড়া ও লেখার জন্য একটি ResourceLoader অ্যাবস্ট্রাকশন প্রদান করে। আপনাকে কেবল সুপরিচিত প্রোটোকল প্রিফিক্স ব্যবহার করে রিসোর্সটির URI নির্দিষ্ট করতে হবে। উদাহরণস্বরূপ, লোকাল ফাইল সিস্টেমে একটি ফাইল অ্যাক্সেস করতে, আপনাকে file:/data/config.yaml মতো একটি URI নির্দিষ্ট করতে হবে।

আপনি একটি Spring Boot অ্যাপ লিখবেন যা Spring Resource অ্যাবস্ট্রাকশন এবং gs: প্রোটোকল প্রিফিক্স ব্যবহার করে ক্লাউড স্টোরেজে সংরক্ষিত ফাইল অ্যাক্সেস করবে।

আপনি ক্লাউড শেল এবং ক্লাউড এসডিকে-এর gcloud কমান্ড-লাইন টুল ব্যবহার করে এটি করবেন।

আপনি যা শিখবেন

  • ক্লাউড স্টোরেজ স্প্রিং বুট স্টার্টার কীভাবে ব্যবহার করবেন
  • Spring ব্যবহার করে ক্লাউড স্টোরেজে ফাইল অ্যাক্সেস করার উপায়
  • Spring-এর Resource এবং WritableResource অ্যাবস্ট্রাকশনগুলো কীভাবে ব্যবহার করবেন

আপনার যা যা লাগবে

  • একটি গুগল ক্লাউড প্রকল্প
  • একটি ব্রাউজার, যেমন গুগল ক্রোম
  • Vim, Emacs, এবং GNU Nano-এর মতো স্ট্যান্ডার্ড লিনাক্স টেক্সট এডিটরগুলির সাথে পরিচিতি।

আপনি কোডল্যাবটি কীভাবে ব্যবহার করবেন?

শুধুমাত্র পড়ুন পড়ুন এবং অনুশীলনগুলো সম্পূর্ণ করুন।

HTML এবং CSS ওয়েব অ্যাপ তৈরিতে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

শিক্ষানবিশ মধ্যবর্তী দক্ষ

গুগল ক্লাউড পরিষেবা ব্যবহারের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?

শিক্ষানবিশ মধ্যবর্তী দক্ষ

২. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিতে পরিবেশ সেটআপ

  1. ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। (যদি আপনার আগে থেকে Gmail বা G Suite অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLpGtQd5Q55

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5 OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

প্রজেক্ট আইডিটি মনে রাখবেন, যা সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে ব্যবহৃত হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এই কোডল্যাবে এটিকে পরবর্তীতে PROJECT_ID হিসাবে উল্লেখ করা হবে।

  1. এরপরে, গুগল ক্লাউড রিসোর্স ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে।

এই কোডল্যাবটি চালাতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। "পরিষ্কার-পরিচ্ছন্নতা" (Cleaning up) বিভাগে দেওয়া নির্দেশাবলী অবশ্যই অনুসরণ করবেন, যেখানে রিসোর্স বন্ধ করার পরামর্শ দেওয়া হয়েছে, যাতে এই টিউটোরিয়ালের বাইরে আপনার কোনো বিল না আসে। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।

ক্লাউড শেল

আপনি ক্লাউড শেল ব্যবহার করবেন, যা গুগল ক্লাউডে চালিত একটি কমান্ড-লাইন পরিবেশ।

ক্লাউড শেল সক্রিয় করুন

  1. ক্লাউড কনসোল থেকে, Activate Cloud Shell-এ ক্লিক করুন। H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ .

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

আপনি যদি আগে কখনো ক্লাউড শেল চালু না করে থাকেন, তাহলে এটি কী তা বর্ণনা করে একটি মধ্যবর্তী স্ক্রিন (নিচে দেওয়া আছে) আপনার সামনে আসবে। যদি তাই হয়, তাহলে 'Continue'-তে ক্লিক করুন (এবং আপনি এটি আর কখনো দেখতে পাবেন না)। একবারের জন্য আসা সেই স্ক্রিনটি দেখতে এইরকম:

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

ক্লাউড শেল প্রস্তুত করতে এবং এর সাথে সংযোগ স্থাপন করতে মাত্র কয়েক মুহূর্ত সময় লাগা উচিত।

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

এই ভার্চুয়াল মেশিনটিতে আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুলস লোড করা আছে। এটি একটি স্থায়ী ৫ জিবি হোম ডিরেক্টরি প্রদান করে এবং গুগল ক্লাউডে চলে, যা নেটওয়ার্ক পারফরম্যান্স ও অথেনটিকেশনকে ব্যাপকভাবে উন্নত করে। এই কোডল্যাবে আপনার প্রায় সমস্ত কাজই শুধুমাত্র একটি ব্রাউজার বা আপনার ক্রোমবুক দিয়ে করা সম্ভব।

ক্লাউড শেলে সংযুক্ত হওয়ার পর আপনি দেখতে পাবেন যে, আপনাকে ইতিমধ্যেই প্রমাণীকৃত করা হয়েছে এবং প্রজেক্টটি আপনার প্রজেক্ট আইডিতে সেট করা আছে।

  1. আপনি প্রমাণীকৃত কিনা তা নিশ্চিত করতে ক্লাউড শেলে নিম্নলিখিত কমান্ডটি চালান:
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].

৩. ক্লাউড স্টোরেজে একটি ফাইল তৈরি করুন

ক্লাউড শেল চালু হওয়ার পর, আপনি ফাইল তৈরি করা এবং সেগুলো ক্লাউড স্টোরেজে স্থানান্তর করা শুরু করতে পারবেন।

my-file.txt নামে একটি ফাইল তৈরি করুন:

$ echo "Hello World from GCS" > my-file.txt

এরপর ক্লাউড স্টোরেজে একটি নতুন স্বতন্ত্র বাকেট তৈরি করুন এবং gsutil ব্যবহার করে ফাইলটি সেখানে স্থানান্তর করুন।

$ BUCKET=spring-bucket-$USER
$ gsutil makebucket gs://$BUCKET
$ gsutil copy my-file.txt gs://$BUCKET

ক্লাউড স্টোরেজের স্টোরেজ ব্রাউজারে যান এবং যাচাই করুন যে বাকেট ও ফাইলটি সেখানে আছে।

৪. একটি Spring Boot অ্যাপ চালু করুন

Spring Initializr ব্যবহার করে কমান্ড লাইনের মাধ্যমে একটি নতুন Spring Boot অ্যাপ তৈরি করে অ্যাপটি লেখা শুরু করুন:

$ curl https://start.spring.io/starter.tgz \
  -d type=maven-project \
  -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -

মনে রাখবেন যে ইনিশিয়ালাইজার স্বয়ংক্রিয়ভাবে টেমপ্লেট অ্যাপের pom.xml এ আপনার ডিপেন্ডেন্সিতে spring-boot-starter-web এবং spring-cloud-gcp-starter-storage যোগ করে দেবে।

টেমপ্লেট অ্যাপের ডিরেক্টরিতে যান:

$ cd spring-gcs

নিশ্চিত করুন যে JAVA_HOME সঠিক JDK সংস্করণে সেট করা আছে:

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

Maven ব্যবহার করে অ্যাপটি বিল্ড ও রান করুন।

$ ./mvnw spring-boot:run

অ্যাপটি ৮০৮০ পোর্টে লিসেনিং শুরু করবে। একটি নতুন ক্লাউড শেল ট্যাব খুলুন এবং অ্যাপটি অ্যাক্সেস করতে curl রান করুন।

$ curl localhost:8080

আপনি একটি 404 প্রতিক্রিয়া পাবেন, কারণ অ্যাপটি এখনও কোনো দরকারি কাজ করে না।

আগের ক্লাউড শেল ট্যাবে ফিরে যান যেখানে অ্যাপটি চলছে এবং Control+C (ম্যাকিনটোশে Command+C ) চেপে এটি বন্ধ করুন।

৫. ক্লাউড স্টোরেজে ফাইলটি পড়ুন।

আপনার Spring Boot অ্যাপটিকে এমনভাবে পরিবর্তন করুন যাতে এটি my-file.txt ফাইলটি অ্যাক্সেস করতে পারে, যেটি আপনি আগে ক্লাউড স্টোরেজে সংরক্ষণ করেছিলেন। আপনার লক্ষ্য হলো HTTP-এর মাধ্যমে ফাইলটির বিষয়বস্তু ফেরত পাঠানো।

নিম্নলিখিত নির্দেশাবলীতে, আপনি ফাইলগুলি সম্পাদনা করতে Vim ব্যবহার করবেন, তবে আপনি Emacs, GNU Nano, বা Cloud Shell-এর অন্তর্নির্মিত কোড এডিটরও ব্যবহার করতে পারেন:

ক্লাউড-এডিটর.পিএনজি

$ cd ~/spring-gcs

অ্যাপে GcsController নামে একটি REST কন্ট্রোলার যোগ করুন।

$ 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

অ্যাপটি ৮০৮০ পোর্টে লিসেনিং শুরু করে। একটি নতুন ক্লাউড শেল ট্যাব খুলুন এবং অ্যাপটি অ্যাক্সেস করতে curl রান করুন।

$ curl localhost:8080

এখন আপনি অ্যাপ থেকে ফেরত আসা ফাইলটির বিষয়বস্তু দেখতে পাবেন। আগের ক্লাউড শেল ট্যাবে যান যেখানে অ্যাপটি চলছে এবং Control+C (ম্যাকিনটোশে Command+C ) চেপে এটি বন্ধ করুন।

৬. ক্লাউড স্টোরেজের ফাইলে লিখুন

আপনি ক্লাউড স্টোরেজ থেকে ফাইলটির বিষয়বস্তু পড়েছেন এবং একটি Spring REST কন্ট্রোলারের মাধ্যমে তা প্রকাশ করেছেন। এখন, একই HTTP এন্ডপয়েন্টে নতুন ফাইলের বিষয়বস্তু পোস্ট করে ফাইলটির বিষয়বস্তু পরিবর্তন করুন।

আপনাকে GcsController এ আরেকটি মেথড যোগ করতে হবে, যেটি HTTP POST-এর সাড়া দেবে এবং ক্লাউড স্টোরেজে থাকা আপনার ফাইলে ডেটা লিখবে। এবার, Spring 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

অ্যাপটি ৮০৮০ পোর্টে লিসেনিং শুরু করে। একটি নতুন ক্লাউড শেল ট্যাব খুলুন এবং অ্যাপটিতে একটি মেসেজ পোস্ট করতে curl চালান।

$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080

ফাইলটির বিষয়বস্তু আপডেট হয়েছে এমন একটি নিশ্চিতকরণ বার্তা আপনি দেখতে পাবেন। তবে, একটি GET রিকোয়েস্ট পাঠিয়ে তা যাচাই করে নিন।

$ curl localhost:8080

অ্যাপ থেকে প্রাপ্ত ফাইলটির আপডেট করা বিষয়বস্তু আপনি দেখতে পাবেন। আগের ক্লাউড শেল ট্যাবে ফিরে যান যেখানে অ্যাপটি চলছে এবং Control+C (ম্যাকিন্টশে Command+C ) চেপে এটি বন্ধ করুন।

৭. অভিনন্দন!

আপনি ক্লাউড স্টোরেজের ফাইলগুলো সহজে অ্যাক্সেস করার জন্য স্প্রিং রিসোর্স অ্যাবস্ট্রাকশন ব্যবহার করতে শিখেছেন। আপনি একটি স্প্রিং বুট ওয়েব অ্যাপ লিখেছেন যা ক্লাউড স্টোরেজের কোনো ফাইল পড়তে ও লিখতে পারে। আপনি ক্লাউড স্টোরেজের জন্য স্প্রিং বুট স্টার্টার সম্পর্কেও জেনেছেন, যা এই কার্যকারিতাটি সক্ষম করে।

আরও জানুন

লাইসেন্স

এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে লাইসেন্সকৃত।