彈性的連接埠輸出
瞭解如何設定和使用彈性的連線埠輸出,以支援從AEM as a Cloud Service到外部服務的外部連線。
什麼是彈性連線埠輸出?
彈性的連線埠輸出可讓自訂、特定的連線埠轉送規則附加至AEM as a Cloud Service,以便建立從AEM到外部服務的連線。
Cloud Manager程式只能有 單一 網路基礎結構型別。 在執行下列命令之前,請確定彈性連線埠輸出是您AEM as a Cloud Service最適當的網路基礎建設型別。
先決條件
使用Cloud Manager API設定或設定彈性連線埠輸出時,需要下列專案:
-
已啟用Cloud Manager API且Cloud Manager企業所有者許可權的Adobe Developer Console專案
-
- 組織ID (亦稱為IMS組織ID)
- 使用者端ID (亦稱為API金鑰)
- 存取權杖(亦稱為持有人權杖)
-
Cloud Manager計畫ID
-
Cloud Manager環境ID
如需更多詳細資訊,請觀看以下逐步解說,瞭解如何設定、設定和取得Cloud Manger API認證,以及如何使用這些認證進行Cloud Manager API呼叫。
本教學課程使用curl
來進行Cloud Manager API設定。 提供的curl
命令採用Linux/macOS語法。 如果使用Windows命令提示字元,請將\
分行符號取代為^
。
為每個程式啟用彈性連線埠輸出
首先在AEM as a Cloud Service上啟用彈性的連線埠輸出。
彈性連線埠輸出可使用Cloud Manager啟用。 下列步驟概述如何使用Cloud Manager在AEM as a Cloud Service上啟用彈性連線埠輸出。
-
以Cloud Manager業務負責人身分登入Adobe Experience Manager Cloud Manager。
-
導覽至所需的計畫。
-
在左側功能表中,瀏覽至 服務>網路基礎結構。
-
選取 新增網路基礎結構 按鈕。
-
在 新增網路基礎結構 對話方塊中,選取 彈性連線埠輸出 選項,然後選取 區域 以建立專用輸出IP位址。
-
選取 儲存 以確認新增彈性連線埠輸出。
-
等候網路基礎結構建立並標示為 就緒。 此程式最多可能需要1小時。
建立彈性連線埠輸出後,您現在可以使用Cloud Manager API設定連線埠轉送規則,如下所述。
彈性連線埠輸出可使用Cloud Manager API來啟用。 下列步驟概述如何使用Cloud Manager API在AEM as a Cloud Service上啟用彈性連線埠輸出。
-
首先,使用Cloud Manager API listRegions作業,判斷在中設定進階網路的地區。 進行後續Cloud Manager API呼叫需要
region name
。 通常會使用生產環境所在的區域。在環境的詳細資料底下的Cloud Manager中尋找您的AEM as a Cloud Service環境地區。 Cloud Manager中顯示的地區名稱可以對應到Cloud Manager API中使用的地區代碼。
listRegions HTTP要求
code language-shell $ curl -X GET https://cloudmanager.adobe.io/api/program/{programId}/regions \ -H 'x-gw-ims-org-id: <ORGANIZATION_ID>' \ -H 'x-api-key: <CLIENT_ID>' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json'
-
使用Cloud Manager API createNetworkInfrastructure作業,為Cloud Manager程式啟用彈性的連線埠輸出。 使用從Cloud Manager API
listRegions
作業取得的適當region
程式碼。createNetworkInfrastructure HTTP要求
code language-shell $ curl -X POST https://cloudmanager.adobe.io/api/program/{programId}/networkInfrastructures \ -H 'x-gw-ims-org-id: <ORGANIZATION_ID>' \ -H 'x-api-key: <CLIENT_ID>' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json' \ -d '{ "kind": "flexiblePortEgress", "region": "va7" }'
等待15分鐘,讓Cloud Manager程式布建網路基礎結構。
-
檢查環境是否已使用先前步驟中從
createNetworkInfrastructure
HTTP要求傳回的id
,使用Cloud Manager API getNetworkInfrastructure作業,完成 彈性連線埠輸出 設定。getNetworkInfrastructure HTTP要求
code language-shell $ curl -X GET https://cloudmanager.adobe.io/api/program/{programId}/networkInfrastructure/{networkInfrastructureId} \ -H 'x-gw-ims-org-id: <ORGANIZATION_ID>' \ -H 'x-api-key: <CLIENT_ID>' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json'
確認HTTP回應包含 就緒 的 狀態。 如果尚未準備就緒,請每隔幾分鐘重新檢查一次狀態。
建立彈性連線埠輸出後,您現在可以使用Cloud Manager API設定連線埠轉送規則,如下所述。
為每個環境設定彈性的連線埠輸出代理
-
使用Cloud Manager API enableEnvironmentAdvancedNetworkingConfiguration作業,在每個AEM as a Cloud Service環境中啟用並設定 彈性連線埠輸出 設定。
enableEnvironmentAdvancedNetworkingConfiguration HTTP要求
code language-shell $ curl -X PUT https://cloudmanager.adobe.io/api/program/{programId}/environment/{environmentId}/advancedNetworking \ -H 'x-gw-ims-org-id: <ORGANIZATION_ID>' \ -H 'x-api-key: <CLIENT_ID>' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'Content-Type: application/json' \ -d @./flexible-port-egress.json
在
flexible-port-egress.json
中定義JSON引數,並透過... -d @./flexible-port-egress.json
提供給curl。下載範例flexible-port-egress.json。 這個檔案只是一個範例。 根據enableEnvironmentAdvancedNetworkingConfiguration中記錄的選用/必要欄位,視需要設定您的檔案。
code language-json { "portForwards": [ { "name": "mysql.example.com", "portDest": 3306, "portOrig": 30001 }, { "name": "smtp.sendgrid.com", "portDest": 465, "portOrig": 30002 } ] }
對於每個
portForwards
對應,進階網路會定義下列轉送規則:table 0-row-5 1-row-5 Proxy主機 Proxy連線埠 外部主機 外部連線埠 AEM_PROXY_HOST
portForwards.portOrig
→ portForwards.name
portForwards.portDest
如果您的AEM部署 僅 需要外部服務的HTTP/HTTPS連線(連線埠80/443),請將
portForwards
陣列保留空白,因為只有非HTTP/HTTPS要求才需要這些規則。 -
對於每個環境,請使用Cloud Manager API getEnvironmentAdvancedNetworkingConfiguration作業來驗證輸出規則是否有效。
getEnvironmentAdvancedNetworkingConfiguration HTTP要求
code language-shell $ curl -X GET https://cloudmanager.adobe.io/api/program/{programId}/environment/{environmentId}/advancedNetworking \ -H 'x-gw-ims-org-id: <ORGANIZATION_ID>' \ -H 'Authorization: Bearer <ACCESS_TOKEN>' \ -H 'x-api-key: <CLIENT_ID>' \ -H 'Content-Type: application/json'
-
可以使用Cloud Manager API enableEnvironmentAdvancedNetworkingConfiguration作業更新彈性的連線埠輸出設定。 請記住,
enableEnvironmentAdvancedNetworkingConfiguration
是PUT
作業,因此每次呼叫此作業時,都必須提供所有規則。 -
現在,您可以在自訂AEM程式碼和設定中使用彈性的連線埠輸出設定。
透過彈性連線埠輸出連線至外部服務
啟用彈性連線埠輸出Proxy後,AEM程式碼和設定便可使用它們來呼叫外部服務。 AEM處理外部呼叫的方式有兩種:
- 對非標準連線埠上的外部服務進行HTTP/HTTPS呼叫
- 包括對標準80或443連線埠以外的連線埠上執行的服務發出的HTTP/HTTPS呼叫。
- 對外部服務的非HTTP/HTTPS呼叫
- 包括任何非HTTP呼叫,例如與郵件伺服器、SQL資料庫或服務之間的連線,這些服務會在其他非HTTP/HTTPS通訊協定上執行。
預設允許來自標準連線埠(80/443)上AEM的HTTP/HTTPS請求,且不需要額外的設定或考量。
非標準連線埠上的HTTP/HTTPS
從AEM建立與非標準連線埠(非80/443)的HTTP/HTTPS連線時,必須透過特殊主機和連線埠(透過預留位置提供)進行連線。
AEM提供兩組特殊Java™系統變數,這些變數對應至AEM的HTTP/HTTPS代理程式。
AEM_PROXY_HOST
System.getenv().getOrDefault("AEM_PROXY_HOST", "proxy.tunnel")
$[env:AEM_PROXY_HOST;default=proxy.tunnel]
AEM_HTTP_PROXY_PORT
3128
)System.getenv().getOrDefault("AEM_HTTP_PROXY_PORT", 3128)
$[env:AEM_HTTP_PROXY_PORT;default=3128]
AEM_HTTPS_PROXY_PORT
3128
)System.getenv().getOrDefault("AEM_HTTPS_PROXY_PORT", 3128)
$[env:AEM_HTTPS_PROXY_PORT;default=3128]
對非標準連線埠上的外部服務進行HTTP/HTTPS呼叫時,必須使用Cloud Manager API enableEnvironmentAdvancedNetworkingConfiguration
作業定義沒有對應的portForwards
,因為連線埠轉送「規則」是在「程式碼」中定義。
程式碼範例
與外部服務的非HTTP/HTTPS連線
建立非HTTP/HTTPS連線時(例如 AEM SQL、SMTP等),必須透過AEM提供的特殊主機名稱進行連線。
AEM_PROXY_HOST
System.getenv().getOrDefault("AEM_PROXY_HOST", "proxy.tunnel")
$[env:AEM_PROXY_HOST;default=proxy.tunnel]
接著會透過AEM_PROXY_HOST
與對應的連線埠(portForwards.portOrig
)呼叫與外部服務的連線,AEM會路由傳送到對應的外部主機名稱(portForwards.name
)與連線埠(portForwards.portDest
)。
AEM_PROXY_HOST
portForwards.portOrig
portForwards.name
portForwards.portDest