將 Spring Boot 應用程式部署到 Elastic Beanstalk

目標:

  1. 使用 Spring CLI ,我們將建立一個新的 Spring Boot 應用程式,以部署到 Elastic Beanstalk。

    • 我們將編輯生成的 Spring Boot 應用程式,以便它將:
      • 建立一個名為 aws-eb-demo.jar 的 jar。
      • 聽 5000 埠。
      • 包含名為 index.html 的單個網頁。
  2. 使用 Elastic Beanstalk CLI ,我們將:

    • 初始化專案以部署到 Elastic Beanstalk。
    • 建立新的部署環境並一步部署 Spring Boot 應用程式。
    • 編輯應用程式並將其重新部署到同一環境中。
  3. 我們將編輯 Spring Boot 應用程式以新增監視,管理和日誌記錄功能。

  4. 我們將 Spring Boot 應用程式重新部署到其目標環境。

先決條件:

第 1 部分:建立 Java 應用程式

讓我們使用 Spring CLI 建立一個新的 Java 應用程式。Spring CLI 提供了一種方便的方法來快速入門使用 Spring Boot 和 Spring Framework 的雲就緒應用程式。

腳步

  1. 使用 Spring CLI 和 cd 建立一個 Spring Boot Web 應用程式到該資料夾​​中。

    $ spring init -d=web -name=aws-eb-demo aws-eb-demo
    $ cd aws-eb-demo
    
  2. 使用原始碼控制初始化專案,然後提交初始修訂。這將允許我們在進行更改時跟蹤更改,並在必要時恢復到先前工作狀態。在開始更改應用程式之前,這始終是一種很好的做法。

    對於這個例子,我們將使用 Git:

    $ git init
    $ git add .
    $ git commit -m "initial commit"
    
  3. 為方便部署,請編輯 pom.xml 並在 <project> / <build> 部分下新增 <finalName> 設定:

    <build>
        <finalName>${project.artifactId}</finalName>
        ...
    </build>
    

    <finalName> 設定將使構建的工件具有名稱 aws-eb-demo.jar 而不具有版本。這可確保每次應用程式迭代到新版本時都不必更改部署指令碼。

  4. 通過將以下屬性新增到 src/main/resources/application.properties,將應用程式配置為偵聽埠 5000

    server.port=5000
    

    預設情況下,Spring Boot Web 應用程式通過埠 8080 偵聽請求。但是,面向 Elastic Beanstalk 應用程式的 AWS 負載均衡器期望它們在埠 5000 上進行偵聽。如果沒有此設定,我們將在嘗試通過 Web 訪問我們的應用程式時收到錯誤 502 Bad Gateway

  5. 通過在 src/main/resources/static/index.html 建立一個檔案,為你的應用程式提供一個靜態主頁,其中包含以下示例內容:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>AWS EB Demo</title>
    </head>
    <body>
        <h1>Hello from Elastic Beanstock</h1>
    </body>
    </html>
    
  6. 在本地測試 Web 應用程式。

    $ mvn spring-boot:run
    

    開啟瀏覽器至 http://localhost:5000 並驗證主頁是否已提供。

    完成測試後,在執行終端中鍵入 Ctrl+C 以關閉應用程式。

  7. 打包 Web 應用程式。

    $ mvn package -DskipTests
    

    應用程式 jar 將在 target/aws-eb-demo.jar 建立。

  8. 將你的更改提交給原始碼管理。

    $ git add .
    $ git commit -m "prepared for initial deployment"
    

第 2 部分:將 Java 應用程式部署到 Elastic Beanstalk

通過我們的應用程式測試並準備首次部署,我們現在可以使用 Elastic Beanstalk CLI 初始化我們的部署配置,建立部署環境並將其推送到雲。

腳步

  1. 使用 Elastic Beanstock CLI 初始化你的應用程式以進行部署。

    $ eb init
    

    一個。當提示選擇預設區域時,接受預設值。

    灣當系統提示選擇要使用的應用程式時,接受預設值以建立新應用程式。

    C。當提示輸入應用程式名稱時,接受預設值或輸入 aws-eb-demo

    d。當系統提示選擇平臺時,請選擇 Java

    即當系統提示選擇平臺版本時,請選擇 Java 8

    F。當提示使用 AWS CodeCommit 進行部署時,請接受預設值(n)。

    I。當系統提示你為例項設定 SSH 時,請選擇 y。這將允許你使用 Elastic Beanstalk CLI 進入將部署應用程式例項的虛擬機器。

    學家當提示選擇金鑰對時,選擇預設值(Create new KeyPair)。或者,你可以選擇現有的金鑰對。

    K。當提示鍵入金鑰對名稱時,接受預設值或鍵入名稱。

    湖當提示輸入密碼短語時,請留空或輸入你將記住的密碼。再次鍵入相同的密碼並按 Enter 鍵。

  2. 通過開啟 .elasticbeanstock/config.yml 並將以下設定新增到檔案的底部來編輯新建立的 Elastic Beanstock 部署清單:

    deploy:
      artifact: 'target/aws-eb-demo.jar'
    
  3. 使用 Elastic Beanstock CLI 將你的應用程式部署到新環境。

    $ eb create
    

    一個。當提示輸入環境名稱時,接受預設值(aws-eb-demo-dev)。

    灣當提示“輸入 DNS CNAME 字首”時,接受預設值(aws-eb-demo-dev)。

    C。當提示選擇負載均衡器型別時,接受預設值(classic)。

    Elastic Beanstalk 最多可能需要 5 分鐘才能完成部署。同時,Elastic Beanstalk 正在為你做以下事情:

    • 建立部署環境
    • 建立負載均衡器
    • 準備一個安全組
    • 設定自動縮放
    • 啟動一個或多個 EC2 例項
    • 啟動應用程式

    在完成這項工作的同時,輸入 Ctrl+C 是安全的。

  4. 在等待時,你可以使用 Elastic Beanstalk CLI 檢查應用程式的部署狀態。

    $ eb status
    
  5. Health:欄位顯示 GreenStatus:欄位顯示 Ready 時,你可以使用 CNAME 欄位中顯示的地址瀏覽應用程式。

    例如,如果你選擇區域 us-west-2 : (US West (Oregon),那麼你的應用程式將部署在以下 URL:

    http://aws-eb-demo-dev.us-west-2.elasticbeanstalk.com

    如果應用程式的狀態為 Ready,但 Health:欄位不是 Green,請參閱應用程式日誌以診斷問題:

    $ eb logs
    

第 3 部分:修改 Spring Boot 應用程式以包含生產就緒功能

為了使我們的應用程式真正做好生產準備,我們需要管理,監控,日誌記錄和安全性。幸運的是,Spring Boot 具有開箱即用的這些功能。它們只需要作為依賴項新增到我們的專案中。

有關 Spring Boot 提供的生產就緒功能的詳細資訊,請參閱 Spring Boot Reference Guide,第 V 部分, Spring Boot Actuator:生產就緒功能

腳步

  1. 開啟檔案 pom.xml(在我們專案的根目錄中找到),並在 <project> / <dependencies> 部分下新增以下依賴項:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-hateoas</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    

    一個。spring-boot-starter-actuator 依賴包括生產就緒的管理和監控功能,稱為 actuators。這些功能包括現成的 REST 端點,允許管理員快速訪問有關應用程式的執行時資訊,例如執行狀況資訊,環境屬性,配置設定,日誌檔案等。

    spring-boot-starter-hateoas 依賴關係允許 Spring Boot 使用指向每個執行器端點的 HAL 樣式連結在單個方便端點下列出所有執行器。

    C。spring-boot-starter-security 依賴為我們的應用程式提供了保護執行器端點的功能,因此它們只能由具有 ACTUATOR 角色的經過身份驗證的使用者訪問。

  2. 在編輯 pom.xml 的同時,向 spring-boot-maven-plugin 新增自定義執行,以便它包含有關打包的應用程式工件的構建的資訊。

    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
        <executions>
            <execution>
                <goals>
                    <goal>build-info</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    
  3. 自定義 Spring Boot 配置,以便所有執行器都列在/management 的路徑下。此外,配置將能夠檢視執行器端點的管理員的使用者名稱和密碼。最後,配置應用程式日誌記錄,以便除了控制檯之外還將日誌記錄語句寫入檔案。

    開啟 src/main/resources/application.properties 並新增以下設定:

    management.context-path=/management
        
    security.user.name=admin
    security.user.password=password1
        
    logging.file=logs/application.log
    server.tomcat.accesslog.enabled=true
    
  4. 編輯 .gitignore 並在檔案頂部新增以下行,以便源控制元件忽略本地測試日誌。

    logs/
    
  5. 在本地測試 Web 應用程式。

    $ mvn spring-boot:run
    

    一個。在瀏覽器中,開啟 http://localhost:5000/management 並驗證是否提供了提供可用 Spring Boot 執行器連結的 JSON 物件。

    灣開啟 http://localhost:5000/management/info 並驗證是否顯示構建資訊。

    灣開啟 http://localhost:5000/management/health 並驗證應用程式狀態是 UP。如果未作為具有 ACTUATOR 角色的使用者進行身份驗證,則 status 欄位應該是顯示的唯一健康欄位。

    C。開啟 http://localhost:5000/management/logfile 並驗證它是否需要身份驗證。輸入管理員(admin:password1)的憑據並驗證它是否授予你訪問許可權。

    d。再次開啟 http://localhost:5000/management/health 並驗證是否顯示其他健康詳細資訊。當作為具有 ACTUATOR 角色的使用者進行身份驗證時,執行狀況端點將顯示有關應用程式正在使用的資源的其他執行狀況詳細資訊。

    即嘗試一些其他執行器端點。你可能對 envmetricsauditeventsmappings 感興趣。

    完成測試後,在執行終端中鍵入 Ctrl+C 以關閉應用程式。

  6. 執行乾淨重建並重新打包 Web 應用程式。

    $ mvn clean package -DskipTests
    

    和以前一樣,應用程式 jar 將在 target/aws-eb-demo.jar 建立。

  7. 將你的更改提交給原始碼管理。

    $ git add .
    $ git commit -m "added management and monitoring features"
    

第 4 部分:部署修改後的應用程式

重新部署通常比初始部署快得多,因為環境已經準備好了。CLI 只需要將新 jar 上傳到環境的 EC2 例項並重新啟動應用程式。

腳步

  1. 使用 Elastic Beanstalk CLI,重新部署新 jar。

    $ eb deploy
    

    上傳完成後,你可以安全地輸入 Ctrl+C

  2. 驗證應用程式是否已成功部署。

    $ eb status
    
  3. 在瀏覽器中,轉到 http://aws-eb-demo-dev.us-west-2.elasticbeanstalk.com/management 並驗證一切都是在本地測試時的效果。