Tutorial: Menyebarkan aplikasi Spring ke Azure Spring Apps dengan koneksi tanpa kata sandi ke database Azure

Artikel ini memperlihatkan kepada Anda cara menggunakan koneksi tanpa kata sandi ke database Azure di aplikasi Spring Boot yang disebarkan ke Azure Spring Apps.

Dalam tutorial ini, Anda menyelesaikan tugas berikut dengan menggunakan portal Azure atau Azure CLI. Kedua metode dijelaskan dalam prosedur berikut.

  • Menyediakan instans Azure Spring Apps.
  • Membangun dan menyebarkan aplikasi ke Azure Spring Apps.
  • Jalankan aplikasi yang tersambung ke database Azure dengan menggunakan identitas terkelola.

Nota

Tutorial ini tidak berfungsi untuk R2DBC.

Prasyarat

  • Langganan Azure. Jika Anda belum memilikinya, buat akun gratis.
  • Azure CLI versi 2.45.0 atau yang lebih tinggi.
  • Ekstensi Azure Spring Apps. Instal ekstensi dengan menggunakan perintah: az extension add --name spring.
  • Java Development Kit (JDK), versi 8, 11, atau 17.
  • Klien Git.
  • cURL atau utilitas HTTP serupa untuk menguji fungsionalitas.
  • Klien baris perintah MySQL jika Anda memilih untuk menjalankan Azure Database for MySQL. Anda dapat terhubung ke server Anda dengan Azure Cloud Shell dengan menggunakan alat klien populer, alat baris perintah mysql.exe. Atau, Anda dapat menggunakan baris perintah mysql di lingkungan lokal Anda.
  • ODBC Driver 18 untuk SQL Server jika Anda memilih untuk menjalankan Azure SQL Database.

Menyiapkan lingkungan kerja

Pertama, siapkan beberapa variabel lingkungan dengan menggunakan perintah berikut:

export AZ_RESOURCE_GROUP=passwordless-tutorial-rg
export AZ_DATABASE_SERVER_NAME=<YOUR_DATABASE_SERVER_NAME>
export AZ_DATABASE_NAME=demodb
export AZ_LOCATION=<YOUR_AZURE_REGION>
export AZ_SPRING_APPS_SERVICE_NAME=<YOUR_AZURE_SPRING_APPS_SERVICE_NAME>
export AZ_SPRING_APPS_APP_NAME=hellospring
export AZ_DB_ADMIN_USERNAME=<YOUR_DB_ADMIN_USERNAME>
export AZ_DB_ADMIN_PASSWORD=<YOUR_DB_ADMIN_PASSWORD>
export AZ_USER_IDENTITY_NAME=<YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>

Gantikan placeholder dengan nilai berikut, yang digunakan di seluruh artikel ini.

  • <YOUR_DATABASE_SERVER_NAME>: Nama server Azure Database Anda, yang harus unik di seluruh Azure.
  • <YOUR_AZURE_REGION>: Wilayah Azure yang ingin Anda gunakan. Anda dapat menggunakan eastus secara default, tetapi mengonfigurasi wilayah yang lebih dekat dengan tempat Anda tinggal. Lihat daftar lengkap wilayah yang tersedia dengan menggunakan az account list-locations.
  • <YOUR_AZURE_SPRING_APPS_SERVICE_NAME>: Nama instans Azure Spring Apps Anda. Panjang nama harus antara 4 dan 32 karakter dan hanya boleh berisi huruf kecil, angka, dan tanda hubung. Karakter pertama dari nama layanan harus berupa huruf dan karakter terakhir harus berupa huruf atau angka.
  • <AZ_DB_ADMIN_USERNAME>: Nama pengguna admin server database Azure Anda.
  • <AZ_DB_ADMIN_PASSWORD>: Kata sandi admin untuk server database Azure Anda.
  • <YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>: Nama server identitas terkelola yang ditetapkan pengguna Anda, yang harus unik di seluruh Azure.

Menyediakan instans Azure Spring Apps

Gunakan langkah-langkah berikut untuk menyediakan instans Azure Spring Apps.

  1. Perbarui Azure CLI dengan ekstensi Azure Spring Apps dengan menggunakan perintah berikut:

    az extension update --name spring
    
  2. Masuk ke Azure CLI dan pilih langganan aktif Anda dengan menggunakan perintah berikut:

    az login
    az account list --output table
    az account set --subscription <name-or-ID-of-subscription>
    
  3. Gunakan perintah berikut untuk membuat grup sumber daya untuk berisi layanan Azure Spring Apps Anda dan instans layanan Azure Spring Apps:

    az group create \
        --name $AZ_RESOURCE_GROUP \
        --location $AZ_LOCATION
    az spring create \
        --resource-group $AZ_RESOURCE_GROUP \
        --name $AZ_SPRING_APPS_SERVICE_NAME
    

Membuat instans database Azure

Gunakan langkah-langkah berikut untuk menyediakan instans Azure Database.

  1. Buat server Azure Database for MySQL dengan menggunakan perintah berikut:

    az mysql flexible-server create \
        --resource-group $AZ_RESOURCE_GROUP \
        --name $AZ_DATABASE_SERVER_NAME \
        --location $AZ_LOCATION \
        --admin-user $AZ_DB_ADMIN_USERNAME \
        --admin-password $AZ_DB_ADMIN_PASSWORD \
        --yes
    

Nota

Jika Anda tidak menyediakan admin-user atau admin-password parameter, sistem akan menghasilkan pengguna admin default atau kata sandi admin acak.

  1. Buat database baru dengan menggunakan perintah berikut:

    az mysql flexible-server db create \
        --resource-group $AZ_RESOURCE_GROUP \
        --database-name $AZ_DATABASE_NAME \
        --server-name $AZ_DATABASE_SERVER_NAME
    

Membuat aplikasi dengan titik akhir publik yang ditetapkan

Gunakan perintah berikut untuk membuat aplikasi.

az spring app create \
    --resource-group $AZ_RESOURCE_GROUP \
    --service $AZ_SPRING_APPS_SERVICE_NAME \
    --name $AZ_SPRING_APPS_APP_NAME \
    --runtime-version=Java_17
    --assign-endpoint true

Menyambungkan Azure Spring Apps ke database Azure

Pertama, instal Konektor Layanan ekstensi tanpa kata sandi untuk Azure CLI:

az extension add --name serviceconnector-passwordless --upgrade

Kemudian, gunakan perintah berikut untuk membuat identitas terkelola yang ditetapkan pengguna untuk autentikasi Microsoft Entra. Untuk informasi selengkapnya, lihat Menyiapkan autentikasi Microsoft Entra untuk Azure Database for MySQL - Server Fleksibel.

export AZ_IDENTITY_RESOURCE_ID=$(az identity create \
    --name $AZ_USER_IDENTITY_NAME \
    --resource-group $AZ_RESOURCE_GROUP \
    --query id \
    --output tsv)

Penting

Setelah membuat identitas yang ditetapkan pengguna, minta administrator global Anda atau Administrator Peran Istimewa untuk memberikan izin berikut untuk identitas ini: User.Read.All, GroupMember.Read.All, dan Application.Read.ALL. Untuk informasi selengkapnya, lihat bagian Izin dari autentikasi Direktori Aktif.

Selanjutnya, gunakan perintah berikut untuk membuat koneksi tanpa kata sandi ke database.

az spring connection create mysql-flexible \
    --resource-group $AZ_RESOURCE_GROUP \
    --service $AZ_SPRING_APPS_SERVICE_NAME \
    --app $AZ_SPRING_APPS_APP_NAME \
    --target-resource-group $AZ_RESOURCE_GROUP \
    --server $AZ_DATABASE_SERVER_NAME \
    --database $AZ_DATABASE_NAME \
    --system-identity mysql-identity-id=$AZ_IDENTITY_RESOURCE_ID

Perintah Konektor Layanan ini menjalankan tugas berikut di latar belakang:

  • Mengaktifkan identitas terkelola yang ditetapkan sistem untuk aplikasi $AZ_SPRING_APPS_APP_NAME yang dihosting oleh Azure Spring Apps.

  • Mengatur admin Microsoft Entra ke pengguna yang masuk saat ini.

  • Menambahkan pengguna database bernama $AZ_SPRING_APPS_SERVICE_NAME/apps/$AZ_SPRING_APPS_APP_NAME untuk identitas terkelola yang dibuat di langkah 1 dan memberikan semua hak istimewa database $AZ_DATABASE_NAME kepada pengguna ini.

  • Menambahkan dua konfigurasi ke aplikasi $AZ_SPRING_APPS_APP_NAME: spring.datasource.url dan spring.datasource.username.

    Nota

    Jika Anda melihat pesan The subscription is not registered to use Microsoft.ServiceLinkerkesalahan , jalankan perintah az provider register --namespace Microsoft.ServiceLinker untuk mendaftarkan penyedia sumber daya Konektor Layanan, lalu jalankan perintah koneksi lagi.

Membangun dan menyebarkan aplikasi

Langkah-langkah berikut menjelaskan cara mengunduh, mengonfigurasi, membangun, dan menyebarkan aplikasi sampel.

  1. Gunakan perintah berikut untuk mengkloning repositori kode sampel:

    git clone https://github.com/Azure-Samples/quickstart-spring-data-jdbc-mysql passwordless-sample
    
  2. Tambahkan dependensi berikut ke file pom.xml Anda:

    <dependency>
        <groupId>com.azure.spring</groupId>
        <artifactId>spring-cloud-azure-starter-jdbc-mysql</artifactId>
    </dependency>
    

    Dependensi ini menambahkan dukungan untuk starter Spring Cloud Azure.

    Nota

    Untuk informasi selengkapnya tentang cara mengelola versi pustaka Spring Cloud Azure dengan menggunakan tagihan materi (BOM), lihat bagian Memulai panduan pengembang Spring Cloud Azure.

  3. Gunakan perintah berikut untuk memperbarui file application.properties :

    cat << EOF > passwordless-sample/src/main/resources/application.properties
    
    logging.level.org.springframework.jdbc.core=DEBUG
    spring.datasource.azure.passwordless-enabled=true
    spring.sql.init.mode=always
    
    EOF
    
  4. Gunakan perintah berikut untuk membangun proyek dengan menggunakan Maven:

    cd passwordless-sample
    ./mvnw clean package -DskipTests
    
  5. Gunakan perintah berikut untuk menerapkan file target/demo-0.0.1-SNAPSHOT.jar untuk aplikasi:

    az spring app deploy \
        --name $AZ_SPRING_APPS_APP_NAME \
        --service $AZ_SPRING_APPS_SERVICE_NAME \
        --resource-group $AZ_RESOURCE_GROUP \
        --artifact-path target/demo-0.0.1-SNAPSHOT.jar
    
  6. Kueri status aplikasi setelah penyebaran dengan menggunakan perintah berikut:

    az spring app list \
        --service $AZ_SPRING_APPS_SERVICE_NAME \
        --resource-group $AZ_RESOURCE_GROUP \
        --output table
    

    Anda melihat output yang mirip dengan contoh berikut.

    Name               Location    ResourceGroup    Production Deployment    Public Url                                           Provisioning Status    CPU    Memory    Running Instance    Registered Instance    Persistent Storage
    -----------------  ----------  ---------------  -----------------------  ---------------------------------------------------  ---------------------  -----  --------  ------------------  ---------------------  --------------------
    <app name>         eastus      <resource group> default                                                                       Succeeded              1      2         1/1                 0/1                    -
    

Menguji aplikasi

Untuk menguji aplikasi, gunakan cURL. Pertama, buat item "todo" baru di database dengan menggunakan perintah berikut:

curl --header "Content-Type: application/json" \
    --request POST \
    --data '{"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done": "true"}' \
        https://${AZ_SPRING_APPS_SERVICE_NAME}-hellospring.azuremicroservices.io

Perintah ini mengembalikan item yang dibuat, seperti yang ditunjukkan dalam contoh berikut:

{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}

Selanjutnya, ambil data dengan menggunakan permintaan cURL berikut:

curl https://${AZ_SPRING_APPS_SERVICE_NAME}-hellospring.azuremicroservices.io

Perintah ini mengembalikan daftar item "todo", termasuk item yang Anda buat, seperti yang ditunjukkan dalam contoh berikut:

[{"id":1,"description":"configuration","details":"congratulations, you have set up JDBC correctly!","done":true}]

Membersihkan sumber daya

Untuk membersihkan semua sumber daya yang digunakan selama tutorial ini, hapus grup sumber daya dengan menggunakan perintah berikut:

az group delete \
    --name $AZ_RESOURCE_GROUP \
    --yes

Langkah berikutnya