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-tugas berikut menggunakan portal Azure atau Azure CLI. Kedua metode ini dijelaskan dalam prosedur berikut.

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

Catatan

Tutorial ini tidak berfungsi untuk R2DBC.

Prasyarat

  • Langganan Azure. Jika Anda belum memilikinya, buat akun gratis sebelum memulai.
  • Azure CLI 2.45.0 atau yang lebih tinggi diperlukan.
  • Ekstensi Azure Spring Apps. Anda dapat menginstal 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 menggunakan alat klien populer, alat baris perintah mysql.exe . Atau, Anda dapat menggunakan mysql baris perintah di lingkungan lokal Anda.
  • Odbc Driver 18 untuk SQL Server jika Anda memilih untuk menjalankan Azure SQL Database.

Menyiapkan lingkungan kerja

Pertama-tama, siapkan beberapa variabel lingkungan menggunakan beberapa 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>

Ganti tempat penampung 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 kami menyarankan agar Anda mengonfigurasi wilayah yang lebih dekat ke tempat tinggal Anda. Anda dapat melihat daftar lengkap wilayah yang tersedia dengan menggunakan az account list-locations.
  • <YOUR_AZURE_SPRING_APPS_SERVICE_NAME>: Nama instans Azure Spring Apps Anda. Nama harus antara 4 hingga 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 server database Azure Anda.
  • <YOUR_USER_ASSIGNED_MANAGEMED_IDENTITY_NAME>: Nama server identitas terkelola yang ditetapkan pengguna Anda, yang harus unik di seluruh Azure.

Menyiapkan 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
    

Catatan

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

  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

Koneksi Azure Spring Apps ke database Azure

Pertama, instal ekstensi Service Koneksi or 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 atau Administrator Peran Istimewa Anda untuk memberikan izin berikut untuk identitas ini: User.Read.All, GroupMember.Read.All, dan Application.Read.ALL. Untuk informasi selengkapnya, lihat bagian Izin 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 Koneksi or Layanan ini melakukan tugas berikut di latar belakang:

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

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

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

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

    Catatan

    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 Service Koneksi or, lalu jalankan perintah koneksi lagi.

Membuat 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.

    Catatan

    Untuk informasi selengkapnya tentang cara mengelola versi pustaka Spring Cloud Azure dengan menggunakan tagihan materi (BOM), lihat bagian Memulai dari 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 menggunakan Maven:

    cd passwordless-sample
    ./mvnw clean package -DskipTests
    
  5. Gunakan perintah berikut untuk menyebarkan 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 akan 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                    -
    

Uji aplikasi

Untuk menguji aplikasi, Anda dapat menggunakan 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 telah Anda buat, seperti yang diperlihatkan 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