練習 - 撰寫使用祕密的 Java 應用程式碼
您將使用 Spring Boot 來撰寫 Java Web 應用程式的程式碼,以連線至資料庫。
基於安全性考量,您將需要在未來保護該資料庫存取。 但請先建立應用程式基礎結構,再設定要使用的 Java 應用程式。
建立應用程式基礎結構
在此練習中,您將使用 Azure CLI 來建立下列資源:
- Azure 資源群組,其中包含您應用程式的所有資源。
- PostgreSQL 資料庫伺服器。
- Azure Spring 應用程式叢集,以及在此叢集內執行的 Spring Boot 應用程式。
您需要在指令碼開頭提供一些環境變數,這些環境變數在整個 Azure 中必須都是唯一的。
您也需要提供本機 IP 位址,才能從本機電腦存取資料庫。 此 IP 位址應該是 IPv4 位址。 如果您不知道本機 IP 位址,則可以移至下列網站:https://www.whatismyip.com/
設定下列環境變數:
AZ_RESOURCE_GROUP=<YOUR_UNIQUE_RESOURCE_GROUP_NAME>
AZ_DATABASE_USERNAME=<YOUR_POSTGRESQL_USERNAME>
AZ_DATABASE_PASSWORD=<YOUR_POSTGRESQL_PASSWORD>
AZ_LOCAL_IP_ADDRESS=<YOUR_LOCAL_IP_ADDRESS>
設定這些環境變數之後,您可以執行下列命令來建立資源:
AZ_LOCATION=eastus
# Must be all lowercase
AZ_SPRING_CLOUD=spring-${AZ_RESOURCE_GROUP,,}
AZ_DATABASE_NAME=pgsql-${AZ_RESOURCE_GROUP}
AZ_DATABASE_USERNAME=${AZ_DATABASE_USERNAME}
az group create \
--name $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION
此命令需要幾分鐘的時間才能完成。
az postgres server create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_NAME \
--location $AZ_LOCATION \
--sku-name B_Gen5_1 \
--storage-size 5120 \
--admin-user $AZ_DATABASE_USERNAME \
--admin-password $AZ_DATABASE_PASSWORD
az postgres server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_NAME-database-allow-local-ip \
--server $AZ_DATABASE_NAME \
--start-ip-address $AZ_LOCAL_IP_ADDRESS \
--end-ip-address $AZ_LOCAL_IP_ADDRESS
az postgres server firewall-rule create \
--resource-group $AZ_RESOURCE_GROUP \
--name $AZ_DATABASE_NAME-database-allow-azure-ip \
--server $AZ_DATABASE_NAME \
--start-ip-address 0.0.0.0 \
--end-ip-address 0.0.0.0
az postgres db create \
--resource-group $AZ_RESOURCE_GROUP \
--name demo \
--server-name $AZ_DATABASE_NAME
此命令需要幾分鐘的時間才能完成。
az extension add --name spring
az spring create \
--name $AZ_SPRING_CLOUD \
--resource-group $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION \
--sku Basic
此命令需要幾分鐘的時間才能完成。
az spring app create \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application \
--runtime-version Java_11 \
--assign-endpoint true
執行這些指令碼需要一些時間,因此您可以將其保留在背景,並同時開始撰寫應用程式的程式碼。
設定 Java 應用程式
使用 git clone
命令,從 https://github.com/Azure-Samples/manage-secrets-in-java-applicationsGitHub 存放庫取得應用程式基本架構:
git clone https://github.com/Azure-Samples/manage-secrets-in-java-applications.git
此應用程式會使用 Spring Data JPA 來存取資料庫。 您可以查看 CRUD 存放庫介面:
package com.example.demo;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ItemRepository extends CrudRepository<Item, Integer> {
}
接著,使用 Spring MVC REST 控制器向 Web 公開資料庫中所儲存的資料:
package com.example.demo;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ItemController {
private final ItemRepository itemRepository;
public ItemController(ItemRepository itemRepository) {
this.itemRepository = itemRepository;
}
@GetMapping("/")
String welcome() {
return "Here are all the database items: " + itemRepository.findAll();
}
}
使用 src/main/resources/data.sql
檔案,在啟動時將此資料插入至資料庫:
insert into item (details) values ('This is a item from the database');
如果您想要更多資料,或想要對其進行自訂,則可以將更多行新增至此檔案。
若要存取資料庫,您需要設定 src/main/resources/application.properties
檔案:
logging.level.org.springframework.jdbc.core=DEBUG
spring.datasource.url=jdbc:postgresql://${azureDatabaseName}.postgres.database.azure.com:5432/demo
spring.datasource.username=${azureDatabaseUsername}@${azureDatabaseName}
spring.datasource.password=${azureDatabasePassword}
spring.sql.init.mode=always
此設定檔有三個需要設定的變數:
${azureDatabaseName}
是稍早已在AZ_DATABASE_NAME
環境變數中設定的 PostgreSQL 資料庫名稱。 輸入echo $AZ_DATABASE_NAME
進行查看。${azureDatabaseUsername}
是稍早已在AZ_DATABASE_USERNAME
環境變數中設定的資料庫使用者名稱的名稱。 輸入echo $AZ_DATABASE_USERNAME
進行查看。${azureDatabasePassword}
是稍早已在AZ_DATABASE_PASSWORD
環境變數中設定的資料庫密碼的名稱。 輸入echo $AZ_DATABASE_PASSWORD
進行查看。
如我們在上一個單元中所見,在應用程式原始程式碼中硬式編碼那些值是錯誤的做法。 但若要測試應用程式,您可以暫時寫入應用程式,並執行應用程式:
./mvnw spring-boot:run
您可以使用下列命令或使用網頁瀏覽器來存取 Spring MVC 控制器,以讀取資料庫內容:
curl http://localhost:8080
將 JAVA 應用程式部署至 Azure
若要部署應用程式,您需要先將其封裝為 Jar 檔案:
./mvnw clean package
此命令會在 target
目錄中產生可執行的 Jar 檔案,而您將使用 Azure CLI 來部署此檔案:
az spring app deploy \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application \
--artifact-path target/*.jar
若遇到任何錯誤,請輸入下列命令來查看應用程式記錄:
az spring app logs \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application
應用程式接著將可在雲端中使用,而且您可以使用 cURL 命令來存取其資料:
curl https://$AZ_SPRING_CLOUD-application.azuremicroservices.io
# Expected output:
#
# Here are all the database items: [Secret{Id=1, details='This is a item from the database'}]
#
恭喜! 您已成功建立連線至資料庫的 Java 應用程式! 現在,您需要在下一個單元中保護資料庫認證。