$lang['tuto'] = "টিউটোরিয়াল"; ?>$lang['tuto'] = "টিউটোরিয়াল"; ?> AWS API গেটওয়ে: SAM লোকাল

AWS API গেটওয়ে: SAM লোকাল ইনভোকেশন চলাকালীন বিকল্প অনুরোধে 403টি ত্রুটির সমাধান করা

AWS API গেটওয়ে: SAM লোকাল ইনভোকেশন চলাকালীন বিকল্প অনুরোধে 403টি ত্রুটির সমাধান করা
AWS API গেটওয়ে: SAM লোকাল ইনভোকেশন চলাকালীন বিকল্প অনুরোধে 403টি ত্রুটির সমাধান করা

স্থানীয় AWS API গেটওয়েতে 403 ত্রুটি বোঝা

সাথে কাজ করার পর AWS API গেটওয়ে এবং স্থানীয়ভাবে AWS SAM (সার্ভারলেস অ্যাপ্লিকেশান মডেল) এর মাধ্যমে পরীক্ষা করার জন্য, API মোতায়েন করার পরে উদ্ভূত না হওয়া বাগগুলি আবিষ্কার করা সাধারণ। একটি সমস্যা একটি প্রাপ্ত করা হয় 403 নিষিদ্ধ ত্রুটি CORS-এর জন্য API-কে সঠিকভাবে কনফিগার করা এবং অনুমোদনের ধরন "NONE"-তে সেট করা সত্ত্বেও, OPTIONS পদ্ধতিটি কার্যকর করার সময়। এই সমস্যাটি বিশেষত বাড়তে পারে যখন সেটআপটি স্থাপন করা পরিবেশে মসৃণভাবে চলে।

স্থানীয়ভাবে OPTIONS অনুরোধ পরীক্ষা করার সময় কার্ল, API গেটওয়ে একটি "অনুপস্থিত প্রমাণীকরণ টোকেন" ত্রুটি ফিরিয়ে দিতে পারে৷ এটি বিভ্রান্তিকর কারণ OPTIONS পদ্ধতিতে প্রমাণীকরণের প্রয়োজন হবে না, বিশেষ করে যখন স্পষ্টভাবে 200 ফলাফল প্রদানের জন্য সেট করা হয়। সফল স্থানীয় উন্নয়নের জন্য এই বৈষম্যের উৎস চিহ্নিত করা গুরুত্বপূর্ণ।

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

এই নিবন্ধে, আমরা স্থানীয় উন্নয়নের সময় 403 ত্রুটির সম্ভাব্য কারণগুলি এবং কীভাবে এটিকে মোকাবেলা করব তা দেখব। আমরা সাধারণ ত্রুটিগুলি পর্যালোচনা করব SAM টেমপ্লেট, CORS হ্যান্ডলিং, এবং API গেটওয়ে সেটআপ, যাতে আপনি এই বাধাগুলি এড়াতে পারেন এবং কার্যকরভাবে নির্মাণ চালিয়ে যেতে পারেন।

আদেশ ব্যবহারের উদাহরণ
app.options() Express.js-এ OPTIONS অনুরোধগুলি পরিচালনা করার জন্য রুট সংজ্ঞায়িত করে, যা প্রিফ্লাইট CORS হ্যান্ডলিংয়ের জন্য প্রয়োজনীয়। এই ক্ষেত্রে, এটি সার্ভারকে POST অনুরোধের সাথে এগিয়ে যাওয়ার আগে CORS প্রিফ্লাইট প্রশ্নের প্রতিক্রিয়া জানাতে সক্ষম করে।
res.setHeader() এই ফাংশন প্রতিক্রিয়াতে নির্দিষ্ট HTTP শিরোনাম সেট করে, যেমন অ্যাক্সেস-নিয়ন্ত্রণ-অনুমতি-উৎপত্তি, যা CORS সক্ষম করার জন্য এবং বিভিন্ন উত্স থেকে API ব্যবহার করার সময় 403 ত্রুটি প্রতিরোধের জন্য গুরুত্বপূর্ণ।
PassthroughBehavior AWS API গেটওয়ে পদ্ধতির জন্য একটি কাস্টম কনফিগারেশন যা নির্দিষ্ট করে কিভাবে অনুরোধগুলি পরিচালনা করতে হয় যখন কোন মিল টেমপ্লেট উপলব্ধ না থাকে। এটি সেট করা হচ্ছে WHEN_NO_MATCH নিশ্চিত করে যে মক ইন্টিগ্রেশন সঠিকভাবে কাজ করে যখন কোনো নির্দিষ্ট অনুরোধ টেমপ্লেট প্রদান করা হয় না।
IntegrationHttpMethod ব্যাকএন্ড পরিষেবাকে কল করার জন্য API গেটওয়ে দ্বারা ব্যবহৃত HTTP পদ্ধতি সংজ্ঞায়িত করে (যেমন, Lambda ফাংশন)। উপযুক্ত HTTP পদ্ধতিতে API গেটওয়ে রুট লিঙ্ক করার জন্য এটি গুরুত্বপূর্ণ, যা ব্যাকএন্ড অ্যাকশন শুরু করবে।
AWS::ApiGateway::Method AWS SAM টেমপ্লেট একটি API গেটওয়ে পদ্ধতি সম্পদ নির্দিষ্ট করে। এটি HTTP পদ্ধতি (POST, OPTIONS) সংজ্ঞায়িত করার জন্য গুরুত্বপূর্ণ যা API গেটওয়ে সমর্থন করবে এবং ব্যাকএন্ড ইন্টিগ্রেশনে তাদের ম্যাপিং করবে।
ResponseParameters এই কমান্ডটি API গেটওয়ে ইন্টিগ্রেশন প্রতিক্রিয়াগুলিতে ব্যবহার করা হয় যেমন হেডার সেট করে CORS সমর্থন সক্ষম করতে অ্যাক্সেস-নিয়ন্ত্রণ-অনুমতি-পদ্ধতি. এই পরামিতিগুলি CORS নীতি অনুসারে ক্লায়েন্টকে ফেরত দেওয়া হয়।
app.route() এই ফ্লাস্ক কমান্ডটি নির্দিষ্ট ফাংশনের জন্য HTTP পদ্ধতিগুলি (যেমন POST এবং OPTIONS) ম্যাপ করে। এই ক্ষেত্রে, OPTIONS (প্রিফ্লাইট কোয়েরি) এবং POST (প্রধান API অনুরোধ) এর প্রতি ভিন্নভাবে প্রতিক্রিয়া জানানো গুরুত্বপূর্ণ।
!Ref AWS ক্লাউডফরমেশন/SAM টেমপ্লেটে ব্যবহৃত! রেফ টেমপ্লেটের অন্যান্য সম্পদের উল্লেখ। উদাহরণস্বরূপ, এটি উল্লেখ করতে ব্যবহৃত হয় স্ক্যান রেকর্ড রিসোর্স এবং সঠিক URL এ API কলগুলিকে সঠিকভাবে লিঙ্ক করুন।
app.response_class() এই কমান্ডটি ফ্লাস্কে একটি কাস্টম প্রতিক্রিয়া বস্তু তৈরি করে, যা আপনাকে HTTP স্থিতি কোড এবং শিরোনামগুলির উপর নিয়ন্ত্রণ দেয়। এটি নির্দিষ্ট CORS শিরোনাম সেট করার জন্য বিশেষভাবে সুবিধাজনক, যেমন অ্যাক্সেস-নিয়ন্ত্রণ-অনুমতি-উৎপত্তি.

AWS API গেটওয়ে স্থানীয় আহ্বান বোঝা এবং অপ্টিমাইজ করা

এই নিবন্ধে, আমরা স্থানীয় উন্নয়নের সময় 403 ত্রুটির সম্ভাব্য কারণগুলি এবং কীভাবে এটিকে মোকাবেলা করব তা দেখব। আমরা সাধারণ ত্রুটিগুলি পর্যালোচনা করব SAM টেমপ্লেট, CORS হ্যান্ডলিং, এবং API গেটওয়ে সেটআপ, যাতে আপনি এই বাধাগুলি এড়াতে পারেন এবং কার্যকরভাবে নির্মাণ চালিয়ে যেতে পারেন।

এক্সপ্রেস সার্ভারে, আমরা ব্যবহার করি res.setHeader() "অ্যাক্সেস-কন্ট্রোল-অ্যালো-অরিজিন" এবং "অ্যাক্সেস-কন্ট্রোল-অ্যালো-মেথডস" এর মতো CORS হেডার সেট করতে। এটি নিশ্চিত করে যে উপযুক্ত শিরোনামগুলি ক্লায়েন্টের কাছে ফেরত দেওয়া হয়েছে, ক্রস-অরিজিন অনুরোধের অনুমতি দেয়। উপরন্তু, স্ক্রিপ্টের POST পদ্ধতি AWS SDK এর মাধ্যমে একটি AWS DynamoDB টেবিলের সাথে সংযোগ করে। স্ক্যান অপারেশন হল একটি পঠনযোগ্য ক্রিয়া যা নির্বাচিত টেবিল থেকে সমস্ত রেকর্ড ফেরত দেয়, যা আমাদের স্থানীয়ভাবে ডাটাবেস ইন্টারঅ্যাকশন পরীক্ষা করার অনুমতি দেয়। সঠিক ত্রুটি হ্যান্ডলিং ডাটাবেস সংযোগ সমস্যাগুলি পরিচালনা করতে ব্যবহার করা হয়, নিশ্চিত করে যে সার্ভার ব্যর্থতার জন্য যথাযথভাবে প্রতিক্রিয়া জানায়।

দ্বিতীয় উদাহরণ, ফ্লাস্কের সাথে পাইথনে নির্মিত, Node.js স্ক্রিপ্টের মতো একই কার্যকারিতা প্রদান করে তবে এটি ডেভেলপারদের জন্য যারা পাইথনের সাথে বেশি অভিজ্ঞ। ফ্লাস্কের app.route() পদ্ধতিটি OPTIONS এবং POST উভয় পদ্ধতিকে নির্দিষ্ট রুটিনে নিয়ে যায়, নিশ্চিত করে যে CORS প্রিফ্লাইট অনুরোধগুলি সহজে পরিচালনা করা হয়। কাস্টম প্রতিক্রিয়া ব্যবহার করে সংজ্ঞায়িত করা হয় app.response_class() পদ্ধতি, যা প্রাসঙ্গিক CORS শিরোনাম অন্তর্ভুক্ত করে। POST পদ্ধতি, Node.js উদাহরণের মতো, একটি DynamoDB টেবিল স্ক্যান করতে Python (boto3) এর জন্য AWS SDK ব্যবহার করে। এই মডুলারিটি ডেভেলপারদের জাভাস্ক্রিপ্ট বা পাইথন পছন্দ করে কিনা তার উপর ভিত্তি করে ব্যাকএন্ড পরিবর্তন করতে দেয়।

অবশেষে, SAM টেমপ্লেট সেটআপ নিশ্চিত করে যে AWS API গেটওয়ে যথাযথভাবে POST এবং OPTIONS ক্যোয়ারী পেতে সেট আপ করা হয়েছে। দ পাসথ্রু আচরণ অ্যাট্রিবিউট "WHEN_NO_MATCH" তে সেট করা হয়েছে, যা API গেটওয়েকে পূর্বনির্ধারিত টেমপ্লেটের সাথে মেলে না এমন অনুরোধগুলি পরিচালনা করতে দেয়। মক ইন্টিগ্রেশনের সাথে কাজ করার সময় এটি কার্যকর কারণ এটি সিস্টেমটিকে একটি 200 স্ট্যাটাস কোড প্রদান করতে দেয় প্রকৃতপক্ষে ব্যাকএন্ড ল্যাম্বডা না চালিয়ে। দ ইন্টিগ্রেশন প্রতিক্রিয়া এবং পদ্ধতির প্রতিক্রিয়া বিভাগগুলি শিরোনাম এবং প্রতিক্রিয়া পরামিতিগুলি নির্দিষ্ট করে যা নিশ্চিত করে যে বিকল্প পদ্ধতিটি ক্লায়েন্টকে একটি সঠিক CORS কনফিগারেশন পাঠায়। স্থানীয় SAM পরীক্ষার সময় "403 নিষিদ্ধ" সমস্যা এড়ানোর জন্য এই পদ্ধতিটি অত্যন্ত গুরুত্বপূর্ণ।

স্থানীয় SAM আহ্বানের জন্য AWS API গেটওয়েতে 403 ত্রুটি সংশোধন করা হচ্ছে।

সমাধান 1: এক্সপ্রেস.js এবং AWS SDK ব্যবহার করে একটি Node.js ব্যাকএন্ড, দক্ষ CORS এবং OPTIONS হ্যান্ডলিং সহ।

// Import required modules
const express = require('express');
const AWS = require('aws-sdk');
const cors = require('cors');
const app = express();
app.use(cors());
// Middleware for JSON request parsing
app.use(express.json());
// CORS preflight response handling
app.options('/scanRecords', (req, res) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Methods', 'POST, OPTIONS');
  res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
  res.status(200).send();
});
// Main POST method for scanRecords
app.post('/scanRecords', async (req, res) => {
  const dynamoDB = new AWS.DynamoDB.DocumentClient();
  try {
    const params = { TableName: 'RecordsTable' };
    const data = await dynamoDB.scan(params).promise();
    res.status(200).json(data);
  } catch (err) {
    res.status(500).send('Error fetching records');
  }
});
// Start the Express server on PORT 3000
app.listen(3000, () => {
  console.log('Server running on http://localhost:3000');
});

AWS SAM লোকালে "মিসিং প্রমাণীকরণ টোকেন" সমাধান করা হচ্ছে

সমাধান 2: ফ্লাস্ক সহ একটি পাইথন ব্যাকএন্ড, স্থানীয় SAM এবং API গেটওয়ের সাথে কনফিগার করা

from flask import Flask, jsonify, request
import boto3
app = Flask(__name__)
# CORS headers for OPTIONS requests
@app.route('/scanRecords', methods=['OPTIONS'])
def options_method():
    response = app.response_class(status=200)
    response.headers['Access-Control-Allow-Origin'] = '*'
    response.headers['Access-Control-Allow-Methods'] = 'POST, OPTIONS'
    response.headers['Access-Control-Allow-Headers'] = 'Content-Type, Authorization'
    return response
# POST method to scan records from DynamoDB
@app.route('/scanRecords', methods=['POST'])
def scan_records():
    dynamodb = boto3.resource('dynamodb')
    table = dynamodb.Table('RecordsTable')
    try:
        response = table.scan()
        return jsonify(response['Items']), 200
    except Exception as e:
        return str(e), 500
# Run the Flask app on port 3000
if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=3000)

SAM এর সাথে AWS API গেটওয়ে লোকাল ইনভোকেশন পরীক্ষা করা হচ্ছে

সমাধান 3: বিকল্প অনুরোধগুলি পরিচালনা করতে এবং 403 ত্রুটি এড়াতে একটি SAM টেমপ্লেট কনফিগার করুন।

Resources:
  scanRecords:
    Type: AWS::Serverless::Function
    Properties:
      Handler: dist/dynamo/CRUD.scanRecords
      CodeUri: ./backend
      Policies:
        - AmazonDynamoDBFullAccess
        - CloudWatchLogsFullAccess
      Events:
        ApiEvent:
          Type: Api
          Properties:
            Path: /scanRecords
            Method: post
  scanRecordsOptionsMethod:
    Type: AWS::ApiGateway::Method
    Properties:
      AuthorizationType: NONE
      HttpMethod: OPTIONS
      ResourceId: !Ref scanRecordsResource
      RestApiId: !Ref apiGatewayRestApi
      Integration:
        Type: MOCK
        IntegrationResponses:
          - StatusCode: 200
            ResponseParameters:
              method.response.header.Access-Control-Allow-Headers: "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'"
              method.response.header.Access-Control-Allow-Methods: "'POST,OPTIONS'"
              method.response.header.Access-Control-Allow-Origin: "'*'"

AWS API গেটওয়ে স্থানীয় 403 ত্রুটির সমস্যা সমাধান করা

এপিআই গেটওয়েতে CORS (ক্রস-অরিজিন রিসোর্স শেয়ারিং) নীতিগুলি কীভাবে প্রয়োগ করা হয় তা বোঝা গুরুত্বপূর্ণ যখন একটি SAM স্থানীয় আহ্বানের সময় একটি 403 ত্রুটি দেখা যায়। যদিও আপনার স্থাপনা ক্লাউডে যথাযথভাবে CORS পরিচালনা করতে পারে, স্থানীয় আমন্ত্রণ ব্যবহার করে AWS SAM কখনও কখনও OPTIONS পদ্ধতি কীভাবে পরিচালনা করা হয় তার মধ্যে অসঙ্গতি দেখা দিতে পারে। এর কারণ হল স্থানীয় পরিবেশ সবসময় সঠিকভাবে সমস্ত সেটআপের নকল নাও করতে পারে, এবং প্রমাণীকরণের অসুবিধা এড়াতে OPTIONS মেকানিজম সঠিকভাবে সংহত করা আবশ্যক।

আরেকটি মূল বৈশিষ্ট্য হল যে 403 ত্রুটিটি প্রায়শই অনুপস্থিত বা ভুলভাবে কনফিগার করা API গেটওয়ে অনুমতিগুলির সাথে সম্পর্কিত। স্থানীয় উন্নয়নের সময়, আপনার SAM টেমপ্লেট যথাযথভাবে সংজ্ঞায়িত করে তা নিশ্চিত করা গুরুত্বপূর্ণ অনুমোদনের ধরন OPTIONS অনুরোধের জন্য "NONE" হিসাবে, এবং এটিতে সংশ্লিষ্ট অনুমতিগুলি৷ ল্যাম্বদা ফাংশন সঠিকভাবে সেট আপ করা হয়। অন্যথায়, অনুরোধটি একটি "অনুপস্থিত প্রমাণীকরণ টোকেন" বার্তা ফিরিয়ে দেবে, যা নির্দেশ করে যে সিস্টেমটি একটি প্রমাণীকরণ প্রক্রিয়া আশা করে যা নির্দিষ্ট করা হয়নি।

অবশেষে, OPTIONS পদ্ধতির জন্য Lambda ফাংশন কল করার প্রয়োজনীয়তা এড়াতে মক ইন্টিগ্রেশনগুলি পরিচালনা করা একটি দক্ষ কৌশল। সৃষ্টি a MOCK ইন্টিগ্রেশন আপনার API গেটওয়েতে রেসপন্স প্যারামিটার সহ OPTIONS পদ্ধতি প্রয়োজনীয় CORS হেডার সহ একটি ডিফল্ট 200 প্রতিক্রিয়া প্রদান করে। এটি উন্নয়ন প্রক্রিয়াকে সহজ করে এবং 403টি ত্রুটি এড়াতে সাহায্য করে, যা প্রায়শই স্থানীয় এবং স্থাপন করা উভয় সেটিংসে অব্যবস্থাপিত প্রিফ্লাইট প্রশ্নের কারণে ঘটে।

AWS API গেটওয়ে 403 ত্রুটি সম্পর্কে সাধারণ প্রশ্ন

  1. কেন আমি শুধু SAM লোকালেই 403 সমস্যা পাচ্ছি কিন্তু মোতায়েন করার সময় নয়?
  2. স্থানীয় SAM পরিবেশ সম্পূর্ণ API গেটওয়ে কনফিগারেশনের অনুকরণ করতে পারে না, বিশেষ করে এর জন্য AuthorizationType এবং CORS সেটিংস। নিশ্চিত করুন যে আপনার স্থানীয় সেটআপটি OPTIONS অনুরোধের জন্য জাল ইন্টিগ্রেশন সহ নিয়োজিত সেটিংসের সাথে মেলে৷
  3. একটি "অনুপস্থিত প্রমাণীকরণ টোকেন" ত্রুটি কি?
  4. এই ত্রুটিটি নির্দেশ করে যে API গেটওয়ে একটি প্রমাণীকরণ টোকেন চায়, যা দেওয়া হয়নি। OPTIONS অনুরোধের জন্য, তা নিশ্চিত করুন AuthorizationType: NONE আপনার SAM টেমপ্লেটে সঠিকভাবে কনফিগার করা হয়েছে।
  5. আমি কীভাবে AWS API গেটওয়েতে CORS প্রিফ্লাইট অনুরোধগুলি পরিচালনা করব?
  6. CORS পরিচালনা করতে, আপনার নিশ্চিত করুন OPTIONS পদ্ধতিটি যথাযথভাবে প্রাসঙ্গিক প্রতিক্রিয়া শিরোনামগুলির সাথে সেট করা হয়েছে, যেমন Access-Control-Allow-Origin এবং Access-Control-Allow-Methods.
  7. আমি কি AWS SAM দিয়ে স্থানীয়ভাবে CORS পরীক্ষা করতে পারি?
  8. হ্যাঁ, আপনি স্থানীয়ভাবে CORS পরীক্ষা করতে পারেন, তবে নিশ্চিত করুন যে আপনার app.options() পদ্ধতি বা সমতুল্য API গেটওয়ে কনফিগারেশন preflight OPTIONS অনুরোধের জন্য সঠিক শিরোনাম প্রদান করে।
  9. AWS API গেটওয়েতে একটি মক ইন্টিগ্রেশন কি?
  10. MOCK integration OPTIONS অনুরোধের জন্য CORS হ্যান্ডলিংকে সহজ করে, ব্যাকএন্ড Lambda ফাংশন ব্যবহার না করেই API গেটওয়ে থেকে স্ট্যাটিক প্রতিক্রিয়া ফেরাতে সক্ষম করে।

AWS API গেটওয়ে 403 ত্রুটিগুলি ঠিক করার বিষয়ে চূড়ান্ত চিন্তাভাবনা৷

স্থানীয় SAM পরিবেশে OPTIONS অনুরোধের জন্য 403 ত্রুটি ঠিক করতে, নিশ্চিত করুন যে আপনার SAM টেমপ্লেট এবং অনুমতি সঠিকভাবে কনফিগার করা হয়. আপনার মোতায়েন করা AWS কনফিগারেশনের সাথে আপনার স্থানীয় পরিবেশের সাথে যতটা সম্ভব মেলানো গুরুত্বপূর্ণ।

অনুপস্থিত টোকেন সমস্যা রোধ করতে, অনুমোদনের প্রকারকে "কোনও নয়" এ পরিবর্তন করুন এবং প্রিফ্লাইট CORS প্রশ্নের জন্য জাল ইন্টিগ্রেশন ব্যবহার করুন। এই সেটিংস উদ্বেগগুলিকে মোকাবেলা করা মসৃণ স্থানীয় উন্নয়ন এবং সঠিক API গেটওয়ে আচরণের জন্য অনুমতি দেয়।

AWS API গেটওয়ে 403 ত্রুটির জন্য দরকারী উত্স এবং রেফারেন্স
  1. AWS SAM CLI এবং API গেটওয়ে স্থানীয় উন্নয়নে বিস্তৃত হয়, CORS প্রশ্নগুলি পরিচালনার উপর ফোকাস করে। অফিসিয়াল AWS ডকুমেন্টেশন বিস্তারিত অন্তর্দৃষ্টি এবং উদাহরণ প্রদান করে। ভিজিট করুন: AWS SAM CLI ডকুমেন্টেশন।
  2. API গেটওয়ে সমস্যা যেমন 403 নিষিদ্ধ ত্রুটি এবং অনুপস্থিত প্রমাণীকরণ টোকেনগুলির জন্য বিশদ সমস্যা সমাধানের তথ্য প্রদান করে। দেখুন: .AWS API গেটওয়ে ত্রুটি হ্যান্ডলিং।
  3. API গেটওয়ে এবং ল্যাম্বডা ফাংশনে CORS কনফিগার করার জন্য একটি সম্পূর্ণ গাইড। স্থানীয় পরীক্ষার সময় CORS সমস্যাগুলি 403 ত্রুটির একটি সাধারণ উত্স। এখানে আরও তথ্য: AWS নলেজ সেন্টার।