আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
এপিআই প্রক্সিতে কোনো এক্সটেনশন অন্তর্ভুক্ত করতে ExtensionCallout পলিসি ব্যবহার করুন।
একটি এক্সটেনশন Apigee Edge-এর বাইরের কোনো নির্দিষ্ট রিসোর্সে অ্যাক্সেস প্রদান করে। রিসোর্সটি Google Cloud Platform-এর পরিষেবা, যেমন Cloud Storage বা Cloud Speech-to-Text হতে পারে। তবে রিসোর্সটি HTTP বা HTTPS-এর মাধ্যমে অ্যাক্সেসযোগ্য যেকোনো বাহ্যিক রিসোর্সও হতে পারে।
এক্সটেনশন সম্পর্কে একটি সার্বিক ধারণা পেতে, “এক্সটেনশন কী?” দেখুন। একটি প্রাথমিক টিউটোরিয়ালের জন্য, “টিউটোরিয়াল: একটি এক্সটেনশন যোগ করা এবং ব্যবহার করা” দেখুন।
ExtensionCallout পলিসি থেকে কোনো এক্সটেনশন অ্যাক্সেস করার আগে, আপনাকে অবশ্যই আপনার Apigee Edge অর্গানাইজেশনে আগে থেকে ইনস্টল করা একটি এক্সটেনশন প্যাকেজ থেকে এক্সটেনশনটি যোগ, কনফিগার এবং ডিপ্লয় করতে হবে।
নমুনা
ক্লাউড লগিং এক্সটেনশনের সাথে ব্যবহারের জন্য একটি উদাহরণ পলিসি নিচে দেখানো হলো:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="false" enabled="true" name="Logging-Extension">
<DisplayName>Logging Extension</DisplayName>
<Connector>cloud-extension-sample</Connector>
<Action>log</Action>
<Input>{
"logName" : "example-log",
"metadata" : "test-metadata",
"message" : "This is a test"
}</Input>
<Output>cloud-extension-example-log</Output>
</ConnectorCallout>
ক্লাউড লগিং এক্সটেনশন ব্যবহারের সম্পূর্ণ টিউটোরিয়ালের জন্য “টিউটোরিয়াল: এক্সটেনশন ব্যবহার” দেখুন।
উপলব্ধ সকল এক্সটেনশনের উদাহরণের জন্য, এক্সটেনশন রেফারেন্স ওভারভিউ দেখুন।
এক্সটেনশনকলআউট নীতি সম্পর্কে
যখন আপনি একটি এপিআই প্রক্সির ভেতর থেকে কোনো বাহ্যিক রিসোর্স অ্যাক্সেস করার জন্য একটি কনফিগার করা এক্সটেনশন ব্যবহার করতে চান, তখন ExtensionCallout পলিসিটি ব্যবহার করুন।
এই পলিসিটি ব্যবহার করার আগে আপনার প্রয়োজন হবে:
- এই পলিসি থেকে আপনি যে বাহ্যিক রিসোর্সটি অ্যাক্সেস করতে চান, সে সম্পর্কে কিছু বিবরণ। এই বিবরণগুলো রিসোর্সটির জন্য নির্দিষ্ট হবে। উদাহরণস্বরূপ, যদি পলিসিটি আপনার ক্লাউড ফায়ারস্টোর ডেটাবেস অ্যাক্সেস করে, তাহলে আপনাকে সেই কালেকশন এবং ডকুমেন্টের নাম জানতে হবে যা আপনি তৈরি বা অ্যাক্সেস করতে চান। এই পলিসির অনুরোধ এবং প্রতিক্রিয়া পরিচালনা কনফিগার করার ক্ষেত্রে আপনি সাধারণত রিসোর্স-নির্দিষ্ট তথ্য ব্যবহার করবেন।
- একটি এক্সটেনশন যা সেই পরিবেশে যোগ, কনফিগার এবং ডেপ্লয় করা হয় যেখানে আপনার এপিআই প্রক্সি ডেপ্লয় করা হবে। অন্য কথায়, আপনি যদি কোনো নির্দিষ্ট গুগল ক্লাউড পরিষেবা অ্যাক্সেস করার জন্য এই পলিসিটি ব্যবহার করতে চান, তাহলে আপনার পরিবেশে সেই পরিষেবার জন্য একটি ডেপ্লয় করা এক্সটেনশন অবশ্যই থাকতে হবে। কনফিগারেশনের বিবরণে সাধারণত রিসোর্সটিতে অ্যাক্সেস সীমিত করার জন্য প্রয়োজনীয় তথ্য অন্তর্ভুক্ত থাকে, যেমন প্রজেক্ট আইডি বা অ্যাকাউন্টের নাম।
PostClientFlow-তে ExtensionCallout পলিসি ব্যবহার করা
আপনি একটি এপিআই প্রক্সির PostClientFlow থেকে ExtensionCallout পলিসিটি কল করতে পারেন। অনুরোধকারী ক্লায়েন্টের কাছে প্রতিক্রিয়া পাঠানোর পরে PostClientFlow কার্যকর হয়, যা লগিংয়ের জন্য সমস্ত মেট্রিক উপলব্ধ থাকা নিশ্চিত করে। PostClientFlow ব্যবহারের বিস্তারিত জানতে, এপিআই প্রক্সি কনফিগারেশন রেফারেন্স দেখুন।
আপনি যদি PostClientFlow থেকে Google Cloud Logging এক্সটেনশন কল করার জন্য ExtensionCallout পলিসি ব্যবহার করতে চান, তাহলে নিশ্চিত করুন যে আপনার প্রতিষ্ঠানে features.allowExtensionsInPostClientFlow ফ্ল্যাগটি true তে সেট করা আছে।
আপনি যদি Apigee Edge for Public Cloud-এর গ্রাহক হন, তাহলে
features.allowExtensionsInPostClientFlowফ্ল্যাগটি ডিফল্টরূপেtrueসেট করা থাকে।আপনি যদি Apigee Edge for Private Cloud-এর গ্রাহক হন, তাহলে Update organization properties API ব্যবহার করে
features.allowExtensionsInPostClientFlowফ্ল্যাগটিকেtrueতে সেট করুন।
PostClientFlow থেকে MessageLogging পলিসি কল করার ক্ষেত্রে প্রযোজ্য সমস্ত বিধিনিষেধ ExtensionCallout পলিসির ক্ষেত্রেও প্রযোজ্য। আরও বিস্তারিত জানতে ব্যবহার নির্দেশিকা দেখুন।
উপাদান রেফারেন্স
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ConnectorCallout async="false" continueOnError="false" enabled="true" name="Extension-Callout-1">
<DisplayName/>
<Connector/>
<Action/>
<Input/>
<Output/>
</ConnectorCallout>
<ConnectorCallout> অ্যাট্রিবিউট
<ConnectorCallout name="Extension-Callout-1" continueOnError="false" enabled="true" async="false">
নিম্নলিখিত সারণী সমস্ত নীতির মূল উপাদানগুলির জন্য সাধারণ বৈশিষ্ট্যগুলি বর্ণনা করে:
| বৈশিষ্ট্য | বর্ণনা | ডিফল্ট | উপস্থিতি |
|---|---|---|---|
name | নীতির অভ্যন্তরীণ নাম। ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে | N/A | প্রয়োজন |
continueOnError | একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে | মিথ্যা | ঐচ্ছিক |
enabled | নীতি প্রয়োগ করতে নীতি বন্ধ করতে | সত্য | ঐচ্ছিক |
async | এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷ | মিথ্যা | অবচয় |
<DisplayName> উপাদান
ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।
<DisplayName>Policy Display Name</DisplayName>
| ডিফল্ট | N/A আপনি এই উপাদানটি বাদ দিলে, নীতির |
|---|---|
| উপস্থিতি | ঐচ্ছিক |
| টাইপ | স্ট্রিং |
<অ্যাকশন> উপাদান
এক্সটেনশন-এক্সপোজড অ্যাকশন যা পলিসিটি আহ্বান করবে।
<Action>action-exposed-by-extension</Action>
| ডিফল্ট | কোনোটিই না |
|---|---|
| উপস্থিতি | প্রয়োজনীয় |
| প্রকার | স্ট্রিং |
প্রতিটি এক্সটেনশন তার নিজস্ব কিছু অ্যাকশন প্রকাশ করে, যা এক্সটেনশনটির প্রতিনিধিত্বকারী রিসোর্সের কার্যকারিতায় অ্যাক্সেস প্রদান করে। আপনি একটি অ্যাকশনকে এমন একটি ফাংশন হিসেবে ভাবতে পারেন, যাকে এই পলিসির মাধ্যমে কল করা হয় এবং ফাংশনটির আর্গুমেন্ট নির্দিষ্ট করার জন্য <Input> এলিমেন্টের বিষয়বস্তু ব্যবহার করা হয়। অ্যাকশনটির প্রতিক্রিয়া <Output> এলিমেন্টের মাধ্যমে আপনার নির্দিষ্ট করা ভেরিয়েবলে সংরক্ষিত হয়।
এক্সটেনশনটির ফাংশনগুলোর তালিকার জন্য, এই পলিসি থেকে আপনি যে এক্সটেনশনটি কল করছেন তার রেফারেন্স দেখুন।
<সংযোগকারী> উপাদান
ব্যবহারের জন্য কনফিগার করা এক্সটেনশনের নাম। কোনো এনভায়রনমেন্টে ডেপ্লয়মেন্টের জন্য কনফিগার করার সময় এক্সটেনশনটিকে এই এনভায়রনমেন্ট-স্কোপড নামটি দেওয়া হয়।
<Connector>name-of-configured-extension</Connector>
| ডিফল্ট | কোনোটিই না |
|---|---|
| উপস্থিতি | প্রয়োজনীয় |
| প্রকার | স্ট্রিং |
একটি এক্সটেনশনের কনফিগারেশন ভ্যালু থাকে যা একই এক্সটেনশন প্যাকেজের উপর ভিত্তি করে ডেপ্লয় করা অন্য কোনো এক্সটেনশন থেকে ভিন্ন হতে পারে। এই কনফিগারেশন ভ্যালুগুলো একই প্যাকেজ থেকে কনফিগার করা এক্সটেনশনগুলোর মধ্যে রানটাইম কার্যকারিতার ক্ষেত্রে গুরুত্বপূর্ণ পার্থক্য তুলে ধরতে পারে, তাই কল করার জন্য সঠিক এক্সটেনশনটি নির্দিষ্ট করে দেওয়া নিশ্চিত করুন।
<ইনপুট> উপাদান
এক্সটেনশনে পাঠানোর জন্য অনুরোধের মূল অংশ সম্বলিত JSON ফাইল।
<Input><![CDATA[ JSON-containing-input-values ]]></Input>
| ডিফল্ট | কোনোটিই না |
|---|---|
| উপস্থিতি | এক্সটেনশনের উপর নির্ভর করে এটি ঐচ্ছিক বা আবশ্যক হতে পারে। |
| প্রকার | স্ট্রিং |
এটি মূলত <Action> এলিমেন্টের মাধ্যমে আপনার নির্দিষ্ট করা অ্যাকশনের একটি আর্গুমেন্ট। আপনি যে এক্সটেনশন এবং অ্যাকশনটি ব্যবহার করছেন, তার উপর নির্ভর করে <Input> এলিমেন্টের মান ভিন্ন হবে। প্রতিটি অ্যাকশনের প্রোপার্টি সম্পর্কে বিস্তারিত জানতে এক্সটেনশন প্যাকেজের ডকুমেন্টেশন দেখুন।
মনে রাখবেন যে, যদিও অনেক <Input> এলিমেন্টের ভ্যালু <![CDATA[]]> সেকশনের মধ্যে না রেখেই সঠিকভাবে কাজ করে, JSON-এর নিয়ম অনুযায়ী এমন কিছু ভ্যালুও থাকতে পারে যা XML হিসেবে পার্স করা যায় না। সর্বোত্তম অনুশীলন হিসেবে, রানটাইম পার্স ত্রুটি এড়াতে JSON-কে একটি CDATA সেকশনের মধ্যে রাখুন।
<Input> এলিমেন্টের ভ্যালুটি হলো একটি সুগঠিত JSON, যার প্রোপার্টিগুলো এক্সটেনশন অ্যাকশন চালু করার জন্য প্রয়োজনীয় ভ্যালু নির্দিষ্ট করে। উদাহরণস্বরূপ, Google Cloud Logging Extension- এর log অ্যাকশনটি লেখার জন্য লগ ( logName ), এন্ট্রির সাথে অন্তর্ভুক্ত করার মেটাডেটা ( metadata ), এবং লগ মেসেজ ( data ) নির্দিষ্ট করে এমন ভ্যালু গ্রহণ করে। এখানে একটি উদাহরণ দেওয়া হলো:
<Input><![CDATA[{
"logName" : "example-log",
"metadata" : {
"resource": {
"type": "global",
"labels": {
"project_id": "my-test"
}
}
},
"message" : "This is a test"
}]]></Input>
<Input> JSON-এ ফ্লো ভেরিয়েবল ব্যবহার করা
<Input> এর বিষয়বস্তুকে একটি মেসেজ টেমপ্লেট হিসেবে গণ্য করা হয়। এর মানে হলো, কার্লি ব্র্যাকেটের মধ্যে থাকা কোনো ভেরিয়েবলের নাম রানটাইমে রেফারেন্সকৃত ভেরিয়েবলের মান দ্বারা প্রতিস্থাপিত হবে।
উদাহরণস্বরূপ, এপিআই প্রক্সিকে কল করা ক্লায়েন্টের আইপি অ্যাড্রেস পেতে আপনি পূর্ববর্তী <Input> ব্লকটি client.ip ফ্লো ভেরিয়েবল ব্যবহার করার জন্য নতুন করে লিখতে পারেন:
<Input><![CDATA[{
"logName" : "example-log",
"metadata" : {
"resource": {
"type": "global",
"labels": {
"project_id": "my-test"
}
}
},
"message" : "{client.ip}"
}]]></Input>
যদি আপনি চান যে JSON-এর কোনো প্রপার্টি ভ্যালু রানটাইমে উদ্ধৃতি চিহ্নের মধ্যে থাকুক, তাহলে আপনার JSON কোডে অবশ্যই উদ্ধৃতি চিহ্ন ব্যবহার করুন। এমনকি যখন আপনি রানটাইমে সমাধান করার জন্য একটি ফ্লো ভেরিয়েবলকে JSON প্রপার্টি ভ্যালু হিসেবে নির্দিষ্ট করেন, তখনও এটি প্রযোজ্য।
নিম্নলিখিত <Input> উদাহরণটিতে দুটি ফ্লো ভেরিয়েবল রেফারেন্স অন্তর্ভুক্ত রয়েছে:
<Input><![CDATA[{
"logName" : "example-log",
"metadata" : {my.log.entry.metadata},
"message" : "{client.ip}"
}]]></Input>
রানটাইমে, JSON প্রপার্টির মানগুলো নিম্নরূপভাবে নির্ধারিত হবে:
-
logNameপ্রপার্টির মান --example-logস্ট্রিং লিটারেলটি। -
metadataপ্রপার্টি ভ্যালু — এটি হলোmy.log.entry.metadataফ্লো ভেরিয়েবলের মান, যা উদ্ধৃতি চিহ্নের মধ্যে থাকে না । এটি তখন কাজে আসতে পারে, যখন ভেরিয়েবলটির মান নিজেই কোনো অবজেক্টের প্রতিনিধিত্বকারী JSON ফাইল হয়। -
messageproperty value — উদ্ধৃতি চিহ্নের মধ্যেclient.ipফ্লো ভেরিয়েবলের মান।
<আউটপুট> উপাদান
একটি ভেরিয়েবলের নাম যা এক্সটেনশন অ্যাকশনের প্রতিক্রিয়া সংরক্ষণ করে।
<Output>variable-name</Output> <!-- The JSON object inside the variable is parsed -->
অথবা
<Output parsed="false">variable-name</Output> <!-- The JSON object inside the variable is raw, unparsed -->
| ডিফল্ট | কোনোটিই না |
|---|---|
| উপস্থিতি | এক্সটেনশনের উপর নির্ভর করে এটি ঐচ্ছিক বা আবশ্যক হতে পারে। |
| প্রকার | parsed অ্যাট্রিবিউট সেটিংয়ের ওপর নির্ভর করে পার্স করা অবজেক্ট অথবা স্ট্রিং। |
যখন প্রতিক্রিয়াটি পাওয়া যায়, তখন প্রতিক্রিয়ার মানটি আপনার এখানে নির্দিষ্ট করা ভেরিয়েবলে রাখা হয়, যেখান থেকে আপনি অন্যান্য এপিআই প্রক্সি কোড থেকে এটি অ্যাক্সেস করতে পারেন।
এক্সটেনশন রেসপন্স অবজেক্টগুলো JSON ফরম্যাটে থাকে। পলিসিটি JSON কীভাবে পরিচালনা করবে তার জন্য দুটি বিকল্প রয়েছে:
- পার্স করা (ডিফল্ট): পলিসিটি JSON অবজেক্টটি পার্স করে এবং JSON ডেটা দিয়ে স্বয়ংক্রিয়ভাবে ভ্যারিয়েবল তৈরি করে। উদাহরণস্বরূপ, যদি JSON-এ
"messageId" : 12345;থাকে এবং আপনি আপনার আউটপুট ভ্যারিয়েবলের নামextensionOutputরাখেন, তাহলে আপনি অন্যান্য পলিসিতে{extensionOutput.messageId}ভ্যারিয়েবলটি ব্যবহার করে সেই মেসেজ আইডিটি অ্যাক্সেস করতে পারবেন। - অপরিমার্জিত: আউটপুট ভেরিয়েবলটিতে এক্সটেনশন থেকে প্রাপ্ত সরাসরি, অপরিমার্জিত JSON প্রতিক্রিয়া থাকে। (আপনি চাইলে, জাভাস্ক্রিপ্ট পলিসি ব্যবহার করে একটি পৃথক ধাপে প্রতিক্রিয়া মানটি পার্স করতে পারেন।)
<আউটপুট> অ্যাট্রিবিউট
| বৈশিষ্ট্য | বর্ণনা | ডিফল্ট | উপস্থিতি |
|---|---|---|---|
| পার্স করা | এক্সটেনশন থেকে প্রাপ্ত JSON অবজেক্টটি পার্স করে, যার ফলে অন্যান্য পলিসিগুলো JSON অবজেক্টের ডেটা ভেরিয়েবল হিসেবে অ্যাক্সেস করতে পারে। | সত্য | ঐচ্ছিক |
প্রবাহ পরিবর্তনশীল
কিছুই না।
ত্রুটি কোড
Apigee Edge পলিসি থেকে প্রাপ্ত ত্রুটিগুলি পলিসি ত্রুটি রেফারেন্সে বর্ণিত একটি সামঞ্জস্যপূর্ণ বিন্যাস অনুসরণ করে।
এই বিভাগে ত্রুটির বার্তা এবং ফ্লো ভেরিয়েবলগুলি বর্ণনা করে যেগুলি সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ আপনি একটি প্রক্সির জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা তা জানার জন্য এই তথ্যটি গুরুত্বপূর্ণ৷ আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷
রানটাইম ত্রুটি
নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷
| ত্রুটির নাম | HTTP স্থিতি | কারণ |
|---|---|---|
| কার্যকর করা ব্যর্থ হয়েছে৷ | 500 | এক্সটেনশনটি একটি ত্রুটির সাথে প্রতিক্রিয়া জানায়৷ |
স্থাপনার ত্রুটি
আপনি যখন এই নীতি সম্বলিত একটি প্রক্সি স্থাপন করেন তখন এই ত্রুটিগুলি ঘটতে পারে৷
| ত্রুটির নাম | ঘটে যখন | ঠিক করুন |
|---|---|---|
InvalidConnectorInstance | <Connector> উপাদানটি খালি। | build |
ConnectorInstanceDoesNotExists | <Connector> উপাদানে নির্দিষ্ট করা এক্সটেনশন পরিবেশে বিদ্যমান নেই। | build |
InvalidAction | এক্সটেনশনকলআউট নীতিতে <Action> উপাদানটি অনুপস্থিত বা একটি খালি মান সেট করা আছে। | build |
AllowExtensionsInPostClientFlow | পোস্ট ক্লায়েন্ট ফ্লোতে এক্সটেনশন কলআউট নীতি থাকা নিষিদ্ধ৷ | build |