1. ভূমিকা
সার্ভারবিহীন ওয়ার্কফ্লো তৈরি করতে আপনি ওয়ার্কফ্লো ব্যবহার করতে পারেন যা আপনার সংজ্ঞায়িত ক্রমানুসারে সার্ভারহীন কাজগুলির একটি সিরিজকে একসাথে লিঙ্ক করে। আপনি Google ক্লাউডের API এর শক্তি, ক্লাউড ফাংশন এবং ক্লাউড রানের মতো সার্ভারহীন পণ্য এবং নমনীয় সার্ভারহীন অ্যাপ্লিকেশন তৈরি করতে বাহ্যিক API তে কল করতে পারেন।
কর্মপ্রবাহের জন্য কোন অবকাঠামো ব্যবস্থাপনার প্রয়োজন হয় না এবং চাহিদার সাথে সীমাহীনভাবে স্কেল করা হয়, যার মধ্যে শূন্যে নামানো সহ। এটির প্রতি-ব্যবহার মূল্যের মডেলের সাথে, আপনি শুধুমাত্র কার্যকর করার সময়ের জন্য অর্থ প্রদান করেন।
এই কোডল্যাবে, আপনি শিখবেন কিভাবে বিভিন্ন Google ক্লাউড পরিষেবা এবং বাহ্যিক HTTP API-কে Workflows-এর সাথে সংযুক্ত করতে হয়। আরও নির্দিষ্টভাবে, আপনি দুটি পাবলিক ক্লাউড ফাংশন পরিষেবা, একটি ব্যক্তিগত ক্লাউড রান পরিষেবা এবং একটি বহিরাগত পাবলিক HTTP API একটি ওয়ার্কফ্লোতে সংযুক্ত করবেন৷
আপনি কি শিখবেন
- কর্মপ্রবাহের বুনিয়াদি।
- ওয়ার্কফ্লোসের সাথে পাবলিক ক্লাউড ফাংশনগুলিকে কীভাবে সংযুক্ত করবেন।
- কর্মপ্রবাহের সাথে ব্যক্তিগত ক্লাউড রান পরিষেবাগুলিকে কীভাবে সংযুক্ত করবেন।
- ওয়ার্কফ্লোগুলির সাথে বহিরাগত HTTP APIগুলিকে কীভাবে সংযুক্ত করবেন।
2. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিসম্পন্ন পরিবেশ সেটআপ
- ক্লাউড কনসোলে সাইন ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ (যদি আপনার ইতিমধ্যেই একটি Gmail বা G Suite অ্যাকাউন্ট না থাকে তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।)
প্রজেক্ট আইডিটি মনে রাখবেন, সমস্ত Google ক্লাউড প্রকল্প জুড়ে একটি অনন্য নাম (উপরের নামটি ইতিমধ্যে নেওয়া হয়েছে এবং আপনার জন্য কাজ করবে না, দুঃখিত!)। এটি পরে এই কোডল্যাবে PROJECT_ID
হিসাবে উল্লেখ করা হবে।
- এর পরে, Google ক্লাউড সংস্থানগুলি ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে৷
এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। "ক্লিনিং আপ" বিভাগে যে কোনও নির্দেশাবলী অনুসরণ করতে ভুলবেন না যা আপনাকে কীভাবে সংস্থানগুলি বন্ধ করতে হবে তা পরামর্শ দেয় যাতে আপনি এই টিউটোরিয়ালের বাইরে বিলিং করতে না পারেন৷ Google ক্লাউডের নতুন ব্যবহারকারীরা $300USD ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷
ক্লাউড শেল শুরু করুন
যদিও Google ক্লাউড আপনার ল্যাপটপ থেকে দূরবর্তীভাবে পরিচালিত হতে পারে, এই কোডল্যাবে আপনি Google ক্লাউড শেল ব্যবহার করবেন, একটি কমান্ড লাইন পরিবেশ যা ক্লাউডে চলছে।
GCP কনসোল থেকে উপরের ডানদিকে টুলবারে ক্লাউড শেল আইকনে ক্লিক করুন:
পরিবেশের ব্যবস্থা করতে এবং সংযোগ করতে এটি শুধুমাত্র কয়েক মুহূর্ত নিতে হবে। এটি সমাপ্ত হলে, আপনি এই মত কিছু দেখতে হবে:
এই ভার্চুয়াল মেশিনটি আপনার প্রয়োজনীয় সমস্ত ডেভেলপমেন্ট টুল দিয়ে লোড করা হয়েছে। এটি একটি ক্রমাগত 5GB হোম ডিরেক্টরি অফার করে এবং Google ক্লাউডে চলে, যা নেটওয়ার্ক কর্মক্ষমতা এবং প্রমাণীকরণকে ব্যাপকভাবে উন্নত করে। এই ল্যাবে আপনার সমস্ত কাজ কেবল একটি ব্রাউজার দিয়ে করা যেতে পারে।
3. ওয়ার্কফ্লো ওভারভিউ
বেসিক
একটি ওয়ার্কফ্লো ওয়ার্কফ্লোস YAML-ভিত্তিক সিনট্যাক্স ব্যবহার করে বর্ণিত ধাপগুলির একটি সিরিজ নিয়ে গঠিত। এটি কর্মপ্রবাহের সংজ্ঞা। ওয়ার্কফ্লোস YAML সিনট্যাক্সের বিস্তারিত ব্যাখ্যার জন্য, সিনট্যাক্স রেফারেন্স পৃষ্ঠাটি দেখুন।
যখন একটি ওয়ার্কফ্লো তৈরি করা হয়, তখন এটি স্থাপন করা হয়, যা কার্যপ্রবাহকে কার্যকর করার জন্য প্রস্তুত করে। কার্যপ্রবাহের সংজ্ঞার মধ্যে থাকা যুক্তির একটি একক চালনা হল কার্য সম্পাদন। সমস্ত ওয়ার্কফ্লো এক্সিকিউশন স্বাধীন এবং প্রোডাক্টটি উচ্চ সংখ্যক সমসাময়িক এক্সিকিউশন সমর্থন করে।
পরিষেবাগুলি সক্ষম করুন৷
এই কোডল্যাবে, আপনি ক্লাউড ফাংশন, ক্লাউড রান পরিষেবাগুলিকে ওয়ার্কফ্লোগুলির সাথে সংযুক্ত করবেন। আপনি পরিষেবা তৈরির সময় ক্লাউড বিল্ড এবং ক্লাউড স্টোরেজ ব্যবহার করবেন।
সমস্ত প্রয়োজনীয় পরিষেবাগুলি সক্ষম করুন:
gcloud services enable \ cloudfunctions.googleapis.com \ run.googleapis.com \ workflows.googleapis.com \ cloudbuild.googleapis.com \ storage.googleapis.com
পরবর্তী ধাপে, আপনি একটি ওয়ার্কফ্লোতে দুটি ক্লাউড ফাংশন একসাথে সংযুক্ত করবেন।
4. প্রথম ক্লাউড ফাংশন স্থাপন করুন
প্রথম ফাংশনটি পাইথনে একটি র্যান্ডম নম্বর জেনারেটর।
ফাংশন কোডের জন্য একটি ডিরেক্টরি তৈরি করুন এবং নেভিগেট করুন:
mkdir ~/randomgen cd ~/randomgen
নিম্নলিখিত বিষয়বস্তু সহ ডিরেক্টরিতে একটি main.py
ফাইল তৈরি করুন:
import random, json from flask import jsonify def randomgen(request): randomNum = random.randint(1,100) output = {"random":randomNum} return jsonify(output)
যখন এটি একটি HTTP অনুরোধ গ্রহণ করে, তখন এই ফাংশনটি 1 থেকে 100 এর মধ্যে একটি র্যান্ডম নম্বর তৈরি করে এবং JSON ফর্ম্যাটে কলারের কাছে ফিরে আসে।
ফাংশনটি HTTP প্রক্রিয়াকরণের জন্য ফ্লাস্কের উপর নির্ভর করে এবং আমাদের এটি একটি নির্ভরতা হিসাবে যুক্ত করতে হবে। পাইথনের নির্ভরতাগুলি পিপ দিয়ে পরিচালিত হয় এবং requirements.txt
নামে একটি মেটাডেটা ফাইলে প্রকাশ করা হয়।
নিম্নলিখিত বিষয়বস্তু সহ একই ডিরেক্টরিতে একটি requirements.txt
ফাইল তৈরি করুন:
flask>=1.0.2
একটি HTTP ট্রিগার সহ ফাংশনটি স্থাপন করুন এবং এই কমান্ডের সাথে অনুমোদিত অননুমোদিত অনুরোধগুলির সাথে:
gcloud functions deploy randomgen \ --runtime python37 \ --trigger-http \ --allow-unauthenticated
একবার ফাংশনটি স্থাপন করা হলে, আপনি কনসোলে প্রদর্শিত httpsTrigger.url
বৈশিষ্ট্যের অধীনে ফাংশনের URL দেখতে পাবেন বা gcloud functions describe
কমান্ডের সাথে প্রদর্শিত হবে।
এছাড়াও আপনি নিম্নলিখিত curl
কমান্ডের সাহায্যে ফাংশনের সেই URLটি দেখতে পারেন:
curl $(gcloud functions describe randomgen --format='value(httpsTrigger.url)')
ফাংশন ওয়ার্কফ্লো জন্য প্রস্তুত.
5. দ্বিতীয় ক্লাউড ফাংশন স্থাপন করুন
দ্বিতীয় ফাংশন একটি গুণক. এটি প্রাপ্ত ইনপুটকে 2 দ্বারা গুণ করে।
ফাংশন কোডের জন্য একটি ডিরেক্টরি তৈরি করুন এবং নেভিগেট করুন:
mkdir ~/multiply cd ~/multiply
নিম্নলিখিত বিষয়বস্তু সহ ডিরেক্টরিতে একটি main.py
ফাইল তৈরি করুন:
import random, json from flask import jsonify def multiply(request): request_json = request.get_json() output = {"multiplied":2*request_json['input']} return jsonify(output)
যখন এটি একটি HTTP অনুরোধ গ্রহণ করে, তখন এই ফাংশনটি JSON বডি থেকে input
বের করে, এটিকে 2 দ্বারা গুণ করে এবং কলারের কাছে JSON ফর্ম্যাটে ফিরে আসে।
নিম্নলিখিত বিষয়বস্তু সহ একই ডিরেক্টরিতে একই requirements.txt
ফাইল তৈরি করুন:
flask>=1.0.2
একটি HTTP ট্রিগার সহ ফাংশনটি স্থাপন করুন এবং এই কমান্ডের সাথে অনুমোদিত অননুমোদিত অনুরোধগুলির সাথে:
gcloud functions deploy multiply \ --runtime python37 \ --trigger-http \ --allow-unauthenticated
একবার ফাংশনটি স্থাপন করা হলে, আপনি নিম্নলিখিত curl
কমান্ডের সাথে ফাংশনের সেই URLটিও দেখতে পারেন:
curl $(gcloud functions describe multiply --format='value(httpsTrigger.url)') \ -X POST \ -H "content-type: application/json" \ -d '{"input": 5}'
ফাংশন ওয়ার্কফ্লো জন্য প্রস্তুত.
6. দুটি ক্লাউড ফাংশন সংযুক্ত করুন
প্রথম ওয়ার্কফ্লোতে, দুটি ফাংশন একসাথে সংযুক্ত করুন।
নিম্নলিখিত বিষয়বস্তু সহ একটি workflow.yaml
ফাইল তৈরি করুন।
- randomgenFunction: call: http.get args: url: https://<region>-<project-id>.cloudfunctions.net/randomgen result: randomgenResult - multiplyFunction: call: http.post args: url: https://<region>-<project-id>.cloudfunctions.net/multiply body: input: ${randomgenResult.body.random} result: multiplyResult - returnResult: return: ${multiplyResult}
এই ওয়ার্কফ্লোতে, আপনি প্রথম ফাংশন থেকে একটি র্যান্ডম নম্বর পাবেন এবং আপনি এটি দ্বিতীয় ফাংশনে পাস করবেন। ফলাফল হল গুনিত এলোমেলো সংখ্যা।
প্রথম কর্মপ্রবাহ স্থাপন করুন:
gcloud workflows deploy workflow --source=workflow.yaml
প্রথম কর্মপ্রবাহ চালান:
gcloud workflows execute workflow
ওয়ার্কফ্লোটি কার্যকর হয়ে গেলে, আপনি পূর্ববর্তী ধাপে দেওয়া এক্সিকিউশন আইডিটি পাস করে ফলাফল দেখতে পারেন:
gcloud workflows executions describe <your-execution-id> --workflow workflow
আউটপুট result
এবং state
অন্তর্ভুক্ত করবে:
result: '{"body":{"multiplied":108},"code":200 ... } ... state: SUCCEEDED
7. একটি বহিরাগত HTTP API সংযুক্ত করুন৷
এর পরে, আপনি কর্মপ্রবাহে একটি বহিরাগত পরিষেবা হিসাবে math.js-কে সংযুক্ত করবেন।
math.js- এ, আপনি গাণিতিক অভিব্যক্তিকে এভাবে মূল্যায়ন করতে পারেন:
curl https://api.mathjs.org/v4/?'expr=log(56)'
এই সময়, আপনি আমাদের ওয়ার্কফ্লো আপডেট করতে ক্লাউড কনসোল ব্যবহার করবেন। Google ক্লাউড কনসোলে Workflows
খুঁজুন:
আপনার কর্মপ্রবাহ খুঁজুন এবং Definition
ট্যাবে ক্লিক করুন:
কর্মপ্রবাহের সংজ্ঞা সম্পাদনা করুন এবং math.js
এ একটি কল অন্তর্ভুক্ত করুন।
- randomgenFunction: call: http.get args: url: https://<region>-<project-id>.cloudfunctions.net/randomgen result: randomgenResult - multiplyFunction: call: http.post args: url: https://<region>-<project-id>.cloudfunctions.net/multiply body: input: ${randomgenResult.body.random} result: multiplyResult - logFunction: call: http.get args: url: https://api.mathjs.org/v4/ query: expr: ${"log(" + string(multiplyResult.body.multiplied) + ")"} result: logResult - returnResult: return: ${logResult}
ওয়ার্কফ্লো এখন মাল্টিপ্লাই ফাংশনের আউটপুটকে math.js
এ লগ ফাংশন কলে ফিড করে।
UI আপনাকে কার্যপ্রবাহ সম্পাদনা এবং স্থাপন করতে গাইড করবে। একবার স্থাপন করা হলে, কার্যপ্রবাহ চালানোর জন্য Execute
এ ক্লিক করুন। আপনি মৃত্যুদন্ডের বিশদ বিবরণ দেখতে পাবেন:
স্ট্যাটাস কোড 200
এবং লগ ফাংশনের আউটপুট সহ একটি body
লক্ষ্য করুন।
আপনি এইমাত্র আমাদের ওয়ার্কফ্লোতে একটি বাহ্যিক পরিষেবা সংহত করেছেন, দুর্দান্ত!
8. একটি ক্লাউড রান পরিষেবা স্থাপন করুন৷
শেষ অংশে, একটি প্রাইভেট ক্লাউড রান পরিষেবাতে কল দিয়ে কর্মপ্রবাহ চূড়ান্ত করুন৷ এর মানে হল যে ক্লাউড রান পরিষেবাতে কল করার জন্য ওয়ার্কফ্লোকে প্রমাণীকরণ করতে হবে।
ক্লাউড রান সার্ভিসটি পাস করা সংখ্যার math.floor
প্রদান করে।
পরিষেবা কোডের জন্য একটি ডিরেক্টরি তৈরি করুন এবং নেভিগেট করুন:
mkdir ~/floor cd ~/floor
নিম্নলিখিত বিষয়বস্তু সহ ডিরেক্টরিতে একটি app.py
ফাইল তৈরি করুন:
import json import logging import os import math from flask import Flask, request app = Flask(__name__) @app.route('/', methods=['POST']) def handle_post(): content = json.loads(request.data) input = float(content['input']) return f"{math.floor(input)}", 200 if __name__ != '__main__': # Redirect Flask logs to Gunicorn logs gunicorn_logger = logging.getLogger('gunicorn.error') app.logger.handlers = gunicorn_logger.handlers app.logger.setLevel(gunicorn_logger.level) app.logger.info('Service started...') else: app.run(debug=True, host='0.0.0.0', port=int(os.environ.get('PORT', 8080)))
ক্লাউড রান কন্টেইনার স্থাপন করে, তাই আপনার একটি Dockerfile
প্রয়োজন এবং আপনার কন্টেইনারকে 0.0.0.0
এবং PORT
env ভেরিয়েবলের সাথে আবদ্ধ করতে হবে, তাই উপরের কোডটি।
যখন এটি একটি HTTP অনুরোধ গ্রহণ করে, তখন এই ফাংশনটি JSON বডি থেকে input
বের করে, math.floor কল করে এবং কলারের কাছে ফলাফল ফেরত দেয়।
একই ডিরেক্টরিতে, নিম্নলিখিত Dockerfile
তৈরি করুন:
# Use an official lightweight Python image. # https://hub.docker.com/_/python FROM python:3.7-slim # Install production dependencies. RUN pip install Flask gunicorn # Copy local code to the container image. WORKDIR /app COPY . . # Run the web service on container startup. Here we use the gunicorn # webserver, with one worker process and 8 threads. # For environments with multiple CPU cores, increase the number of workers # to be equal to the cores available. CMD exec gunicorn --bind 0.0.0.0:8080 --workers 1 --threads 8 app:app
ধারক তৈরি করুন:
export SERVICE_NAME=floor gcloud builds submit --tag gcr.io/${GOOGLE_CLOUD_PROJECT}/${SERVICE_NAME}
একবার কন্টেইনার তৈরি হয়ে গেলে, ক্লাউড রানে স্থাপন করুন। no-allow-unauthenticated
পতাকা লক্ষ্য করুন। এটি নিশ্চিত করে যে পরিষেবাটি শুধুমাত্র প্রমাণীকৃত কলগুলি গ্রহণ করে:
gcloud run deploy ${SERVICE_NAME} \ --image gcr.io/${GOOGLE_CLOUD_PROJECT}/${SERVICE_NAME} \ --platform managed \ --no-allow-unauthenticated
একবার স্থাপন করা হলে, পরিষেবাটি কর্মপ্রবাহের জন্য প্রস্তুত।
9. ক্লাউড রান পরিষেবা সংযুক্ত করুন৷
প্রাইভেট ক্লাউড রান পরিষেবাতে কল করার জন্য আপনি ওয়ার্কফ্লোস কনফিগার করার আগে, আপনাকে ওয়ার্কফ্লো ব্যবহার করার জন্য একটি পরিষেবা অ্যাকাউন্ট তৈরি করতে হবে:
export SERVICE_ACCOUNT=workflows-sa gcloud iam service-accounts create ${SERVICE_ACCOUNT}
পরিষেবা অ্যাকাউন্টে run.invoker
ভূমিকা মঞ্জুর করুন। এটি পরিষেবা অ্যাকাউন্টটিকে প্রমাণীকৃত ক্লাউড রান পরিষেবাগুলিতে কল করার অনুমতি দেবে:
gcloud projects add-iam-policy-binding ${GOOGLE_CLOUD_PROJECT} \ --member "serviceAccount:${SERVICE_ACCOUNT}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com" \ --role "roles/run.invoker"
ক্লাউড রান পরিষেবা অন্তর্ভুক্ত করতে workflow.yaml
এ ওয়ার্কফ্লো সংজ্ঞা আপডেট করুন। ক্লাউড রান পরিষেবার কলগুলিতে প্রমাণীকরণ টোকেনে ওয়ার্কফ্লো পাস হয় তা নিশ্চিত করতে আপনি কীভাবে auth
ক্ষেত্র অন্তর্ভুক্ত করছেন তা লক্ষ্য করুন:
- randomgenFunction: call: http.get args: url: https://<region>-<project-id>.cloudfunctions.net/randomgen result: randomgenResult - multiplyFunction: call: http.post args: url: https://<region>-<project-id>.cloudfunctions.net/multiply body: input: ${randomgenResult.body.random} result: multiplyResult - logFunction: call: http.get args: url: https://api.mathjs.org/v4/ query: expr: ${"log(" + string(multiplyResult.body.multiplied) + ")"} result: logResult - floorFunction: call: http.post args: url: https://floor-<random-hash>.run.app auth: type: OIDC body: input: ${logResult.body} result: floorResult - returnResult: return: ${floorResult}
কর্মপ্রবাহ আপডেট করুন। পরিষেবা-অ্যাকাউন্টে এই সময় পাস:
gcloud workflows deploy workflow \ --source=workflow.yaml \ --service-account=${SERVICE_ACCOUNT}@${GOOGLE_CLOUD_PROJECT}.iam.gserviceaccount.com
কর্মপ্রবাহ চালান:
gcloud workflows execute workflow
কয়েক সেকেন্ডের মধ্যে, আপনি ফলাফল দেখতে ওয়ার্কফ্লো এক্সিকিউশনের দিকে নজর দিতে পারেন:
gcloud workflows executions describe <your-execution-id> --workflow workflow
আউটপুট একটি পূর্ণসংখ্যা result
এবং state
অন্তর্ভুক্ত করবে:
result: '{"body":"5","code":200 ... } ... state: SUCCEEDED
10. অভিনন্দন!
কোডল্যাব সম্পূর্ণ করার জন্য অভিনন্দন।
আমরা কভার করেছি কি
- কর্মপ্রবাহের বুনিয়াদি।
- ওয়ার্কফ্লোসের সাথে পাবলিক ক্লাউড ফাংশনগুলিকে কীভাবে সংযুক্ত করবেন।
- কর্মপ্রবাহের সাথে ব্যক্তিগত ক্লাউড রান পরিষেবাগুলিকে কীভাবে সংযুক্ত করবেন।
- ওয়ার্কফ্লোগুলির সাথে বহিরাগত HTTP APIগুলিকে কীভাবে সংযুক্ত করবেন।