הסבר על התמיכה של Edge במודולים של Node.js

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

איזו גרסה של Node.js נתמכת ב-Apigee Edge?

Edge תומך כרגע ב-Node.js 0.10.32.

אילו מודולים סטנדרטיים של Node.js נתמכים ב-Edge?

ניתן להשתמש בטבלה הבאה כדי לקבוע אילו מודולים סטנדרטיים של Node.js נכללים ב-Edge. בחלק מהמקרים, יש תמיכה חלקית במודולים הכלולים. אלה המודולים שמובְנים ב-Node.js.

מודול סטטוס הערות
assert נתמך
buffer נתמך
child_process מוצר שהצפייה בו הוגבלה המערכת תציג חריגות אם יתבצע ניסיון ליצור תהליך משנה. עם זאת, יש תמיכה ב-"fork" ליצירה של כתבי משנה.
cluster מושבתת השיטה cluster.isMaster תמיד מחזירה TRUE, ושיטות אחרות לא מיושמות. עותק אחד של כל סקריפט של Node.js נפרס לכל מעבד הודעות של Edge.
crypto נתמך
dns נתמך
domain נתמך
dgram מוצר שהצפייה בו הוגבלה ליישומי Node.js בסביבת Apigee לא תהיה אפשרות לגשת לשירותים באינטרנט דרך UDP עקב ארכיטקטורת הרשת שלנו.
events נתמך
fs מוצר שהצפייה בו הוגבלה הגישה למערכת הקבצים מוגבלת לספרייה שבה הופעל הסקריפט: הספרייה /resources/node. הסקריפטים של Node.js יכולים לקרוא ולכתוב קבצים בספרייה הזו, למשל, בתור אזור גירוד זמני, אבל לא ניתן להבטיח כמה זמן הקבצים יישמרו.
http נתמך המארח הווירטואלי והנתיב לבקשות נכנסות מצוינים ב-API Proxy, לא על ידי מודול ה-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 Logs וממשק המשתמש לניהול Apigee Edge עבור שרת ה-API של ה-API.

לא קיים קלט סטנדרטי לסקריפטים שרצים ב-Apigee Edge. עם זאת, אפשר להעביר ארגומנטים באמצעות רכיב ScriptTarget של TargetEndpoint. למידע נוסף, אפשר לעיין בהגדרות מתקדמות של ScriptTarget.

stream נתמך
string_decoder נתמך
timers כלולה
tls נתמך פרמטרים של Transport Layer Security (TLS) פועלים פחות או יותר באותו אופן שבו הם פועלים ב-Node.js רגיל. לפרטים נוספים, אפשר לעיין במאמר בנושא שימוש במודול TLS (SSL) Node.js ב-Apigee Edge.
tty מושבתת לא קיים קלט סטנדרטי לסקריפטים שרצים ב-Apigee Edge.
url נתמך
util נתמך
vm נתמך
zlib נתמך

מודולים נתמכים נוספים

בקטע הזה מפורטים מודולים נוספים שאינם נתמכים ב-Node.js רגילים, אבל נתמכים על ידי Trireme ו-Trireme ב-Apigee Edge. Trireme הוא מאגר Node.js בקוד פתוח שפועל ב-Apigee Edge. הוא נועד להריץ סקריפטים של Node.js במכונה וירטואלית של Java (JVM). כל המודולים האלה זמינים ב-NPM.

מודול התיאור
גישה באמצעות API מתן אפשרות ליישומי Node.js שפועלים בפלטפורמת Apigee Edge לגשת לפונקציונליות ספציפית ל-Apigee. אפשר להשתמש במודול הזה כדי: לגשת למשתני זרימה ולשנות אותם, לאחזר נתונים מהחנות המאובטחת ולהשתמש במטמון, במכסה ובשירותי OAuth של Edge. למידע נוסף, ראו שימוש במודול הגישה לממשק ה-API.
תמיכה ב-trireme מאפשר ליישומי Node.js לנצל תכונות שהן ספציפיות ל-Trireme. כרגע יש תמיכה בתכונה אחת בלבד – טעינה של מודולים של Node.js מובנים ב-Java. הערה: loadJars לא נתמך ב-Edge Cloud.
trireme-Pixel הפשטה של עיבוד 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.
  • כדי ליצור פלט רגיל, אפשר להשתמש בלחצן Logs של Node.js בממשק המשתמש לניהול Edge עבור שרת ה-proxy. באפשרותך להשתמש גם בפקודה "apigeetool getlogs". מידע נוסף זמין במאמר פריסה של אפליקציית Node.js עצמאית.
  • אין תמיכה במודולים שתלויים בקוד ה-Native.
  • אין תמיכה במודולים שתלויים בתכונות של EcmaScript 6, כמו Promises ו-Generator.
  • אין תמיכה בסימונים של זמן הריצה של Node.js, כמו "harony-proxies".

הגדרת הגבלות על חיבור IP ב-Edge לענן פרטי

Edge לענן פרטי יכול להגביל את הגישה של קוד 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 הפעלה מחדש

הסבר על התמיכה במודולים 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 של שרת ה-API שבו הסקריפט של Node.js פועל מציין את 'המארח הווירטואלי' שהוא מאזין לו, ואפליקציית Node.js משתמשת באותם מארחים וירטואליים כמו כל שרת proxy אחר של Apigee Edge.

לכל סביבה ב-Apigee יש לפחות מארח וירטואלי אחד. המארח הווירטואלי קובע את הגדרות ה-HTTP לחיבור עם הארגון Apigee. כל שרתי ה-proxy של ה-API בסביבה חולקים את אותם מארחים וירטואליים. כברירת מחדל, שני מארחים וירטואליים זמינים לכל סביבה: default ו-secure. מידע נוסף זמין במאמר קבלת מארח וירטואלי ובמאמר מחזור החיים של פיתוח API.

הפקודה apigeetool deploynodeapp יוצרת wrapper של שרת proxy של Apigee Edge מסביב לאפליקציה Node.js. במהלך הפריסה, האפליקציה Node.js מאזינה למארח הווירטואלי שהוגדר כברירת מחדל לסביבה. כתובת ה-URL של אפליקציית Node.js תהיה תמיד http://{org_name}-{env_name}.apigee.net.

טיפול בבקשות נכנסות

בדומה לאפליקציות אחרות של Apigee Edge, אם אפליקציית ה-proxy מוגדרת להאזין במארח הווירטואלי של secure, היא תקבל בקשות נכנסות באמצעות HTTPS.

טיפול בבקשות יוצאות

בנוסף לקבלת תנועה נכנסת, אפליקציות Node.js בתוך Apigee Edge עשויות להשתמש במודולים http ו-https כדי לבצע בקשות יוצאות, כמו כל אפליקציית Node.js אחרת. המודולים האלה פועלים כמו תמיד ב-Node.js.

הסבר על התמיכה במודול tls

ב-Apigee Edge יש תמיכה במודול Node.js tls. המודול הזה משתמש ב-OpenSSL כדי לספק תקשורת שידור מוצפנת מסוג Transport Layer Security (TLS) ו/או Secure Socket Layer (SSL). אפשר להשתמש במודול tls כדי ליצור חיבורים מאובטחים לקצה העורפי של אפליקציות Node.js שפועלות ב-Edge.

כדי להבין איך פועל המודול tls ב-Apigee Edge, חשוב להבין איך משתמשים ב-virtual hosts ב-Apigee Edge. לכל סביבה ב-Apigee יש לפחות מארח וירטואלי אחד. המארח הווירטואלי קובע את הגדרות ה-HTTP לחיבור עם הארגון Apigee. כל שרתי ה-proxy של ה-API בסביבה חולקים אותם מארחים וירטואליים. כברירת מחדל, שני מארחים וירטואליים זמינים לכל סביבה: default ו-secure. מידע נוסף על מארחים וירטואליים זמין במאמר קבלת מארח וירטואלי ומחזור החיים של פיתוח API.

עכשיו נראה איך Apigee Edge מטפל בתקשורת TLS (SSL) עבור בקשות נכנסות ויוצאות ביישומי Node.js:

טיפול בבקשות נכנסות

בהתאם לאופן שבו מארחים וירטואליים מוגדרים בארגון שלכם, Edge מספק את האפשרויות הבאות:

  • אם שרת ה-API של ה-API מוגדר להאזנה במארח הווירטואלי של default, אז הוא מקבל בקשות ב-HTTP.
  • אם שרת ה-API של ה-API מוגדר להאזנה במארח הווירטואלי של secure, הוא מקבל בקשות ב-HTTPS. כתובת ה-URL תהיה תחת הדומיין apigee.net, וייעשה שימוש באישור SSL עם תו כללי לחיפוש עבור *.apigee.net. כל עוד אפליקציות שולחות בקשות לדומיין apigee.net, אישור ה-SSL יאומת כרגיל.

טיפול בבקשות יוצאות

אפשר לשלוח בקשות יוצאות עם המודול tls באותו אופן שבו עושים זאת בדרך כלל ב-Node.js. בעיקרון, צריך להוסיף לספרייה resources/node מפתחות ואישורים בצד הלקוח (קובצי .pem) ולטעון אותם בתוך הסקריפט. למידע על השימוש במודול tls ועל השיטות שלו, עיינו במסמכי התיעוד של Node.js tls מודול.

הגדרה מתקדמת של יעד Script

בהגדרה <TargetEndpoint>, הרכיב <ScriptTarget> משתמש בעוד פרמטרים אופציונליים מלבד <ResourceURL>. אפשר גם להעביר ארגומנטים של שורת הפקודה ומשתני סביבה לסקריפט של Node.js באמצעות הפרמטרים <EnvironmentVariables> ו-<Arguments>:
<TargetEndpoint name="default">
  <ScriptTarget>
     <ResourceURL>node://hello.js</ResourceURL>
     <EnvironmentVariables>
         <EnvironmentVariable name="NAME">VALUE</EnvironmentVariable> 
     </EnvironmentVariables>
     <Arguments>
         <Argument>ARG</Argument>
     </Arguments>
  </ScriptTarget>
</TargetEndpoint>