Alıştırma - Gizli bilgiler kullanan bir Java uygulaması yazın
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ınAZ_DATABASE_NAMEadıdır. Görmek için yazınecho $AZ_DATABASE_NAME. -
${azureDatabaseUsername}, ortam değişkeninde daha önceAZ_DATABASE_USERNAMEyapılandırılan veritabanı kullanıcı adının adıdır. Görmek için yazınecho $AZ_DATABASE_USERNAME. -
${azureDatabasePassword}, ortam değişkeninde daha önce yapılandırılan veritabanı parolasınınAZ_DATABASE_PASSWORDadıdır. Görmek için yazınecho $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.