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 akan menggunakan Azure CLI untuk membuat sumber daya berikut:
- Grup sumber daya Azure, yang akan berisi semua sumber daya untuk aplikasi Anda.
- Server database PostgreSQL.
- 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. Sebaiknya Anda menggunakan nama pengguna dan beberapa karakter acak untuk menghindari konflik penamaan.
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
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-cloud
az spring-cloud create \
--name $AZ_SPRING_CLOUD \
--resource-group $AZ_RESOURCE_GROUP \
--location $AZ_LOCATION \
--sku Basic
az spring-cloud app create \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application \
--runtime-version Java_11 \
--assign-endpoint true
Skrip ini akan memakan waktu yang lama untuk dijalankan, sehingga Anda dapat menyimpannya di latar belakang dan sementara itu mulai melakukan pengodean aplikasi.
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 harus mengonfigurasi file 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
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_NAME
untuk melihatnya.${azureDatabaseUsername}
adalah nama dari nama pengguna database yang dikonfigurasi sebelumnya di variabel lingkunganAZ_DATABASE_USERNAME
. Ketikecho $AZ_DATABASE_USERNAME
untuk melihatnya.${azureDatabasePassword}
adalah nama kata sandi database yang dikonfigurasi sebelumnya di variabel lingkunganAZ_DATABASE_PASSWORD
. Ketikecho $AZ_DATABASE_PASSWORD
untuk melihatnya.
Seperti yang telah kita lihat di unit sebelumnya, melakukan hard-code nilai-nilai tersebut dalam kode sumber aplikasi adalah praktik yang buruk. 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, Anda harus terlebih dahulu mengemasnya sebagai file Jar:
./mvnw clean package
Perintah ini akan menghasilkan file Jar yang dapat dieksekusi di direktori target
, yang akan Anda sebarkan menggunakan Azure CLI:
az spring-cloud app deploy \
--resource-group $AZ_RESOURCE_GROUP \
--service $AZ_SPRING_CLOUD \
--name application \
--jar-path target/*.jar
Jika ada yang tidak beres, Anda dapat melihat log aplikasi dengan mengetikkan perintah berikut:
az spring-cloud 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
Selamat, Anda telah berhasil membuat aplikasi Java yang tersambung ke database! Sekarang Anda harus mengamankan info masuk database di pelajaran berikutnya.