Latihan - Membuat kode aplikasi Java yang menggunakan rahasia
Anda akan membuat kode aplikasi Web Java, menggunakan Spring Boot, yang tersambung ke database.
Untuk alasan keamanan, Anda harus mengamankan akses database itu di masa mendatang. Tetapi pertama-tama mari kita buat infrastruktur aplikasi, lalu konfigurasikan aplikasi Java yang akan digunakan.
Membuat infrastruktur aplikasi
Dalam latihan ini, Anda menggunakan Azure CLI untuk membuat sumber daya berikut:
- Grup sumber daya Azure yang berisi semua sumber daya untuk aplikasi Anda.
- Server PostgreSQL untuk basis data.
- Kluster Azure Spring Apps dan aplikasi Spring Boot yang berjalan di dalam kluster ini.
Anda perlu menyediakan beberapa variabel lingkungan di awal skrip yang harus unik di seluruh Azure.
Anda juga perlu memberikan alamat IP lokal Anda untuk mengakses database dari komputer lokal Anda. Alamat IP ini harus berupa Alamat IPv4. Jika Anda tidak mengetahui alamat IP lokal Anda, Anda dapat mengunjungi situs web berikut: https://www.whatismyip.com/
Atur variabel lingkungan berikut:
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>
Setelah variabel lingkungan tersebut diatur, Anda dapat menjalankan perintah berikut untuk membuat sumber daya:
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
Perintah ini bisa memakan waktu beberapa menit untuk diselesaikan.
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
Perintah ini bisa memakan waktu beberapa menit untuk diselesaikan.
az extension add --name spring
az spring create \
--name $AZ_SPRING_CLOUD \
--resource-group $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION \
--sku Basic
Perintah ini bisa memakan waktu beberapa menit untuk diselesaikan.
az spring app create \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application \
--runtime-version Java_11 \
--assign-endpoint true
Skrip ini membutuhkan waktu untuk dijalankan, sehingga Anda dapat membiarkannya berjalan di latar belakang dan mulai mengkoding aplikasi sementara itu.
Mengonfigurasi aplikasi Java
Dapatkan kerangka aplikasi dari repositori https://github.com/Azure-Samples/manage-secrets-in-java-applications GitHub, menggunakan perintah git clone:
git clone https://github.com/Azure-Samples/manage-secrets-in-java-applications.git
Aplikasi ini menggunakan Spring Data JPA untuk mengakses database. Anda dapat melihat antarmuka Repositori CRUD:
package com.example.demo;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface ItemRepository extends CrudRepository<Item, Integer> {
}
Data yang disimpan dalam database kemudian diekspos ke Web, menggunakan Pengontrol Spring MVC REST:
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();
}
}
Data ini dimasukkan ke dalam database saat pemulaian, menggunakan file src/main/resources/data.sql:
insert into item (details) values ('This is a item from the database');
Anda dapat menambahkan lebih banyak baris ke file ini jika Anda menginginkan lebih banyak data, atau jika Anda ingin menyesuaikannya.
Untuk mengakses database, Anda perlu mengonfigurasi src/main/resources/application.properties file:
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
File konfigurasi ini memiliki tiga variabel yang perlu dikonfigurasi:
-
${azureDatabaseName}adalah nama database PostgreSQL yang dikonfigurasi sebelumnya di variabel lingkunganAZ_DATABASE_NAME. Ketikecho $AZ_DATABASE_NAMEuntuk melihatnya. -
${azureDatabaseUsername}adalah nama dari nama pengguna database yang dikonfigurasi sebelumnya di variabel lingkunganAZ_DATABASE_USERNAME. Ketikecho $AZ_DATABASE_USERNAMEuntuk melihatnya. -
${azureDatabasePassword}adalah nama kata sandi database yang dikonfigurasi sebelumnya di variabel lingkunganAZ_DATABASE_PASSWORD. Ketikecho $AZ_DATABASE_PASSWORDuntuk melihatnya.
Seperti yang kita lihat di unit sebelumnya, ini adalah praktik yang buruk untuk mengkodekan nilai-nilai tersebut secara permanen dalam kode sumber aplikasi. Tetapi untuk menguji aplikasi, Anda dapat menulisnya sementara dan menjalankan aplikasi:
./mvnw spring-boot:run
Anda dapat membaca konten database dengan mengakses Pengontrol Spring MVC menggunakan perintah berikut, atau menggunakan browser Web:
curl http://localhost:8080
Menyebarkan aplikasi Java ke Azure
Untuk menyebarkan aplikasi, Pertama-tama Anda perlu mengemasnya sebagai file Jar:
./mvnw clean package
Perintah ini menghasilkan file Jar yang dapat dieksekusi di target direktori, yang Anda sebarkan menggunakan Azure CLI:
az spring app deploy \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application \
--artifact-path target/*.jar
Jika Mengalami kegagalan, Anda dapat melihat log aplikasi dengan mengetik perintah berikut:
az spring app logs \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application
Aplikasi kemudian akan tersedia di cloud, dan Anda dapat mengakses datanya menggunakan perintah 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'}]
#
Selamat! Anda berhasil membuat aplikasi Java yang tersambung ke database! Sekarang Anda perlu mengamankan kredensial database di unit berikutnya.