Latihan - Membuat kode aplikasi Java yang menggunakan rahasia

Selesai

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 lingkungan AZ_DATABASE_NAME. Ketik echo $AZ_DATABASE_NAME untuk melihatnya.
  • ${azureDatabaseUsername} adalah nama dari nama pengguna database yang dikonfigurasi sebelumnya di variabel lingkungan AZ_DATABASE_USERNAME. Ketik echo $AZ_DATABASE_USERNAME untuk melihatnya.
  • ${azureDatabasePassword} adalah nama kata sandi database yang dikonfigurasi sebelumnya di variabel lingkungan AZ_DATABASE_PASSWORD. Ketik echo $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.