১. সংক্ষিপ্ত বিবরণ
এই কোডল্যাব সিরিজটির (নিজের গতিতে শেখার উপযোগী হাতে-কলমে টিউটোরিয়াল) লক্ষ্য হলো, গুগল অ্যাপ ইঞ্জিন (স্ট্যান্ডার্ড) জাভা ডেভেলপারদের কয়েকটি মাইগ্রেশন প্রক্রিয়ার মাধ্যমে পথ দেখিয়ে তাদের অ্যাপগুলোকে আধুনিক করে তুলতে সাহায্য করা। এই ধাপগুলো অনুসরণ করে, আপনি আপনার অ্যাপকে আরও পোর্টেবল করে তুলতে পারবেন এবং সেগুলোকে ক্লাউড রান (অ্যাপ ইঞ্জিনের সহযোগী গুগল ক্লাউডের কন্টেইনার-হোস্টিং পরিষেবা) ও অন্যান্য কন্টেইনার-হোস্টিং পরিষেবার জন্য কন্টেইনারাইজ করার সিদ্ধান্ত নিতে পারবেন।
এই টিউটোরিয়ালটি আপনাকে শেখাবে কিভাবে Jib ব্যবহার করে একটি App Engine অ্যাপকে কন্টেইনারাইজ করে Cloud Run নামক সম্পূর্ণ পরিচালিত সার্ভিসে ডেপ্লয় করা যায়। Jib-এর সাহায্যে আপনি ডকার ইমেজ তৈরি করতে পারেন, যা কন্টেইনারে অ্যাপ্লিকেশন ডেভেলপ, শিপিং এবং রান করার জন্য ইন্ডাস্ট্রিতে একটি সুপরিচিত প্ল্যাটফর্ম।
অ্যাপ ইঞ্জিন থেকে ক্লাউড রানে স্থানান্তরের জন্য প্রয়োজনীয় ধাপগুলো শেখানোর পাশাপাশি, আপনি একটি জাভা ৮ অ্যাপ ইঞ্জিন অ্যাপকে জাভা ১৭-এ আপগ্রেড করার পদ্ধতিও শিখবেন।
যদি আপনার অ্যাপ্লিকেশনটি অ্যাপ ইঞ্জিনের পুরোনো বান্ডেল পরিষেবা বা অন্যান্য ফিচার ব্যাপকভাবে ব্যবহার করে, তাহলে ক্লাউড রানে যাওয়ার আগে আমরা সেই বান্ডেল পরিষেবাগুলো থেকে সরে আসতে বা সেই ফিচারগুলো প্রতিস্থাপন করার পরামর্শ দিই। আপনার মাইগ্রেশনের বিকল্পগুলো খতিয়ে দেখার জন্য যদি আরও সময়ের প্রয়োজন হয় অথবা আপাতত পুরোনো বান্ডেল পরিষেবাগুলো ব্যবহার করা চালিয়ে যেতে চান, তাহলে নতুন কোনো রানটাইমে আপগ্রেড করার সময়ও আপনি জাভা ১১/১৭-এর জন্য অ্যাপ ইঞ্জিনের বান্ডেল পরিষেবাগুলো ব্যবহার করতে পারবেন। যখন আপনার অ্যাপটি আরও পোর্টেবল হবে, তখন এই নির্দেশাবলী আপনার অ্যাপে কীভাবে প্রয়োগ করতে হয় তা শিখতে এই কোডল্যাবে ফিরে আসুন।
আপনি শিখবেন কিভাবে
- ক্লাউড শেল ব্যবহার করুন
- ক্লাউড রান, আর্টিফ্যাক্ট রেজিস্ট্রি এবং ক্লাউড বিল্ড এপিআই সক্রিয় করুন
- Jib এবং Cloud Build ব্যবহার করে আপনার অ্যাপকে কন্টেইনারাইজ করুন।
- আপনার কন্টেইনার ইমেজগুলো ক্লাউড রানে ডিপ্লয় করুন।
আপনার যা যা লাগবে
- একটি সক্রিয় GCP বিলিং অ্যাকাউন্ট এবং অ্যাপ ইঞ্জিন সক্ষম করা একটি গুগল ক্লাউড প্ল্যাটফর্ম প্রজেক্ট।
- সাধারণ লিনাক্স কমান্ড সম্পর্কে কার্যকরী জ্ঞান
- অ্যাপ ইঞ্জিন অ্যাপ তৈরি এবং স্থাপন করার প্রাথমিক জ্ঞান
- একটি জাভা ৮ সার্ভলেট অ্যাপ, যেটিকে আপনি জাভা ১৭-এ মাইগ্রেট করে ক্লাউড রান-এ ডেপ্লয় করতে চান (এটি অ্যাপ ইঞ্জিন-এর একটি অ্যাপ অথবা শুধু সোর্স কোডও হতে পারে)।
জরিপ
আপনি এই টিউটোরিয়ালটি কীভাবে ব্যবহার করবেন?
জাভা নিয়ে আপনার অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?
গুগল ক্লাউড পরিষেবা ব্যবহারের অভিজ্ঞতাকে আপনি কীভাবে মূল্যায়ন করবেন?
২. পটভূমি
অ্যাপ ইঞ্জিন এবং ক্লাউড ফাংশনসের মতো প্ল্যাটফর্ম অ্যাজ আ সার্ভিস (PaaS) সিস্টেমগুলো আপনার টিম এবং অ্যাপ্লিকেশনের জন্য অনেক সুবিধা প্রদান করে, যেমন সিস্টেম অ্যাডমিনিস্ট্রেটর (SysAdmins) এবং ডেভঅপস (Devops)-দের সমাধান তৈরিতে মনোযোগ দিতে সক্ষম করে। সার্ভারবিহীন প্ল্যাটফর্মের মাধ্যমে, আপনার অ্যাপ প্রয়োজন অনুযায়ী স্বয়ংক্রিয়ভাবে স্কেল আপ করতে পারে, খরচ নিয়ন্ত্রণে সহায়তার জন্য পে-পার-ইউজ বিলিং ব্যবহার করে শূন্য পর্যন্ত স্কেল ডাউন করতে পারে এবং বিভিন্ন প্রচলিত ডেভেলপমেন্ট ল্যাঙ্গুয়েজ ব্যবহার করতে পারে।
তবে, কন্টেইনারের নমনীয়তাও বেশ আকর্ষণীয়। যেকোনো ভাষা, যেকোনো লাইব্রেরি এবং যেকোনো বাইনারি বেছে নেওয়ার সুবিধার কারণে, কন্টেইনার আপনাকে উভয় জগতের সেরাটাই দেয়: সার্ভারলেসের সুবিধার সাথে কন্টেইনারের নমনীয়তা। ক্লাউড রান মূলত এটাই।
ক্লাউড রান কীভাবে ব্যবহার করতে হয় তা শেখা এই কোডল্যাবের আওতাভুক্ত নয়; সে বিষয়ে ক্লাউড রান ডকুমেন্টেশনে আলোচনা করা হয়েছে। এখানকার মূল উদ্দেশ্য হলো, ক্লাউড রান (বা অন্যান্য কন্টেইনার-হোস্টেড পরিষেবা)-এর জন্য আপনার অ্যাপ ইঞ্জিন অ্যাপটিকে কীভাবে কন্টেইনারাইজ করবেন, সে বিষয়ে আপনাকে পরিচিত করানো। সামনে এগোনোর আগে আপনার কয়েকটি বিষয় জেনে রাখা উচিত, যার মধ্যে প্রধান হলো আপনার ইউজার এক্সপেরিয়েন্স কিছুটা ভিন্ন হবে।
এই কোডল্যাবে আপনি কন্টেইনার তৈরি এবং স্থাপন করতে শিখবেন। আপনি শিখবেন কীভাবে:
- Jib দিয়ে আপনার অ্যাপকে কন্টেইনারাইজ করুন
- অ্যাপ ইঞ্জিন কনফিগারেশন থেকে সরে যান
- এবং, ঐচ্ছিকভাবে, ক্লাউড বিল্ডের জন্য বিল্ড ধাপগুলো নির্ধারণ করুন।
এর জন্য অ্যাপ ইঞ্জিনের কিছু নির্দিষ্ট ফিচার থেকে সরে আসতে হবে। আপনি যদি এই পথ অনুসরণ করতে না চান, তাহলে আপনার অ্যাপগুলোকে অ্যাপ ইঞ্জিনে রেখেই জাভা ১১/১৭ রানটাইমে আপগ্রেড করতে পারেন।
৩. প্রস্তুতি/পূর্বপ্রস্তুতি
১. প্রকল্প স্থাপন করুন
এই টিউটোরিয়ালের জন্য, আপনি একটি সম্পূর্ণ নতুন প্রজেক্টে appengine-java-migration-samples রিপোজিটরি থেকে একটি স্যাম্পল অ্যাপ ব্যবহার করবেন। নিশ্চিত করুন যে প্রজেক্টটির একটি সক্রিয় বিলিং অ্যাকাউন্ট আছে।
আপনি যদি বিদ্যমান কোনো অ্যাপ ইঞ্জিন অ্যাপকে ক্লাউড রান-এ স্থানান্তর করতে চান, তাহলে এর পরিবর্তে সেই অ্যাপটি ব্যবহার করে নির্দেশনাটি অনুসরণ করতে পারেন।
আপনার প্রোজেক্টের জন্য প্রয়োজনীয় API-গুলো সক্রিয় করতে নিম্নলিখিত কমান্ডটি চালান:
gcloud services enable artifactregistry.googleapis.com cloudbuild.googleapis.com run.googleapis.com
২. বেসলাইন নমুনা অ্যাপটি নিন
আপনার নিজের মেশিনে অথবা ক্লাউড শেলে স্যাম্পল অ্যাপটি ক্লোন করুন, তারপর বেসলাইন ফোল্ডারে যান।
নমুনাটি একটি জাভা ৮, সার্ভলেট-ভিত্তিক ডেটাস্টোর অ্যাপ যা অ্যাপ ইঞ্জিনে ডেপ্লয়মেন্টের জন্য তৈরি। অ্যাপ ইঞ্জিনে ডেপ্লয়মেন্টের জন্য এই অ্যাপটি কীভাবে প্রস্তুত করবেন, তা জানতে README-তে দেওয়া নির্দেশাবলী অনুসরণ করুন।
৩. (ঐচ্ছিক) বেসলাইন অ্যাপ স্থাপন করুন
ক্লাউড রানে স্থানান্তরের আগে অ্যাপটি অ্যাপ ইঞ্জিনে কাজ করে কিনা, তা নিশ্চিত করতে চাইলে নিম্নলিখিত বিষয়গুলো প্রয়োজন।
README.md-এ দেওয়া ধাপগুলো অনুসরণ করুন:
-
gcloudCLI ইনস্টল করুন এবং এর সাথে পুনরায় পরিচিত হন। - আপনার প্রোজেক্টের জন্য
gcloud initদিয়ে gcloud CLI চালু করুন। -
gcloud app createব্যবহার করে অ্যাপ ইঞ্জিন প্রজেক্টটি তৈরি করুন। - নমুনা অ্যাপটি অ্যাপ ইঞ্জিনে স্থাপন করুন
./mvnw package appengine:deploy -Dapp.projectId=$PROJECT_ID
- অ্যাপটি অ্যাপ ইঞ্জিনে কোনো সমস্যা ছাড়াই চলে কিনা তা নিশ্চিত করুন।
৪. একটি আর্টিফ্যাক্ট রেজিস্ট্রি রিপোজিটরি তৈরি করুন
আপনার অ্যাপটিকে কন্টেইনারাইজ করার পর, আপনার ইমেজগুলো পুশ ও সংরক্ষণ করার জন্য একটি জায়গার প্রয়োজন হবে। গুগল ক্লাউডে এই কাজটি করার জন্য প্রস্তাবিত উপায় হলো আর্টিফ্যাক্ট রেজিস্ট্রি (Artifact Registry) ব্যবহার করা।
gcloud ব্যবহার করে নিম্নোক্তভাবে migration নামের রিপোজিটরিটি তৈরি করুন:
gcloud artifacts repositories create migration --repository-format=docker \
--description="Docker repository for the migrated app" \
--location="northamerica-northeast1"
উল্লেখ্য যে, এই রিপোজিটরিটি docker ফরম্যাট টাইপ ব্যবহার করে, কিন্তু আরও বিভিন্ন ধরনের রিপোজিটরি টাইপ উপলব্ধ রয়েছে।
এই পর্যায়ে, আপনার কাছে আপনার বেসলাইন অ্যাপ ইঞ্জিন অ্যাপটি রয়েছে এবং আপনার গুগল ক্লাউড প্রজেক্টটি ক্লাউড রানে মাইগ্রেট করার জন্য প্রস্তুত।
৪. অ্যাপ্লিকেশন ফাইলগুলি পরিবর্তন করুন
যেসব ক্ষেত্রে আপনার অ্যাপ অ্যাপ ইঞ্জিনের পুরোনো বান্ডেল সার্ভিস, কনফিগারেশন, বা অন্যান্য অ্যাপ ইঞ্জিন-এর নিজস্ব ফিচারগুলো ব্যাপকভাবে ব্যবহার করে, আমরা নতুন রানটাইমে আপগ্রেড করার সময়ও সেই সার্ভিসগুলো ব্যবহার করা চালিয়ে যাওয়ার পরামর্শ দিই। এই কোডল্যাবটি এমন অ্যাপ্লিকেশনগুলোর জন্য একটি মাইগ্রেশন পথ প্রদর্শন করে, যেগুলো ইতিমধ্যেই স্বতন্ত্র সার্ভিস ব্যবহার করে, অথবা সেগুলোকে রিফ্যাক্টর করে সেরকম করা সম্ভব।
১. জাভা ১৭-এ আপগ্রেড করা
আপনার অ্যাপটি যদি জাভা ৮-এ চলে, তাহলে নিরাপত্তা আপডেট পেতে এবং নতুন ল্যাঙ্গুয়েজ ফিচারগুলো ব্যবহারের সুযোগ পেতে ১১ বা ১৭-এর মতো পরবর্তী কোনো এলটিএস সংস্করণে আপগ্রেড করার কথা বিবেচনা করতে পারেন।
প্রথমে আপনার pom.xml এর প্রোপার্টিগুলো আপডেট করে নিম্নলিখিত বিষয়গুলো অন্তর্ভুক্ত করুন:
<properties>
<java.version>17</java.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
</properties>
এটি প্রোজেক্টের ভার্সন ১৭-এ সেট করবে, কম্পাইলার প্লাগইনকে জানিয়ে দেবে যে আপনি জাভা ১৭ ভাষার বৈশিষ্ট্যগুলো ব্যবহার করতে চান এবং কম্পাইল করা ক্লাসগুলো জাভা ১৭ জেভিএম-এর সাথে সামঞ্জস্যপূর্ণ হোক।
২. একটি ওয়েব সার্ভার অন্তর্ভুক্ত করা
অ্যাপ ইঞ্জিন এবং ক্লাউড রানের মধ্যে বেশ কিছু পার্থক্য রয়েছে যা এদের মধ্যে যেকোনো একটি ব্যবহার করার সময় বিবেচনা করা উচিত। একটি পার্থক্য হলো, অ্যাপ ইঞ্জিনের জাভা ৮ রানটাইম তার হোস্ট করা অ্যাপগুলোর জন্য একটি জেটি (Jetty) সার্ভার সরবরাহ ও পরিচালনা করত, কিন্তু ক্লাউড রান তা করে না। আমরা একটি ওয়েব সার্ভার এবং সার্ভলেট কন্টেইনারের জন্য স্প্রিং বুট (Spring Boot) ব্যবহার করব।
নিম্নলিখিত নির্ভরতাগুলি যোগ করুন:
<dependencies>
<!-- ... -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.6.6</version>
<exclusions>
<!-- Exclude the Tomcat dependency -->
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- Use Jetty instead -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
<version>2.6.6</version>
</dependency>
<!-- ... -->
</dependencies>
Spring Boot ডিফল্টরূপে একটি Tomcat সার্ভার এমবেড করে, কিন্তু এই স্যাম্পলটি সেই আর্টিফ্যাক্টটি বাদ দেবে এবং শুধুমাত্র Jetty ব্যবহার করবে, যাতে মাইগ্রেশনের পরে ডিফল্ট আচরণে পার্থক্য ন্যূনতম রাখা যায়। আমরা App Engine-এর ডিফল্ট ভার্সনের সাথে মিলিয়ে Jetty ভার্সনটিও কনফিগার করতে পারি।
<properties>
<java.version>17</java.version>
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<jetty.version>9.4.46.v20220331</jetty.version>
</properties>
৩. স্প্রিং বুট সেটআপ
যদিও স্প্রিং বুট আপনার সার্ভলেটগুলো কোনো পরিবর্তন ছাড়াই পুনরায় ব্যবহার করতে পারবে, তবে সেগুলোকে সহজে খুঁজে পাওয়ার জন্য কিছু কনফিগারেশনের প্রয়োজন হবে।
com.example.appengine প্যাকেজে নিম্নলিখিত MigratedServletApplication.java ক্লাসটি তৈরি করুন:
package com.example.appengine;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
@ServletComponentScan
@SpringBootApplication
@EnableAutoConfiguration
public class MigratedServletApplication {
public static void main(String[] args) {
SpringApplication.run(MigratedServletApplication.class, args);
}
}
উল্লেখ্য যে, এর মধ্যে @ServletComponentScan অ্যানোটেশনটি অন্তর্ভুক্ত রয়েছে, যা (ডিফল্টরূপে বর্তমান প্যাকেজে ) যেকোনো @WebServlets এর সন্ধান করবে এবং সেগুলোকে প্রত্যাশিতভাবে উপলব্ধ করে তুলবে।
৪. অ্যাপটিকে JAR হিসেবে প্যাকেজ করা
যদিও Jib ব্যবহার করে একটি war ফাইল থেকে আপনার অ্যাপকে কন্টেইনারাইজ করা সম্ভব, তবে আপনার অ্যাপটিকে একটি এক্সিকিউটেবল JAR হিসেবে প্যাকেজ করলে কাজটি আরও সহজ হয়ে যায়। এর জন্য খুব বেশি কনফিগারেশনের প্রয়োজন হয় না, বিশেষ করে সেইসব প্রোজেক্টের জন্য যেগুলো বিল্ড টুল হিসেবে Maven ব্যবহার করে — কারণ jar প্যাকেজিংই হলো এর ডিফল্ট আচরণ।
pom.xml ফাইল থেকে packaging ট্যাগটি সরিয়ে ফেলুন:
<packaging>war</packaging>
এরপরে, spring-boot-maven-plugin যোগ করুন:
<plugins>
<!-- ... -->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.6.6</version>
</plugin>
<!-- ... -->
</plugins>
৫. অ্যাপ ইঞ্জিন কনফিগারেশন, সার্ভিস এবং ডিপেন্ডেন্সি থেকে সরে আসা
কোডল্যাবের শুরুতে যেমন উল্লেখ করা হয়েছে, ক্লাউড রান এবং অ্যাপ ইঞ্জিন ভিন্ন ভিন্ন ইউজার এক্সপেরিয়েন্স দেওয়ার জন্য ডিজাইন করা হয়েছে। অ্যাপ ইঞ্জিনের কিছু ফিচার যা ডিফল্টভাবেই পাওয়া যায়—যেমন ক্রন এবং টাস্ক কিউ সার্ভিস—সেগুলো ম্যানুয়ালি পুনরায় তৈরি করতে হয় এবং পরবর্তী মডিউলগুলোতে এ বিষয়ে আরও বিস্তারিত আলোচনা করা হবে।
নমুনা অ্যাপটি লিগ্যাসি বান্ডেল সার্ভিস ব্যবহার করে না, কিন্তু যেসব ব্যবহারকারীর অ্যাপে তা ব্যবহৃত হয়, তারা নিম্নলিখিত গাইডগুলো দেখতে পারেন:
- বান্ডেল পরিষেবাগুলো থেকে সরে এসে উপযুক্ত স্বতন্ত্র পরিষেবা খোঁজা।
- যেসব ব্যবহারকারী অ্যাপ ইঞ্জিনেই থেকে জাভা ১১/১৭ রানটাইমে স্থানান্তরিত হচ্ছেন, তাদের জন্য XML কনফিগারেশন ফাইলগুলোকে YAML-এ রূপান্তর করা।
যেহেতু আপনি এখন থেকে ক্লাউড রান-এ ডেপ্লয় করবেন, তাই appengine-maven-plugin সরিয়ে ফেলা যেতে পারে:
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<!-- can be set w/ -DprojectId=myProjectId on command line -->
<projectId>${app.projectId}</projectId>
<!-- set the GAE version or use "GCLOUD_CONFIG" for an autogenerated GAE version -->
<version>GCLOUD_CONFIG</version>
</configuration>
</plugin>
৫. অ্যাপ্লিকেশনকে কন্টেইনারাইজ করুন
এই পর্যায়ে আপনি সরাসরি আপনার সোর্স কোড থেকে ম্যানুয়ালি আপনার অ্যাপটি ক্লাউড রান-এ ডেপ্লয় করতে পারেন। এটি একটি চমৎকার বিকল্প যা নেপথ্যে ক্লাউড বিল্ড ব্যবহার করে একটি স্বয়ংক্রিয় ডেপ্লয় অভিজ্ঞতা প্রদান করে। আমরা পরবর্তী মডিউলগুলোতে সোর্স ডেপ্লয় নিয়ে আরও বিস্তারিত আলোচনা করব।
বিকল্পভাবে, আপনার অ্যাপটি কীভাবে ডেপ্লয় করা হবে তার উপর যদি আরও বেশি নিয়ন্ত্রণ প্রয়োজন হয়, তবে আপনি একটি cloudbuild.yaml ফাইল তৈরি করে তা করতে পারেন, যেখানে আপনার উদ্দিষ্ট বিল্ড ধাপগুলো স্পষ্টভাবে উল্লেখ করা থাকবে:
১. একটি cloudbuild.yaml ফাইল নির্ধারণ করুন।
pom.xml ফাইলের একই স্তরে নিম্নলিখিত cloudbuild.yaml ফাইলটি তৈরি করুন:
steps:
# Test your build
- name: maven:eclipse-temurin
entrypoint: mvn
args: ["test"]
# Build with Jib
- name: maven:eclipse-temurin
entrypoint: mvn
args: [ "compile", "com.google.cloud.tools:jib-maven-plugin:3.2.1:build", "-Dimage=northamerica-northeast1-docker.pkg.dev/PROJECT_ID/migration/visitors:jib"]
# Deploy to Cloud Run
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
entrypoint: gcloud
args: [ 'run', 'deploy', 'visitors', '--image', 'northamerica-northeast1-docker.pkg.dev/PROJECT_ID/migration/visitors:jib', '--region', 'northamerica-northeast1', '--allow-unauthenticated']
একবার আমরা ক্লাউড বিল্ডকে এই ধাপগুলো অনুসরণ করতে বললে, এটি যা করবে:
-
./mvnw testদিয়ে আপনার টেস্টগুলো চালান। - Jib ব্যবহার করে আপনার ইমেজটি তৈরি করুন, পুশ করুন এবং আর্টিফ্যাক্ট রেজিস্ট্রি-তে ট্যাগ করুন।
-
gcloud run deployব্যবহার করে আপনার ইমেজটি ক্লাউড রান-এ ডিপ্লয় করুন।
মনে রাখবেন যে ক্লাউড রান-এ কাঙ্ক্ষিত সার্ভিস নেম হিসেবে 'visitors' সরবরাহ করা হয়। –allow-unauthenticated ফ্ল্যাগটি ব্যবহারকারীদের অথেন্টিকেশন ছাড়াই ওয়েবঅ্যাপটি ভিজিট করার সুযোগ দেয়। cloudbuild.yaml ফাইলে PROJECT_ID-এর জায়গায় আপনার প্রোজেক্টের আইডি বসাতে ভুলবেন না ।
এরপরে, ক্লাউড বিল্ড সার্ভিস অ্যাকাউন্টকে আর্টিফ্যাক্ট রেজিস্ট্রি ব্যবহারের অনুমতি দেওয়ার জন্য নিম্নলিখিত IAM পলিসি বাইন্ডিংগুলি যোগ করুন:
export PROJECT_ID=$(gcloud config list --format 'value(core.project)')
export PROJECT_NUMBER=$(gcloud projects describe $PROJECT_ID --format="value(projectNumber)" )
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
--role=roles/run.admin \
--project=$PROJECT_ID
gcloud iam service-accounts add-iam-policy-binding $PROJECT_NUMBER-compute@developer.gserviceaccount.com \
--member=serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com \
--role roles/iam.serviceAccountUser --project=$PROJECT_ID
২. বিল্ড প্রক্রিয়াটি চালান
এখন যেহেতু আপনি ক্লাউড বিল্ডকে কাঙ্ক্ষিত বিল্ড ধাপগুলো সম্পর্কে জানিয়ে দিয়েছেন, আপনি এক-ক্লিকে ডিপ্লয় করার জন্য প্রস্তুত।
নিম্নলিখিত কমান্ডটি চালান:
gcloud builds submit
প্রক্রিয়াটি সম্পন্ন হলে, আপনার কন্টেইনার ইমেজটি তৈরি হয়ে আর্টিফ্যাক্ট রেজিস্ট্রি-তে সংরক্ষিত হবে এবং ক্লাউড রান-এ ডেপ্লয় করা হবে।
এই কোডল্যাবের শেষে, আপনার অ্যাপটি java17-and-cloud-run/finish- এ থাকা অ্যাপটির মতো দেখতে হওয়া উচিত।
এবং এই তো! আপনি সফলভাবে একটি Java 8 App Engine অ্যাপকে Java 17 এবং Cloud Run-এ মাইগ্রেট করেছেন, এবং এখন হোস্টিং অপশনগুলোর মধ্যে পরিবর্তন ও বেছে নেওয়ার ক্ষেত্রে যে কাজগুলো করতে হয়, সে সম্পর্কে আপনার একটি পরিষ্কার ধারণা হয়েছে।
৬. সারসংক্ষেপ/পরিষ্কারকরণ
অভিনন্দন, আপনি আপনার অ্যাপটি আপগ্রেড, কন্টেইনারাইজ ও মাইগ্রেট করেছেন, এবং এর মাধ্যমেই এই টিউটোরিয়ালটি শেষ হলো!
এখান থেকে, পরবর্তী পদক্ষেপ হলো CI/CD এবং সফটওয়্যার সাপ্লাই চেইন সুরক্ষার বৈশিষ্ট্যগুলি সম্পর্কে আরও জানা, যা এখন ক্লাউড বিল্ডের মাধ্যমে স্থাপন করা আপনার নাগালের মধ্যে রয়েছে:
- ক্লাউড বিল্ড দিয়ে কাস্টম বিল্ড স্টেপ তৈরি করা
- বিল্ড ট্রিগার তৈরি এবং পরিচালনা করা
- আপনার ক্লাউড বিল্ড পাইপলাইনে অন-ডিমান্ড স্ক্যানিং ব্যবহার করা
ঐচ্ছিক: পরিষ্করণ করুন এবং/অথবা পরিষেবা নিষ্ক্রিয় করুন
এই টিউটোরিয়াল চলাকালীন আপনি যদি অ্যাপ ইঞ্জিনে স্যাম্পল অ্যাপটি ডেপ্লয় করে থাকেন, তাহলে চার্জ এড়ানোর জন্য অ্যাপটি ডিজেবল করতে মনে রাখবেন। যখন আপনি পরবর্তী কোডল্যাবে যাওয়ার জন্য প্রস্তুত হবেন, তখন আপনি এটি পুনরায় এনেবল করতে পারবেন। অ্যাপ ইঞ্জিন অ্যাপগুলো ডিজেবল থাকা অবস্থায়, সেগুলোতে কোনো ট্র্যাফিক আসবে না যার জন্য চার্জ প্রযোজ্য হবে, তবে ডেটাস্টোরের ব্যবহার তার ফ্রি কোটা অতিক্রম করলে বিলযোগ্য হতে পারে, তাই সেই সীমার মধ্যে থাকার জন্য যথেষ্ট পরিমাণ ডেটা ডিলিট করে দিন।
অন্যদিকে, যদি আপনি মাইগ্রেশন চালিয়ে যেতে না চান এবং সবকিছু পুরোপুরি মুছে ফেলতে চান, তাহলে আপনি আপনার সার্ভিসটি ডিলিট করে দিতে পারেন অথবা আপনার প্রজেক্টটি সম্পূর্ণভাবে শাটডাউন করে দিতে পারেন ।
৭. অতিরিক্ত সম্পদ
অ্যাপ ইঞ্জিন মাইগ্রেশন মডিউল কোডল্যাবস সমস্যা/মতামত
এই কোডল্যাবে কোনো সমস্যা পেলে, অভিযোগ জানানোর আগে অনুগ্রহ করে সমস্যাটি অনুসন্ধান করুন। নতুন সমস্যা অনুসন্ধান ও তৈরি করার লিঙ্ক:
অভিবাসন সম্পদ
- অ্যাপ ইঞ্জিন পরিষেবাগুলি আনবান্ডলিং করার জন্য মাইগ্রেশন বিকল্পগুলি
- ক্লাউড বিল্ডের জন্য বিল্ড ট্রিগার সেট আপ করা
- জাভা ১১/১৭-তে স্থানান্তরের বিষয়ে আরও তথ্য
অনলাইন রিসোর্স
এই টিউটোরিয়ালটির জন্য প্রাসঙ্গিক হতে পারে এমন কিছু অনলাইন রিসোর্স নিচে দেওয়া হলো:
অ্যাপ ইঞ্জিন
- অ্যাপ ইঞ্জিন ডকুমেন্টেশন
- অ্যাপ ইঞ্জিনের মূল্য নির্ধারণ এবং কোটা সংক্রান্ত তথ্য
- প্রথম ও দ্বিতীয় প্রজন্মের প্ল্যাটফর্মের তুলনা
- লিগ্যাসি রানটাইমগুলির জন্য দীর্ঘমেয়াদী সমর্থন
অন্যান্য ক্লাউড তথ্য
- গুগল ক্লাউড "সর্বদা বিনামূল্যে" স্তর
- গুগল ক্লাউড সিএলআই (
gcloudCLI) - গুগল ক্লাউডের সমস্ত ডকুমেন্টেশন
ভিডিও
- সার্ভারবিহীন মাইগ্রেশন স্টেশন
- সার্ভারবিহীন অভিযান
- গুগল ক্লাউড টেক -এ সাবস্ক্রাইব করুন
- গুগল ডেভেলপারদের সাবস্ক্রাইব করুন
লাইসেন্স
এই কাজটি ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন ২.০ জেনেরিক লাইসেন্সের অধীনে রয়েছে।