আপনার ডেটা ম্যানেজার API প্রোডাকশন ডেপ্লয়মেন্টের জন্য উপযুক্ত যাচাইকরণ পদ্ধতি বেছে নিতে এবং কনফিগার করতে এই নির্দেশিকা আপনাকে সাহায্য করে।
আপনার ডেপ্লয়মেন্ট সিনারিও বেছে নিন
আপনার অ্যাপ্লিকেশন আর্কিটেকচার এবং ডিপ্লয়মেন্ট এনভায়রনমেন্টের সাথে মেলে এমন যাচাইকরণ পদ্ধতি বেছে নিন:
- Google Cloud-এ ওয়ার্কলোড: Compute Engine, Cloud Run, Cloud Functions বা GKE-তে চলা অটোমেটেড ওয়ার্কলোডের (যেমন, ETL পাইপলাইন, ব্যাচ জব বা ব্যাকএন্ড পরিষেবা) জন্য, অ্যাটাচ করা পরিষেবা অ্যাকাউন্ট বা GKE-এর জন্য ওয়ার্কলোড আইডেন্টিটি ফেডারেশনের সাথে অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল (ADC) ব্যবহার করুন।
- Google Cloud-এর বাইরে ওয়ার্কলোড: অন-প্রিমিসেস বা অন্যান্য ক্লাউড প্রোভাইডারে চলা অটোমেটেড ওয়ার্কলোডের জন্য, Workload Identity Federation বা কোনও পরিষেবা অ্যাকাউন্ট কী-এর সাথে অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল (ADC) ব্যবহার করুন।
- ব্যবহারকারীর হয়ে কাজ করা: থার্ড-পার্টি প্ল্যাটফর্ম ও একাধিক টেন্যান্টের অ্যাপ্লিকেশন যা এক্সটার্নাল ব্যবহারকারীর অ্যাকাউন্ট ম্যানেজ করে (যেমন আপনার প্ল্যাটফর্মে সাইন-আপ করা বিজ্ঞাপনদাতা), সেগুলির জন্য প্রতি ব্যবহারকারী রিফ্রেশ টোকেন সহ OAuth 2.0 ওয়েব সার্ভার ফ্লো ব্যবহার করুন অথবা আপনি অনুমোদিত ডেটা পার্টনার হলে পার্টনার লিঙ্ক ব্যবহার করুন।
Google Cloud যাচাইকরণ সংক্রান্ত সাধারণ নির্দেশনার জন্য, Google Cloud যাচাইকরণ সিদ্ধান্ত ট্রি দেখুন।
Google Cloud-এ ওয়ার্কলোড
Google Cloud-এ রান করার সময়, সরাসরি আপনার কম্পিউট রিসোর্সে একটি পরিষেবা অ্যাকাউন্ট অ্যাটাচ করুন অথবা GKE-এর জন্য ওয়ার্কলোড আইডেন্টিটি ফেডারেশন কনফিগার করুন। ক্লায়েন্ট লাইব্রেরি ADC ব্যবহার করে যাতে ক্রেডেনশিয়াল ফাইল বা এনভায়রনমেন্ট ভেরিয়েবল ছাড়াই পরিষেবা অ্যাকাউন্টের জন্য স্বল্প-মেয়াদী ক্রেডেনশিয়াল অটোমেটিক ফিরিয়ে আনা যায়।
Compute Engine
ভার্চুয়াল মেশিন ইনস্ট্যান্স তৈরি করার সময়, সার্ভিস অ্যাকাউন্ট এবং ডেটা ম্যানেজার API স্কোপ উল্লেখ করুন যাতে ইনস্ট্যান্স মেটাডেটা সার্ভারের মাধ্যমে ফেরত পাঠানো অ্যাক্সেস টোকেনে প্রয়োজনীয় অনুমোদন অন্তর্ভুক্ত থাকে।
gcloud compute instances create INSTANCE_NAME \
--service-account="SERVICE_ACCOUNT_EMAIL" \
--scopes="https://www.googleapis.com/auth/datamanager,https://www.googleapis.com/auth/cloud-platform"
আগে থেকে থাকা ইনস্ট্যান্সে স্কোপ বা পরিষেবা অ্যাকাউন্ট আপডেট করতে, ইনস্ট্যান্স বন্ধ করুন,
set-service-account-এর মাধ্যমে কনফিগারেশন আপডেট করুন এবং ইনস্ট্যান্স
রিস্টার্ট করুন:
gcloud compute instances stop INSTANCE_NAME
gcloud compute instances set-service-account \
INSTANCE_NAME \
--service-account="SERVICE_ACCOUNT_EMAIL" \
--scopes="https://www.googleapis.com/auth/datamanager,https://www.googleapis.com/auth/cloud-platform"
gcloud compute instances start INSTANCE_NAME
Cloud Run
পরিষেবা ডিপ্লয় করার সময় পরিষেবা অ্যাকাউন্ট উল্লেখ করুন:
gcloud run deploy SERVICE_NAME \
--image="IMAGE_URL" \
--service-account="SERVICE_ACCOUNT_EMAIL"
Cloud Functions
ফাংশন ডিপ্লয় করার সময় পরিষেবা অ্যাকাউন্ট উল্লেখ করুন:
gcloud functions deploy FUNCTION_NAME \
--service-account="SERVICE_ACCOUNT_EMAIL" \
--runtime="RUNTIME" \
--trigger-http
GKE
- আপনার ক্লাস্টারে GKE-এর জন্য ওয়ার্কলোড আইডেন্টিটি ফেডারেশন চালু করুন।
আপনার Kubernetes Service Account (KSA) Google Service Account (GSA)-এর সাথে বাইন্ড করুন:
# Define the Kubernetes service account member: KUBERNETES_MEMBER="serviceAccount:PROJECT_ID.svc.id.goog[KUBERNETES_NAMESPACE/KUBERNETES_SA_NAME]" # Grant the Workload Identity User role to the Kubernetes service account: gcloud iam service-accounts add-iam-policy-binding \ SERVICE_ACCOUNT_EMAIL \ --role="roles/iam.workloadIdentityUser" \ --member="${KUBERNETES_MEMBER}"Google পরিষেবা অ্যাকাউন্টের সাথে Kubernetes পরিষেবা অ্যাকাউন্ট অ্যানোটেট করুন ইমেল:
kubectl annotate serviceaccount KUBERNETES_SA_NAME \ --namespace="KUBERNETES_NAMESPACE" \ iam.gke.io/gcp-service-account="SERVICE_ACCOUNT_EMAIL"আপনার পড স্পেসিফিকেশনে Kubernetes পরিষেবা অ্যাকাউন্ট উল্লেখ করুন:
apiVersion: v1 kind: Pod metadata: name: data-manager-worker spec: serviceAccountName: KUBERNETES_SA_NAME containers: - name: worker image: IMAGE_URL
IAM ও অ্যাকাউন্ট অ্যাক্সেস যাচাই করা
আপনার প্রোডাকশন অ্যাপ্লিকেশন ডেপ্লয় করার আগে, আপনার পরিষেবা অ্যাকাউন্টের প্রয়োজনীয় অনুমতি আছে কিনা তা যাচাই করুন:
Google Cloud IAM অনুমতি: ডেটা ম্যানেজার API চালু করা আছে এমন Google Cloud প্রোজেক্টে পরিষেবা অ্যাকাউন্টকে পরিষেবা ব্যবহার সংক্রান্ত গ্রাহক ভূমিকা (
roles/serviceusage.serviceUsageConsumer) দিন।gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/serviceusage.serviceUsageConsumer"ডেস্টিনেশন অ্যাকাউন্ট অ্যাক্সেস: আপনার ডেস্টিনেশন অ্যাকাউন্টে পরিষেবা অ্যাকাউন্টকে প্রয়োজনীয় অ্যাক্সেস দিন। ধাপে ধাপে নির্দেশাবলীর জন্য, অ্যাকাউন্ট অ্যাক্সেস সেট-আপ করুন দেখুন।
Google Cloud-এর বাইরে ওয়ার্কলোড
অন-প্রিমিসেস ডেটা সেন্টার বা অন্য ক্লাউড প্রোভাইডারে কোড রান করার সময়, নিচে উল্লেখ করা যাচাইকরণ মেকানিজমের মধ্যে থেকে একটি বেছে নিন:
Workload Identity Federation (সাজেস্ট করা): আপনার অ্যাপ্লিকেশনকে পরিষেবা অ্যাকাউন্ট কী ম্যানেজ না করেই স্বল্পমেয়াদী Google Cloud ক্রেডেনশিয়ালের জন্য আপনার এক্সটার্নাল আইডেন্টিটি প্রদানকারীর থেকে ক্রেডেনশিয়াল এক্সচেঞ্জ করতে দিতে, Workload Identity Federation কনফিগার করুন। ক্রেডেনশিয়াল কনফিগারেশন ফাইল তৈরি করুন এবং
GOOGLE_APPLICATION_CREDENTIALSএনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে ADC-কে এটি দিন।পরিষেবা অ্যাকাউন্ট কী (ফলব্যাক): ওয়ার্কলোড আইডেন্টিটি ফেডারেশন উপলভ্য না থাকলে, পরিষেবা অ্যাকাউন্ট কী তৈরি করুন এবং
GOOGLE_APPLICATION_CREDENTIALSএনভায়রনমেন্ট ভেরিয়েবল ব্যবহার করে ADC-কে এটি প্রদান করুন।
GOOGLE_APPLICATION_CREDENTIALS সেট করুন
Workload Identity Federation ক্রেডেনশিয়াল কনফিগারেশন ফাইল বা
সার্ভিস অ্যাকাউন্ট কী ফাইলের অ্যাবসলিউট
পাথ হিসেবে GOOGLE_APPLICATION_CREDENTIALS এনভায়রনমেন্ট ভেরিয়েবেল সেট করুন যাতে ক্লায়েন্ট লাইব্রেরি ADC ব্যবহার করে আপনার ক্রেডেনশিয়াল
অটোমেটিক লোকেট করতে পারে।
Linux / macOS
আপনার শেল প্রোফাইল বা ডিপ্লয়মেন্ট স্ক্রিপ্টে এনভায়রনমেন্ট ভেরিয়েবেল সেট করুন:
export GOOGLE_APPLICATION_CREDENTIALS=\
"/path/to/credentials.json"
Windows (PowerShell)
PowerShell-এ এনভায়রনমেন্ট ভেরিয়েবল সেট করুন:
$env:GOOGLE_APPLICATION_CREDENTIALS = `
"C:\path\to\credentials.json"
Docker / কন্টেনার
কন্টেনারে ক্রেডেনশিয়াল ফাইল মাউন্ট করুন এবং এনভায়রনমেন্ট ভেরিয়েবল সেট করুন:
ENV GOOGLE_APPLICATION_CREDENTIALS="/secrets/credentials.json"
অথবা রানটাইমে এনভায়রনমেন্ট ভেরিয়েবল পাস করুন:
HOST_CREDS="/host/path/credentials.json"
docker run -e GOOGLE_APPLICATION_CREDENTIALS="/secrets/credentials.json" \
-v "${HOST_CREDS}:/secrets/credentials.json:ro" \
IMAGE_NAME
Kubernetes
ক্রেডেনশিয়ালকে সিক্রেট হিসেবে মাউন্ট করুন এবং পডের এনভায়রনমেন্টে এটি রেফারেন্স করুন:
apiVersion: v1
kind: Pod
metadata:
name: data-manager-worker
spec:
containers:
- name: worker
image: IMAGE_URL
env:
- name: GOOGLE_APPLICATION_CREDENTIALS
value: "/etc/secrets/google/credentials.json"
volumeMounts:
- name: credentials-volume
mountPath: "/etc/secrets/google"
readOnly: true
volumes:
- name: credentials-volume
secret:
secretName: data-manager-credentials
REST ও curl অনুরোধ যাচাই করা
আপনার অটোমেটেড পাইপলাইন ক্লায়েন্ট লাইব্রেরি ব্যবহার করার পরিবর্তে curl-এর মাধ্যমে কাঁচা HTTP অনুরোধ করলে, ম্যানুয়ালি টোকেন সাইন না করে নন-ইন্টার্যাক্টিভভাবে যাচাইকরণ ও অ্যাক্সেস টোকেন ম্যানেজ করতে
Google Cloud CLI ব্যবহার করুন:
আপনার এনভায়রনমেন্টে কনফিগার করা ক্রেডেনশিয়াল ফাইল ব্যবহার করে Google Cloud CLI-কে অনুমোদন দিন:
gcloud auth login --cred-file="${GOOGLE_APPLICATION_CREDENTIALS}"আপনার API অনুরোধের
Authorizationহেডারে জেনারেট করা অ্যাক্সেস টোকেন পাস করুন:curl -X POST "https://datamanager.googleapis.com/v1/..." \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json" \ -d @request.jsonGoogle Cloud CLI অটোমেটিক অ্যাক্সেস টোকেন ক্যাশে করে এবং মেয়াদ শেষ হওয়ার আগে এটি রিফ্রেশ করে।
IAM ও অ্যাকাউন্ট অ্যাক্সেস যাচাই করা
আপনার প্রোডাকশন অ্যাপ্লিকেশন ডিপ্লয় করার আগে, আপনার পরিষেবা অ্যাকাউন্টে প্রয়োজনীয় অনুমতি আছে কিনা তা যাচাই করুন:
Google Cloud IAM অনুমতি: ডেটা ম্যানেজার API চালু করা আছে এমন Google Cloud প্রোজেক্টে পরিষেবা অ্যাকাউন্টকে পরিষেবা ব্যবহার সংক্রান্ত গ্রাহক ভূমিকা (
roles/serviceusage.serviceUsageConsumer) দিন।gcloud projects add-iam-policy-binding PROJECT_ID \ --member="serviceAccount:SERVICE_ACCOUNT_EMAIL" \ --role="roles/serviceusage.serviceUsageConsumer"ডেস্টিনেশন অ্যাকাউন্ট অ্যাক্সেস: আপনার ডেস্টিনেশন অ্যাকাউন্টে পরিষেবা অ্যাকাউন্টকে প্রয়োজনীয় অ্যাক্সেস দিন। ধাপে-ধাপে দেওয়া নির্দেশাবলীর জন্য, অ্যাকাউন্ট অ্যাক্সেস সেট-আপ করুন দেখুন।
ব্যবহারকারীর হয়ে কাজ করা
মার্কেটিং প্ল্যাটফর্ম এবং এজেন্সির মতো থার্ড-পার্টি প্ল্যাটফর্মগুলিকে প্রায়শই একাধিক বিজ্ঞাপনদাতার পক্ষ থেকে API অনুরোধ পাঠাতে হয় যারা তাদের পরিষেবার জন্য সাইন-আপ করেন।
এই আর্কিটেকচারে, অ্যাপ্লিকেশন ডিফল্ট ক্রেডেনশিয়াল ব্যবহার করার পরিবর্তে, OAuth 2.0 ওয়েব সার্ভার ফ্লো ব্যবহার করে প্রতিটি বিজ্ঞাপনদাতার থেকে অফলাইন অ্যাক্সেস সহ ব্যবহারকারীর ক্রেডেনশিয়াল পান এবং তারপরে সেই ক্রেডেনশিয়াল ব্যবহার করে রানটাইমে ক্লায়েন্ট লাইব্রেরি কনফিগার করুন। কোন বিজ্ঞাপনদাতার অ্যাকাউন্ট অনুরোধ ম্যানেজ করছে তার উপর ভিত্তি করে এটি করা হয়।
OAuth 2.0 ওয়েব ফ্লো প্রয়োগ করা
মাল্টি-টেন্যান্ট অ্যাপ্লিকেশনের জন্য কীভাবে ব্যবহারকারী ডেলিগেশন সেট-আপ করবেন তা এখানে দেওয়া হল:
অফলাইন অ্যাক্সেসের অনুরোধ করুন: ব্যবহারকারীদের Google-এর OAuth সম্মতি স্ক্রিনে নিয়ে যান যেখানে
https://www.googleapis.com/auth/datamanagerস্কোপের সাথেaccess_type=offlineএবংprompt=consent-এর অনুরোধ করা হয়। আপনার সার্ভার যাচাইকরণ কোডের বিনিময়ে একটি অ্যাক্সেস টোকেন ওrefresh_tokenদেয়। ধাপে-ধাপে নির্দেশাবলীর জন্য, ওয়েব সার্ভার অ্যাপ্লিকেশনের জন্য OAuth 2.0 দেখুন।ক্রেডেনশিয়াল নিরাপদে স্টোর করা: আপনার প্ল্যাটফর্মে প্রতিটি ব্যবহারকারীর অ্যাকাউন্টের সাথে যুক্ত এনক্রিপটেড ক্রেডেনশিয়াল স্টোরে তাদের রিফ্রেশ টোকেন নিরাপদে স্টোর করুন।
রানটাইমে ক্লায়েন্ট লাইব্রেরি শুরু করা: কোনও নির্দিষ্ট ব্যবহারকারীর হয়ে API অনুরোধ পাঠানোর সময়, ব্যবহারকারীর জন্য আপনার সেভ করা রিফ্রেশ টোকেন এবং আপনার অ্যাপের ক্লায়েন্ট আইডি ও ক্লায়েন্ট সিক্রেট থেকে ব্যবহারকারীর ক্রেডেনশিয়াল তৈরি করুন এবং ক্লায়েন্ট শুরু করার সময় সেগুলি পাস করুন:
.NET
using Google.Ads.DataManager.V1; using Google.Apis.Auth.OAuth2; UserCredential credential = CredentialFactory.FromJsonParameters<UserCredential>( new JsonCredentialParameters { Type = JsonCredentialParameters.AuthorizedUserCredentialType, ClientId = clientId, ClientSecret = clientSecret, RefreshToken = refreshToken }); IngestionServiceClient client = new IngestionServiceClientBuilder { Credential = credential }.Build();খুলুন
import ( "context" datamanager "cloud.google.com/go/datamanager/apiv1" "golang.org/x/oauth2" "golang.org/x/oauth2/google" "google.golang.org/api/option" ) cfg := &oauth2.Config{ ClientID: clientID, ClientSecret: clientSecret, Endpoint: google.Endpoint, } ts := cfg.TokenSource(ctx, &oauth2.Token{RefreshToken: refreshToken}) client, err := datamanager.NewIngestionClient(ctx, option.WithTokenSource(ts))Java
import com.google.ads.datamanager.v1.IngestionServiceClient; import com.google.ads.datamanager.v1.IngestionServiceSettings; import com.google.api.gax.core.FixedCredentialsProvider; import com.google.auth.oauth2.UserCredentials; UserCredentials credentials = UserCredentials.newBuilder() .setClientId(clientId) .setClientSecret(clientSecret) .setRefreshToken(refreshToken) .build(); IngestionServiceSettings settings = IngestionServiceSettings.newBuilder() .setCredentialsProvider(FixedCredentialsProvider.create(credentials)) .build(); try (IngestionServiceClient client = IngestionServiceClient.create(settings)) { // Send API requests using client... }Node.js
const {IngestionServiceClient} = require('@google-ads/datamanager').v1; const {UserRefreshClient} = require('google-auth-library'); const authClient = new UserRefreshClient({ clientId, clientSecret, refreshToken, }); const client = new IngestionServiceClient({authClient});PHP
use Google\Ads\DataManager\V1\Client\IngestionServiceClient; use Google\Auth\Credentials\UserRefreshCredentials; $credentials = new UserRefreshCredentials( null, [ 'client_id' => $clientId, 'client_secret' => $clientSecret, 'refresh_token' => $refreshToken, ] ); $client = new IngestionServiceClient(['credentials' => $credentials]);Python
from google.ads.datamanager_v1 import IngestionServiceClient from google.oauth2.credentials import Credentials credentials = Credentials.from_authorized_user_info({ "client_id": client_id, "client_secret": client_secret, "refresh_token": refresh_token, }) client = IngestionServiceClient(credentials=credentials)Ruby
require "google/ads/data_manager/v1" require "googleauth" credentials = Google::Auth::UserRefreshCredentials.new( client_id: client_id, client_secret: client_secret, refresh_token: refresh_token ) client = Google::Ads::DataManager::V1::IngestionService::Client.new do |config| config.credentials = credentials end
OAuth অ্যাপ যাচাইকরণ সম্পূর্ণ করা
ডেটা ম্যানেজার API স্কোপ সংবেদনশীল স্কোপ হওয়ার কারণে, এক্সটার্নাল Google অ্যাকাউন্ট থেকে ব্যবহারকারীর ক্রেডেনশিয়াল পাওয়ার জন্য ব্যবহৃত যেকোনও Google Cloud অ্যাপকে প্রোডাকশনে যাওয়ার আগে অবশ্যই Google OAuth যাচাইকরণ প্রক্রিয়ার মধ্যে দিয়ে যেতে হবে:
- ডেভেলপমেন্ট: Google Cloud কনসোলের দর্শক পৃষ্ঠায় অ্যাপের প্রকাশনার স্ট্যাটাস টেস্টিং হিসেবে সেট করা থাকলে, শুধুমাত্র নির্দিষ্ট করা টেস্ট অ্যাকাউন্ট আপনার অ্যাপ্লিকেশনকে অনুমোদন করতে পারবে।
- প্রোডাকশন: এক্সটার্নাল ব্যবহারকারীদের জন্য আপনার অ্যাপ্লিকেশন উপলভ্য করার আগে, প্রকাশনার স্ট্যাটাস প্রোডাকশনে আছে হিসেবে সেট করুন এবং যাচাইকরণের জন্য অ্যাপ জমা দিন।
পরিষেবা অ্যাকাউন্ট ব্যবহার করে রান করা ওয়ার্কলোডের জন্য অ্যাপ যাচাইকরণের প্রয়োজন নেই। এছাড়াও, ইন্টার্নাল অ্যাপ্লিকেশনের মতো কিছু পরিস্থিতিতে ব্যতিক্রম আছে। বিস্তারিত জানতে কখন যাচাইকরণের প্রয়োজন নেই দেখুন।
বিকল্প: পার্টনার লিঙ্ক
আপনার সংস্থা অনুমোদিত ডেটা পার্টনার হলে, আপনি চলমান ডেটা ইনজেশনের জন্য প্রতি ব্যবহারকারী OAuth টোকেন ম্যানেজ করার পরিবর্তে পার্টনার লিঙ্ক ব্যবহার করতে পারবেন।
পার্টনার লিঙ্কের মাধ্যমে, বিজ্ঞাপনদাতারা তাদের অ্যাকাউন্টকে Google Ads, Display & Video 360 বা Google Ad Manager UI-তে আপনার ডেটা পার্টনার অ্যাকাউন্টের সাথে কানেক্ট করেন। লিঙ্ক তৈরি হয়ে যাওয়ার পরে, আপনার অ্যাপ্লিকেশন ADC-এর মাধ্যমে আপনার নিজস্ব পরিষেবা অ্যাকাউন্ট ক্রেডেনশিয়াল ব্যবহার করে ইনজেশন অনুরোধ পাঠায়, যার ফলে দীর্ঘস্থায়ী ব্যবহারকারীর রিফ্রেশ টোকেন স্টোর ও বজায় রাখার প্রয়োজন হয় না।
প্রোডাকশন সংক্রান্ত পেশাদার পদ্ধতি
প্রোডাকশনে যাওয়ার সময় এইসব মূল অপারেশনাল বিষয় বিবেচনা করে দেখুন:
- সমস্যা সমাধান ও যাচাইকরণ: API কীভাবে দ্রুত-ব্যর্থ মডেল ব্যবহার করে অনুরোধ যাচাই করে এবং স্ট্রাকচার করা সমস্যার বিবরণ ফেরায় তা বুঝুন।
- আবার চেষ্টা করার স্ট্র্যাটেজি: ক্ষণস্থায়ী সার্ভার সমস্যার জন্য জিটার সহ এক্সপোনেনশিয়াল ব্যাকঅফ প্রয়োগ করুন।
- ব্যাচিং ও কনকারেন্সি: রেকর্ড ব্যাচ করে এবং সীমার মধ্যে একই সাথে অনুরোধ পাঠিয়ে থ্রুপুট সর্বাধিক করুন।
- ডায়াগনস্টিক ও মনিটরিং: উত্তর ক্যাপচার করুন অনুরোধ আইডি এবং অ্যাসিঙ্ক্রোনাস প্রসেসিং যাচাই করতে এবং সতর্কতা ও সমস্যা শনাক্ত করতে ডায়াগনস্টিক পরিষেবা কোয়েরি করুন।