Alıştırma - Gizli bilgiler kullanan bir Java uygulaması yazın

Tamamlandı

Bir veritabanına bağlanan Spring Boot kullanarak bir Java Web uygulaması kodlaacaksınız.

Güvenlik nedeniyle, gelecekte bu veritabanı erişiminin güvenliğini sağlamanız gerekir. Ama önce uygulama altyapısını oluşturalım ve ardından Java uygulamasını kullanacak şekilde yapılandıralım.

Uygulama altyapısını oluşturma

Bu alıştırmada, aşağıdaki kaynakları oluşturmak için Azure CLI'yi kullanacaksınız:

  • Uygulamanız için tüm kaynakları içeren bir Azure kaynak grubu.
  • PostgreSQL veritabanı sunucusu.
  • Bir Azure Spring Apps kümesi ve bu küme içinde çalışan bir Spring Boot uygulaması.

Betiğin başında Azure genelinde benzersiz olması gereken bazı ortam değişkenleri sağlamanız gerekir.

Veritabanına yerel bilgisayarınızdan erişmek için yerel IP adresinizi de sağlamanız gerekir. Bu IP adresi bir IPv4 Adresi olmalıdır. Yerel IP adresinizi bilmiyorsanız aşağıdaki web sitesine gidebilirsiniz: https://www.whatismyip.com/

Aşağıdaki ortam değişkenlerini ayarlayın:

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>

Bu ortam değişkenleri ayarlandıktan sonra aşağıdaki komutu çalıştırarak kaynakları oluşturabilirsiniz:

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

Bu komutun tamamlanması birkaç dakika sürebilir.

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

Bu komutun tamamlanması birkaç dakika sürebilir.

az extension add --name spring

az spring create \
   --name $AZ_SPRING_CLOUD \
   --resource-group $AZ_RESOURCE_GROUP \
   --location $AZ_LOCATION \
   --sku Basic

Bu komutun tamamlanması birkaç dakika sürebilir.

az spring app create \
   --resource-group $AZ_RESOURCE_GROUP \
   --service $AZ_SPRING_CLOUD \
   --name application \
   --runtime-version Java_11 \
   --assign-endpoint true

Bu betiklerin çalıştırılması biraz zaman alır, böylece arka planda çalışmasına izin verebilir ve bu arada uygulamayı kodlamaya başlayabilirsiniz.

Java uygulamasını yapılandırma

Komutunu kullanarak GitHub deposundan https://github.com/Azure-Samples/manage-secrets-in-java-applications uygulama iskeletini git clone alın:

git clone https://github.com/Azure-Samples/manage-secrets-in-java-applications.git

Bu uygulama veritabanına erişmek için Spring Data JPA kullanır. CRUD Deposu arabirimine bakabilirsiniz:

package com.example.demo;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ItemRepository extends CrudRepository<Item, Integer> {
}

Veritabanında depolanan veriler daha sonra Spring MVC REST Denetleyicisi kullanılarak Web'e sunulur:

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();
    }
}

Bu veriler, başlangıç zamanında veritabanına şu dosya kullanılarak src/main/resources/data.sql eklenir:

insert into item (details) values ('This is a item from the database');

Daha fazla veri istiyorsanız veya özelleştirmek istiyorsanız bu dosyaya daha fazla satır ekleyebilirsiniz.

Veritabanına erişmek için dosyayı yapılandırmanız src/main/resources/application.properties gerekir:

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

Bu yapılandırma dosyasında yapılandırılması gereken üç değişken vardır:

  • ${azureDatabaseName} , daha önce ortam değişkeninde yapılandırılan PostgreSQL veritabanının AZ_DATABASE_NAME adıdır. Görmek için yazın echo $AZ_DATABASE_NAME .
  • ${azureDatabaseUsername} , ortam değişkeninde daha önce AZ_DATABASE_USERNAME yapılandırılan veritabanı kullanıcı adının adıdır. Görmek için yazın echo $AZ_DATABASE_USERNAME .
  • ${azureDatabasePassword} , ortam değişkeninde daha önce yapılandırılan veritabanı parolasının AZ_DATABASE_PASSWORD adıdır. Görmek için yazın echo $AZ_DATABASE_PASSWORD .

Önceki ünitede gördüğümüz gibi, uygulama kaynak kodunda bu değerlerin sabit koda uygulanması kötü bir uygulamadır. Ancak uygulamayı test etmek için bunları geçici olarak yazabilir ve uygulamayı çalıştırabilirsiniz:

./mvnw spring-boot:run

Aşağıdaki komutu kullanarak veya bir Web tarayıcısı kullanarak Spring MVC Denetleyicisi'ne erişerek veritabanı içeriğini okuyabilirsiniz:

curl http://localhost:8080

Java uygulamasını Azure'a dağıtma

Uygulamayı dağıtmak için önce jar dosyası olarak paketlemeniz gerekir:

./mvnw clean package

Bu komut, Azure CLI kullanarak dağıtmak için target dizininde yürütülebilir bir Jar dosyası oluşturur.

az spring app deploy \
   --resource-group $AZ_RESOURCE_GROUP \
   --service $AZ_SPRING_CLOUD \
   --name application \
   --artifact-path target/*.jar

Hatalarla karşılaşırsanız aşağıdaki komutu yazarak uygulama günlüklerine bakabilirsiniz:

az spring app logs \
   --resource-group $AZ_RESOURCE_GROUP \
   --service $AZ_SPRING_CLOUD \
   --name application

Ardından uygulama bulutta kullanılabilir hale gelecek ve cURL komutunu kullanarak verilerine erişebilirsiniz:

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'}]
#

Tebrikler! Veritabanına bağlanan bir Java uygulamasını başarıyla oluşturdunuz! Şimdi sonraki ünitelerde veritabanı kimlik bilgilerinin güvenliğini sağlamanız gerekir.