ทำความเข้าใจการรองรับ Edge สำหรับโมดูล Node.js

คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X
ข้อมูล

Apigee Edge รองรับ Node.js เวอร์ชันใด

ปัจจุบัน Edge รองรับ Node.js 0.10.32

Edge รองรับโมดูล Node.js มาตรฐานใดบ้าง

ใช้ตารางต่อไปนี้เพื่อระบุโมดูล Node.js มาตรฐานที่รวมอยู่ใน Edge ในบางกรณี โมดูลที่รวมอยู่จะได้รับการสนับสนุนเพียงบางส่วนเท่านั้น ซึ่งเป็นโมดูลที่มีในตัวของ Node.js

โมดูล สถานะ Notes
assert รองรับ
buffer รองรับ
child_process ถูกจำกัด จะมีการส่งข้อยกเว้นหากมีความพยายามที่จะสร้างกระบวนการย่อย อย่างไรก็ตาม ระบบรองรับ "fork" ในการวางสคริปต์ตัวห้อย
cluster ปิดใช้ Method cloud.isMaster จะแสดงผล true เสมอ ส่วนเมธอดอื่นๆ จะไม่มีการนำไปใช้ ระบบนำสคริปต์ Node.js แต่ละชุดไปใช้งานกับตัวประมวลผลข้อความ Edge แต่ละเครื่อง
crypto รองรับ
dns รองรับ
domain รองรับ
dgram ถูกจำกัด แอปพลิเคชัน Node.js ในสภาพแวดล้อม Apigee จะเข้าถึงบริการบนอินเทอร์เน็ตผ่าน UDP ไม่ได้เนื่องด้วยสถาปัตยกรรมเครือข่ายของเรา
events รองรับ
fs ถูกจำกัด สิทธิ์เข้าถึงระบบไฟล์จะจํากัดไว้เฉพาะไดเรกทอรีที่เรียกใช้สคริปต์เท่านั้น ได้แก่ ไดเรกทอรี /resources/node สคริปต์ Node.js อาจอ่านและเขียนไฟล์ภายในไดเรกทอรีนี้ เช่น เป็นพื้นที่สำหรับเขียนโค้ดชั่วคราว แต่ไม่มีการรับประกันว่าไฟล์จะยังคงอยู่ได้นานเท่าใด
http รองรับ โฮสต์เสมือนและเส้นทางสำหรับคำขอขาเข้าจะระบุในพร็อกซี API ไม่ใช่โดยโมดูล HTTP ดู "การทำความเข้าใจเกี่ยวกับการรองรับโมดูล http และ https" สำหรับข้อมูลเพิ่มเติม
https รองรับ การสร้างเซิร์ฟเวอร์ "https" จะเหมือนกับเซิร์ฟเวอร์ "http" ทุกประการ ดู "การทำความเข้าใจเกี่ยวกับการรองรับโมดูล http และ https" สำหรับข้อมูลเพิ่มเติม
module รองรับ
net ถูกจำกัด การพยายามฟังการเชื่อมต่อ TCP ขาเข้าจะสร้างข้อยกเว้น
path รองรับ
module รองรับ
process การสนับสนุนบางส่วน ไม่รองรับฟังก์ชันการทำงานในการจัดการรหัสผู้ใช้ การเป็นสมาชิกกลุ่ม และไดเรกทอรีการทำงาน
punycode รองรับ
querystring รองรับ
readline ปิดใช้ ไม่มีอินพุตมาตรฐานสำหรับสคริปต์ที่ทำงานบน Apigee Edge
repl ปิดใช้ ไม่มีอินพุตมาตรฐานสำหรับสคริปต์ที่ทำงานบน Apigee Edge
module รวม
STDIO รองรับ

ระบบจะส่งเอาต์พุตมาตรฐานและข้อผิดพลาดไปยังไฟล์บันทึกภายในโครงสร้างพื้นฐาน Apigee Edge คุณดูบันทึกเหล่านี้ได้โดยคลิกปุ่มบันทึก Node.js ใน UI การจัดการ Apigee Edge สำหรับพร็อกซี API

ไม่มีอินพุตมาตรฐานสำหรับสคริปต์ที่ทำงานบน Apigee Edge แต่คุณจะส่งอาร์กิวเมนต์โดยใช้องค์ประกอบ ScriptTarget ของ TargetEndpoint ได้ ดูข้อมูลเพิ่มเติมได้ที่การกำหนดค่า ScriptTarget ขั้นสูง

stream รองรับ
string_decoder รองรับ
timers รวม
tls รองรับ พารามิเตอร์ Transport Layer Security (TLS) จะทำงานเหมือนกับใน Node.js ทั่วไป โปรดดูรายละเอียดที่การใช้โมดูล Node.js ของ TLS (SSL) ใน Apigee Edge
tty ปิดใช้ ไม่มีอินพุตมาตรฐานสำหรับสคริปต์ที่ทำงานบน Apigee Edge
url รองรับ
util รองรับ
vm รองรับ
zlib รองรับ

โมดูลที่รองรับเพิ่มเติม

ส่วนนี้จะแสดงโมดูลเพิ่มเติมที่ไม่รองรับใน Node.js มาตรฐาน แต่รองรับโดย Trireme และ Trireme ที่ทำงานบน Apigee Edge Trireme เป็นคอนเทนเนอร์ Node.js แบบโอเพนซอร์สที่ทำงานบน Apigee Edge ออกแบบมาเพื่อเรียกใช้สคริปต์ Node.js ภายใน Java Virtual Machine (JVM) โมดูลเหล่านี้ทั้งหมดจะพร้อมใช้งานบน NPM

โมดูล คำอธิบาย
Apigee-access อนุญาตให้แอปพลิเคชัน Node.js ที่ทำงานบนแพลตฟอร์ม Apigee Edge เข้าถึงฟังก์ชันการทำงานเฉพาะของ Apigee ได้ คุณใช้โมดูลนี้เพื่อ: เข้าถึงและแก้ไขตัวแปรโฟลว์ ดึงข้อมูลจากที่เก็บที่ปลอดภัย และใช้แคช Edge, โควต้า และบริการ OAuth ได้ โปรดดูการใช้โมดูล Apigee-access
Trireme-support ช่วยให้แอปพลิเคชัน Node.js ใช้ประโยชน์จากคุณลักษณะเฉพาะสำหรับ Trireme ปัจจุบันรองรับเฉพาะฟีเจอร์เดียว นั่นคือการโหลดโมดูล Node.js ที่สร้างขึ้นใน Java หมายเหตุ: Edge Cloud ไม่รองรับloadJars
Trireme-XSlt แสดง Abstraction ของการประมวลผล XLST โดยออกแบบมาโดยเฉพาะสำหรับแพลตฟอร์ม Trireme เพื่อให้การประมวลผล XSLT มีประสิทธิภาพเมื่อแอปพลิเคชัน Node.js ทำงานบน Java
trireme-jdbc ให้สิทธิ์เข้าถึง JDBC จาก Node.js หมายเหตุ: ไม่รองรับใน Edge Cloud สำหรับ Edge Private Cloud คุณจะใส่ไฟล์ JDPC JAR ในเส้นทางชั้นเรียนและใช้โมดูลนี้ได้

การสนับสนุนสำหรับโมดูล Node.js ที่ใช้กันโดยทั่วไป

ข้อจำกัดเกี่ยวกับสคริปต์ Node.js

อย่างไรก็ตาม โปรดทราบว่า Edge กำหนดข้อจำกัดบางอย่างไว้ในสคริปต์ Node.js เช่น

  • แอปพลิเคชัน Node.js ในสภาพแวดล้อม Apigee Edge ไม่สามารถเข้าถึงบริการบนอินเทอร์เน็ตผ่าน UDP ได้เนื่องจากสถาปัตยกรรมเครือข่าย Edge
  • การเข้าถึงระบบไฟล์ถูกจำกัดไว้เฉพาะไดเรกทอรีที่เรียกใช้สคริปต์ Node.js: ไดเรกทอรี /resources/node สคริปต์ Node.js จะอ่านและเขียนไฟล์ภายในไดเรกทอรีนี้ได้ เช่น เป็นพื้นที่สำหรับเขียนโค้ดชั่วคราว แต่ไม่มีการรับประกันว่าไฟล์จะยังคงอยู่ได้นานเท่าใด
  • การพยายามฟังการเชื่อมต่อ TCP ขาเข้าจะสร้างข้อยกเว้น
  • ไม่รองรับฟังก์ชันการทำงานในการจัดการรหัสผู้ใช้ การเป็นสมาชิกกลุ่ม และไดเรกทอรีการทำงาน
  • สำหรับอินพุตมาตรฐาน ระบบจะจำกัดให้ส่งต่ออาร์กิวเมนต์โดยใช้องค์ประกอบ ScriptTarget ของ TargetEndpoint ดูข้อมูลเพิ่มเติมได้ที่การกำหนดค่า ScriptTarget ขั้นสูง
  • สำหรับเอาต์พุตมาตรฐาน คุณจะถูกจำกัดให้ใช้ปุ่มบันทึกของ Node.js ใน UI การจัดการ Edge สำหรับพร็อกซี คุณสามารถใช้คำสั่ง "apigeetool getlogs" ได้เช่นกัน ดูข้อมูลเพิ่มเติมได้ที่การทำให้แอป Node.js แบบสแตนด์อโลนใช้งานได้
  • ระบบไม่รองรับโมดูลที่ต้องใช้โค้ดแบบเนทีฟ
  • ไม่รองรับโมดูลที่ขึ้นอยู่กับฟีเจอร์ EcmaScript 6 เช่น Promises และ Generator
  • ระบบไม่รองรับการแฟล็กรันไทม์ของ Node.js เช่น "พร็อกซีระหว่าง Harony"

การตั้งค่าข้อจำกัดการเชื่อมต่อ IP ใน Edge สำหรับ Private Cloud

Edge สำหรับ Private Cloud อาจจำกัดโค้ด Node.js ไม่ให้เข้าถึงที่อยู่ IP ที่ขึ้นต้นด้วย "10.", "192.168" และ localhost หากพยายามเข้าถึงที่อยู่ IP เหล่านี้ คุณจะเห็นข้อผิดพลาดในแบบฟอร์ม

{ [Error: connect EINVAL] message: 'connect EINVAL', code: 'EINVAL', errno: 'EINVAL', syscall: 'connect' }

คุณแก้ไขข้อจำกัดเหล่านี้ได้โดยตั้งค่าพร็อพเพอร์ตี้ conf_nodejs_connect.ranges.denied ในไฟล์ message-processors.properties ในตัวประมวลผลข้อความแต่ละเครื่อง โดยค่าเริ่มต้น พร็อพเพอร์ตี้นี้จะมีค่าดังนี้

  • Edge 4.17.05 และรุ่นก่อนหน้า: conf_nodejs_connect.ranges.denied=10.0.0.0/8,192.168.0.0/16,127.0.0.1/32
  • Edge 4.17.09 ขึ้นไป: conf_nodejs_connect.ranges.denied= (หมายถึงไม่มีข้อจํากัด)

วิธีตั้งค่าพร็อพเพอร์ตี้นี้

  1. เปิดไฟล์ message-processor.properties ในตัวแก้ไข หากไม่มี ให้สร้างไฟล์โดยทำดังนี้
    > vi /<inst_root>/apigee/customer/application/message-processor.properties
  2. ตั้งค่าพร็อพเพอร์ตี้ตามต้องการ เช่น หากต้องการปฏิเสธสิทธิ์เข้าถึงเฉพาะ localhost
    conf_nodejs_connect.ranges.denied=127.0.0.1/32
  3. บันทึกการเปลี่ยนแปลง
  4. ตรวจสอบว่าผู้ใช้ "apigee" เป็นเจ้าของไฟล์พร็อพเพอร์ตี้ โดยทำดังนี้
    > chown apigee:apigee /<inst_root>/apigee/customer/application/message-processor.properties
  5. รีสตาร์ทตัวประมวลผลข้อความ
    > /<inst_root>/apigee/apigee-service/bin/apigee-service edge-message-processor begin

ทำความเข้าใจเกี่ยวกับการรองรับโมดูล HTTP และ HTTPS

แอปพลิเคชัน Node.js ทั้งหมดที่ทำงานใน Apigee Edge ต้องใช้โมดูล http หรือ https เพื่อฟังคำขอที่เข้ามาใหม่ หากคุณจะใช้งานสคริปต์ที่ไม่ได้คอยฟังคำขอที่เข้ามาใหม่ สคริปต์ก็จะทำงานและออก

เมธอด listen ของโมดูล http และ https ใน Node.js จะใช้หมายเลขพอร์ตเป็นพารามิเตอร์ เช่น

svr.listen(process.env.PORT || 9000, function() {
   console.log('The server is running.');
});

ต้องระบุอาร์กิวเมนต์ "port" นี้ใน Node.js แต่ Apigee Edge จะไม่สนใจพารามิเตอร์นี้ แต่พร็อกซี API ที่สคริปต์ Node.js ทำงานจะระบุ "โฮสต์เสมือน" ที่รอรับคำสั่ง และแอปพลิเคชัน Node.js จะใช้โฮสต์เสมือนเดียวกันเหล่านั้น เช่นเดียวกับพร็อกซี Apigee Edge อื่นๆ

สภาพแวดล้อมทั้งหมดใน Apigee มีโฮสต์เสมือนอย่างน้อย 1 รายการ โฮสต์เสมือนจะกำหนดการตั้งค่า HTTP สำหรับการเชื่อมต่อกับองค์กร Apigee พร็อกซี API ทั้งหมดในสภาพแวดล้อมจะใช้โฮสต์เสมือนเดียวกัน โดยค่าเริ่มต้น โฮสต์เสมือน 2 รายการจะพร้อมใช้งานสำหรับแต่ละสภาพแวดล้อม ได้แก่ default และ secure ดูข้อมูลเพิ่มเติมได้ที่ รับโฮสต์เสมือนและวงจรการพัฒนา API

คำสั่ง apigeetool deploynodeapp จะสร้าง Wrapper ของพร็อกซี Apigee Edge รอบๆ แอปพลิเคชัน Node.js เมื่อทำให้ใช้งานได้แล้ว แอปพลิเคชัน Node.js จะรับฟังในโฮสต์เสมือนเริ่มต้นที่กำหนดสำหรับสภาพแวดล้อม URL สำหรับแอปพลิเคชัน Node.js จะเป็น http://{org_name}-{env_name}.apigee.net เสมอ

การจัดการคำขอที่เข้ามาใหม่

เช่นเดียวกับแอปพลิเคชัน Apigee Edge อื่นๆ หากมีการตั้งค่าแอปพลิเคชันพร็อกซีให้รอฟังโฮสต์เสมือนของ secure แอปพลิเคชันจะยอมรับคำขอที่เข้ามาใหม่โดยใช้ HTTPS

การจัดการคำขอขาออก

นอกเหนือจากการรับการรับส่งข้อมูลขาเข้าแล้ว แอปพลิเคชัน Node.js ภายใน Apigee Edge อาจใช้โมดูล http และ https เพื่อส่งคำขอขาออกเหมือนกับแอปพลิเคชัน Node.js อื่นๆ โมดูลเหล่านี้จะทำงานเหมือนกับที่ทำงานใน Node.js ทุกครั้ง

การทำความเข้าใจการรองรับโมดูล tls

Apigee Edge รองรับโมดูล tls ของ Node.js โมดูลนี้ใช้ OpenSSL เพื่อให้บริการการสื่อสารเกี่ยวกับสตรีมที่เข้ารหัสแบบ Transport Layer Security (TLS) และ/หรือ Secure Socket Layer (SSL) คุณใช้โมดูล tls เพื่อสร้างการเชื่อมต่อที่ปลอดภัยไปยังบริการแบ็กเอนด์จากแอปพลิเคชัน Node.js ที่ทำงานบน Edge ได้

คุณต้องทำความเข้าใจวิธีใช้ virtual hosts ใน Apigee Edge เพื่อทำความเข้าใจวิธีการทำงานของโมดูล tls ใน Apigee Edge สภาพแวดล้อมทั้งหมดใน Apigee มีโฮสต์เสมือนอย่างน้อย 1 รายการ โฮสต์เสมือนจะกำหนดการตั้งค่า HTTP สำหรับการเชื่อมต่อกับองค์กร Apigee พร็อกซี API ทั้งหมดในสภาพแวดล้อมจะใช้โฮสต์เสมือนเดียวกัน โดยค่าเริ่มต้น โฮสต์เสมือน 2 รายการจะพร้อมใช้งานสำหรับแต่ละสภาพแวดล้อม: default และ secure ดูข้อมูลเพิ่มเติมเกี่ยวกับโฮสต์เสมือนได้ที่ รับโฮสต์เสมือนและวงจรการพัฒนา API

ต่อไปเรามาดูวิธีที่ Apigee Edge จัดการการสื่อสาร TLS (SSL) สำหรับคำขอขาเข้าและขาออกในแอปพลิเคชัน Node.js

การจัดการคำขอที่เข้ามาใหม่

Edge มีตัวเลือกดังต่อไปนี้ โดยขึ้นอยู่กับการกำหนดค่าโฮสต์เสมือนสำหรับองค์กร

  • หากมีการกำหนดค่าพร็อกซี API ให้รับฟังในโฮสต์เสมือน default พร็อกซีจะยอมรับคำขอผ่าน HTTP
  • หากมีการกำหนดค่าพร็อกซี API ให้รับฟังในโฮสต์เสมือน secure พร็อกซีจะยอมรับคำขอผ่าน HTTPS URL จะอยู่ในโดเมน apigee.net และจะใช้ใบรับรอง SSL ที่ใช้ไวลด์การ์ดสำหรับ *.apigee.net ตราบใดที่แอปส่งคำขอไปยังโดเมน apigee.net ใบรับรอง SSL ก็จะตรวจสอบตามปกติ

การจัดการคำขอขาออก

คุณส่งคำขอขาออกด้วยโมดูล tls ได้เหมือนกับที่ทำใน Node.js ตามปกติ โดยทั่วไปแล้ว คุณต้องเพิ่มคีย์และใบรับรองฝั่งไคลเอ็นต์ (ไฟล์ .pem) ลงในไดเรกทอรี resources/node และโหลดภายในสคริปต์ ดูข้อมูลเกี่ยวกับการใช้โมดูล tls และวิธีการได้ที่เอกสารโมดูล Node.js tls

การกำหนดค่า ScriptTarget ขั้นสูง

ในคำจำกัดความ <TargetEndpoint> องค์ประกอบ <ScriptTarget> จะใช้พารามิเตอร์ที่ไม่บังคับเพิ่มเติมนอกเหนือจาก <ResourceURL> นอกจากนี้คุณยังส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่งและตัวแปรสภาพแวดล้อมไปยังสคริปต์ Node.js โดยใช้พารามิเตอร์ <EnvironmentVariable> และ <Arguments> ได้ด้วย
<TargetEndpoint name="default">
  <ScriptTarget>
     <ResourceURL>node://hello.js</ResourceURL>
     <EnvironmentVariables>
         <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> 
     </EnvironmentVariables>
     <Arguments>
         <Argument>ARG</Argument>
     </Arguments>
  </ScriptTarget>
</TargetEndpoint>