在 AWS Elastic Beanstalk 上部署 Web 應用程式

入門指南

單元 3:部署 Web 應用程式

在本單元,我們要將應用程式部署到雲端。

簡介

在本單元,您將會學到如何封包 NodeJS 應用程式,以便於部署。您也會學到如何使用 AWS CDK 在單元 2 中佈建所有建立的 AWS Elastic Beanstalk 資源。

您將學到的內容

  • 封包您的 NodeJS 應用程式
  • 建置並部署您的 CDK 應用程式
  • 更新 NodeJS 應用程式部署

 完成時間

10 分鐘

 單元先決條件

  • 有管理員等級存取權限的 AWS 帳戶**
  • 建議的瀏覽器:最新版的 Chrome 或 Firefox

[**]過去 24 小時內建立的帳戶可能尚未有權存取本教學課程所需的服務。

實作

封包您的 NodeJS 應用程式

在單元 2 中,您學習到我們將會使用來自 AWS CDK 的 S3 資產模組,把壓縮檔中的應用程式上傳到 S3。

為了達到此目的,您需要建立 NodeJS 應用程式的壓縮檔,並將它放在 AWS CDK 應用程式的根目錄中。  為壓縮檔「app.zip」命名。為了達到此目的,請執行以下命令:

zip -r ../app.zip ./*

啟動程序帳戶中的 CDK

如果您是第一次在此帳戶及此區域中使用 AWS CDK,您需要啟動程序。將 AWS CDK 應用程式部署到 AWS 帳戶與區域時,CDK 需要佈建所需的資源才能執行部署。這些資源包含用來儲存部署檔案的 Amazon S3 儲存貯體,以及授與所需許可執行部署的 IAM 角色。部署這些初始資源稱為自舉。

若要自舉 AWS 帳戶與區域,請執行

cdk bootstrap aws://ACCOUNT-NUMBER-1/REGION-1

應如下所示:

cdk bootstrap aws://123456789012/us-east-1

您可以從 AWS 管理主控台取得帳戶號碼,並從此列表取得區域名稱。

建置並部署您的 CDK 應用程式

在封包 NodeJS 應用程式並將其放置在 CDK 應用程式根目錄,以及自舉您的 AWS 帳戶與區域後,您就可以建置並部署您的 CDK 應用程式了。

第一步就是建置 CDK 應用程式。

node run build

如果應用程式中沒有發生錯誤,這個步驟會順利進行,現在您可以部署雲端中的 CDK 應用程式了。

cdk deploy

首先會請您確認是否要變更一部份的帳戶安全層級,因為已建立新角色。

回覆「y」後,部署將會開始。需要幾分鐘完成。完成後,您將會收到此部署為您建立的 CloudFormation 堆疊的 ARN (Amazon 資源名稱) 訊息。

如果您開啟 CloudFormation 管理主控台,將會看到有 2 個新的堆疊。

該堆疊稱為 CdkEbInfraStack,包含在先前的單元中建立的所有 Elastic Beanstalk 資源:Elastic Beanstalk 應用程式、應用程式版本、執行個體描述檔及環境。

另一個堆疊 (具有隨機字串) 由 Elastic Beanstalk 建立,包含 Elastic Beanstalk 應用程式執行所需的所有資源:Auto Scaling 群組、執行個體、Amazon CloudWatch 警示與指標、負載平衡與安全群組。

檢視雲端中的應用程式

如果您想要檢視部署在雲端的應用程式,首先您需要找到 web 應用程式的 URL。若要尋找此 URL,請前往 AWS 主控台中的 Elastic Beanstalk 服務,並尋找名為 MyWebAppEnvironment 的環境。

接著,您會看到 URL。按一下之後,web 應用程式就會啟動。

更新 NodeJS 應用程式部署

如果您想要變更 web 應用程式,並重新部署到雲端,請依照下列步驟:

  • 在 web 應用程式中進行變更
  • 封包到 app.zip 檔案
  • 將 app.zip 檔案放到 CDK 應用程式中的根目錄
  • 建置 CDK 專案 - npm run build
  • 部署 CDK 專案 - cdk deploy

現在,您可以驗證已部署 Elastic Beanstalk 應用程式的新版本。造訪 web 應用程式 URL 時,將會部署新的版本,這需要花一些時間,請留意主控台的完成進度。

常見錯誤

壓縮應用程式

如果在將 NodeJS 應用程式上傳到 Elastic Beanstalk 時發現此錯誤。

Failed to find package.json. Node.js may have issues starting. Verify package.json is valid or place code in a file named server.js or app.js.

發生的原因可能是封包應用程式的方式有誤。請移除 package-lock.json 與 node_modules 目錄,並執行 web 應用程式目錄中的命令。

zip -r app.zip .

這會正確地壓縮 Elastic Beanstalk 檔案。

封包應用程式時的節點模組

您可以將 node_modules 目錄與所有已下載的相依性封包到 web 應用程式的壓縮檔中。

擁有此目錄時,Elastic Beanstalk 會假設不需要下載相依性。

請參閱詳細說明:處理 Elastic Beanstalk 封包中的 NodeJS 相依性

結論

在本指南中,您學習到如何封包 NodeJS web 應用程式並使用 Elastic Beanstalk 進行部署,以及如何將所有基礎設施部署為 CDK 應用程式。

下一步:清理資源

讓我們知道我們表現如何。