Membuat aplikasi web Statis dengan API tanpa server
Pelajari cara menjalankan secara lokal lalu menyebarkan aplikasi web statis dengan API tanpa server ke Azure. Tutorial ini menggunakan versi pratinjau dari model pemrograman Azure Functions Node.js terbaru. Karena artikel ini menggunakan versi pratinjau Azure Functions, artikel ini disebarkan sebagai aplikasi terpisah dari aplikasi web statis.
Pelajari cara:
- Menjalankan aplikasi web statis (SWA) secara lokal dengan aplikasi Azure Function
- Proksi permintaan front-end secara lokal ke API back-end lokal menggunakan SWA CLI.
- Sebarkan dan jalankan kode yang sama dari jarak jauh.
Proksi antara front-end dan backend-endis yang disediakan oleh CLI aplikasi web Statis menyediakan:
- URL di React,
/api/todo
, tidak menentukan server atau nomor port untuk API. Permintaan menggunakan URL ini berhasil secara lokal karena SWA CLI mengelola proxy untuk Anda. - Emulator autentikasi lokal saat mengakses
/.auth/login/<provider>
- Manajemen dan otorisasi rute
Autentikasi dalam sampel ini
Autentikasi dalam sampel ini disediakan untuk pengguna front-end dari layanan Azure Static Web Apps:
- Masuk/Keluar
- Konten publik dan privat
Kode sumber dalam sampel ini
Kode sumber dalam sampel ini dimaksudkan untuk mempelajari cara membangun dan menyebarkan aplikasi web statis dengan API tanpa server. Kode tidak dimaksudkan untuk produksi.
Anda akan menemukan beberapa tempat dalam kode yang tidak mengikuti praktik keamanan terbaik. Misalnya, kode menggunakan untuk menulis ke konsol console.log
browser.
Saat pindah ke lingkungan produksi, Anda harus meninjau dan menghapus kode apa pun, yang melanggar praktik terbaik keamanan untuk organisasi Anda.
1. Siapkan lingkungan pengembangan Anda
Buat akun berikut:
- Langganan Azure - Membuat akun Azure gratis
- Akun GitHub - Anda memerlukan akun GitHub untuk disebarkan dalam tutorial ini.
Instal yang berikut ini di komputer pengembangan lokal Anda:
- Node.js v18+
- Visual Studio Code (VS Code)
- Azure Static Web Apps (SWA) CLI diinstal secara global dengan
-g
bendera - Azure Functions Core Tools v4.0.5095+ (jika berjalan secara lokal) diinstal secara global dengan
-g
bendera - TypeScript v4+
2. Fork repositori sampel di GitHub
Anda harus memiliki fork repositori sampel Anda sendiri untuk menyelesaikan penyebaran dari GitHub. Selama proses fork, Anda hanya perlu menyalin main
cabang.
Fork repositori sampel: https://github.com/Azure-Samples/azure-typescript-e2e-apps
.
3. Kloning repositori sampel fork
Di terminal bash, kloning repositori fork Anda ke komputer lokal Anda. Jangan mengkloning repositori sampel asli. Contoh URL adalah
https://github.com/YOUR-ACCOUNT-NAME/azure-typescript-e2e-apps
git clone YOUR-FORKED-REPO-URL
Instal dependensi untuk aplikasi front-end lokal:
cd app-react-vite && npm install
Instal dependensi untuk aplikasi back-end lokal:
cd ../api-inmemory && npm install && cd ..
4. Opsional, bangun dan jalankan aplikasi lokal
Repositori sampel memiliki beberapa versi aplikasi front-end dan backend. Langkah-langkah berikut menggunakan versi React 18 (Vite) dari front-end dan Azure Function v4 dengan versi Node.js dari back-end dengan /status
rute API dan /todo
.
Dari akar aplikasi sampel, gunakan SWA CLI dengan
./swa-cli.config.json
file untuk membangun aplikasi front-end dan back-end:swa build
Jika Anda menemukan kesalahan, yang mungkin terjadi tergantung pada versi berbagai paket dan lingkungan Anda, perbaiki kesalahan tersebut sebelum melanjutkan. Penting untuk diketahui bahwa proyek Anda berhasil dibangun secara lokal sebelum beralih ke penyebaran ke Azure Static Web Apps.
Dari akar aplikasi sampel, gunakan SWA CLI untuk memulai aplikasi dengan proksi.
swa start
Saat Anda melihat baris berikut di terminal bash, proyek berhasil dimulai.
[swa] Serving static content: [swa] /workspaces/azure-typescript-e2e-apps/app-react-vite/dist [swa] [swa] Serving API: [swa] /workspaces/azure-typescript-e2e-apps/api-inmemory [swa] [swa] Azure Static Web Apps emulator started at http://0.0.0.0:4280. Press CTRL+C to exit.
Buka browser web ke URL yang diproksikan,
http://localhost:4280
. Anda akan melihat halaman berikut:Anda dapat masuk menggunakan autentikasi yang disediakan oleh SWA CLI. Proses ini meniru autentikasi di aplikasi web Azure Static berbasis cloud. Kode front-end menggunakan
/.auth/me
titik akhir untuk mendapatkan identitas pengguna. Masukkan nama pengguna palsu apa pun dan jangan ubah bidang lainnya.Setelah pengguna diautentikasi, front-end menampilkan informasi privat seperti variabel lingkungan API.
Kode sumber aplikasi Azure Function v4 untuk API ini adalah:
import { app, HttpRequest, HttpResponseInit, InvocationContext } from "@azure/functions"; import { name, version } from '../../package.json'; function isObject(v) { return '[object Object]' === Object.prototype.toString.call(v); }; function sortJson(o){ if (Array.isArray(o)) { return o.sort().map(sortJson); } else if (isObject(o)) { return Object .keys(o) .sort() .reduce(function(a, k) { a[k] = sortJson(o[k]); return a; }, {}); } return o; } export async function status(request: HttpRequest, context: InvocationContext): Promise<HttpResponseInit> { context.log(`Http function processed request for url "${request.url}"`); const sortedEnv = sortJson(process.env); return { jsonBody: { name, version, env: sortedEnv, requestHeaders: request.headers }}; }; app.http('status', { route: "status", methods: ['GET'], authLevel: 'anonymous', handler: status });
Perluas bagian publik dan privat untuk melihat konten dari API ditampilkan.
5. Buat aplikasi Azure Functions baru
Bagian sebelumnya dari menjalankan aplikasi web statis dengan API bersifat opsional. Bagian artikel yang tersisa diperlukan untuk menyebarkan aplikasi dan API ke cloud Azure.
Untuk menggunakan versi pratinjau runtime Azure Functions v4, Anda perlu membuat aplikasi Azure Functions baru. Aplikasi web statis Anda juga perlu dibangun kembali dan disebarkan ulang untuk menggunakan URI aplikasi Azure Functions dalam permintaan Ambil ke API alih-alih menggunakan API yang diproksi dan dikelola.
Di browser web, buka portal Azure untuk membuat aplikasi Azure Functions baru: Membuat aplikasi baru
Gunakan informasi berikut untuk membuat Aplikasi Fungsi::
Tab:Pengaturan Value Dasar-dasar: Langganan Pilih langganan yang ingin Anda gunakan. Dasar-dasar: Grup Sumber Daya Buat grup sumber daya baru seperti first-static-web-app-with-api
. Nama tidak digunakan di URL publik aplikasi. Grup sumber daya membantu Anda mengelompokkan dan mengelola sumber daya Azure terkait.Dasar-dasar: Detail instans: Nama Aplikasi Fungsi Masukkan nama unik global seperti swa-api
dengan 3 karakter acak yang ditambahkan di akhir, sepertiswa-api-123
.Dasar-dasar: Detail instans: Kode atau kontainer Pilih Code
.Dasar-dasar: Detail instans: Tumpukan runtime Pilih Node.js
.Dasar-dasar: Detail instans: Tumpukan runtime Pilih 18LTS
.Dasar-dasar: Sistem operasi Pilih Linux
.Dasar-dasar: Hosting Pilih Consumption
.Penyimpanan: Akun penyimpanan Jangan mengubah ini. Akun Azure Storage baru dibuat untuk membantu peristiwa fungsi. Jaringan Jangan mengubah apapun. Pemantauan: Application Insights: Mengaktifkan Application Insights Pilih Yes
. Jangan ubah nama default yang disediakan.Penyebaran: GitHub Actions Pengaturan: Penyebaran berkelanjutan Pilih Enable
.Penyebaran: Akun GitHub Pilih akun GitHub Anda. Penyebaran: Organisasi Pilih akun GitHub Anda, yang Anda gunakan saat membuat fork repositori sampel. Penyebaran: Repositori Pilih nama repositori fork Anda, azure-typescript-e2e-apps
.Penyebaran: Cabang Pilih main
.Tag Jangan mengubah apapun. Tinjau + buat Pilih Create
.Langkah ini menambahkan file alur kerja yaml GitHub ke repositori fork Anda.
Saat sumber daya dibuat, pilih tombol
Go to resource
.Pilih Pengaturan -> Konfigurasi lalu tambahkan pengaturan konfigurasi untuk runtime Azure Function Node.js v4 dengan nama
AzureWebJobsFeatureFlags
dan nilaiEnableWorkerIndexing
.Pilih Simpan untuk menyimpan pengaturan.
Di terminal bash, gunakan git untuk menurunkan file alur kerja yaml baru dari repositori fork GitHub Anda ke komputer lokal Anda.
git pull origin main
Di Visual Studio Code, buka file alur kerja yaml baru yang terletak di
./.github/workflows/
.File alur kerja default yang disediakan untuk Anda mengasumsikan kode sumber fungsi berada di akar repositori dan merupakan satu-satunya aplikasi di repositori tetapi bukan itu masalahnya dengan sampel ini. Untuk memperbaikinya, edit file. Baris yang akan diedit disorot dalam blok yaml berikut dan dijelaskan di bawah ini:
# Docs for the Azure Web Apps Deploy action: https://github.com/azure/functions-action # More GitHub Actions for Azure: https://github.com/Azure/actions # Deploy Azure Functions Node.js v4 runtime # with api-inmemory subdir name: Azure Function App - api-inmemory on: push: branches: - main paths: - 'api-inmemory/**' workflow_dispatch: env: AZURE_FUNCTIONAPP_PACKAGE_PATH: 'api-inmemory' # set this to the path to your web app project, defaults to the repository root NODE_VERSION: '18.x' # Azure Functions v4 runtime requires 18 VERBOSE: true # For debugging jobs: build-and-deploy: runs-on: ubuntu-latest steps: - name: 'Checkout GitHub Action' uses: actions/checkout@v2 - name: Setup Node ${{ env.NODE_VERSION }} Environment uses: actions/setup-node@v1 with: node-version: ${{ env.NODE_VERSION }} - name: 'Resolve Project Dependencies Using Npm' shell: bash run: | pushd './${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}' npm install npm run build --if-present npm run test --if-present popd - name: 'Upload artifact for deployment job' # For debugging uses: actions/upload-artifact@v3 with: name: azure-function-v4-app path: | ${{env.AZURE_FUNCTIONAPP_PACKAGE_PATH}} !${{env.AZURE_FUNCTIONAPP_PACKAGE_PATH}}/node_modules !${{env.AZURE_FUNCTIONAPP_PACKAGE_PATH}}/dist - name: 'Run Azure Functions Action' uses: Azure/functions-action@v1 id: fa with: app-name: 'swa-api' # change this to your Azure Function app name slot-name: 'Production' package: ${{env.AZURE_FUNCTIONAPP_PACKAGE_PATH}} publish-profile: ${{ secrets.AZUREAPPSERVICE_PUBLISHPROFILE_123 }} scm-do-build-during-deployment: false enable-oryx-build: false
Perubahan properti Tujuan name
Persingkat nama sehingga Anda dapat dengan mudah menemukannya di daftar tindakan GitHub fork Anda. paths
Tambahkan bagian jalur untuk membatasi penyebaran agar berjalan hanya saat kode API Azure Functions berubah. Saat mengedit file alur kerja, Anda dapat memicu penyebaran secara manual. AZURE_FUNCTIONAPP_PACKAGE_PATH
Saat menggunakan subdirektori untuk kode sumber, ini harus menjadi jalur dan nama subdirektori tersebut. VERBOSE
Pengaturan ini berguna untuk men-debug proses build dan penyebaran. langkah bernama Upload artifact for deployment job
Langkah ini membuat artefak yang dapat diunduh. Ini berguna saat menelusuri kesalahan persis file apa yang disebarkan ke Azure Function Anda. bersifat
Upload artifact for deployment job
opsional. Ini digunakan untuk memahami dan men-debug file apa yang disebarkan ke Azure Functions atau untuk menggunakan file tersebut di lingkungan terpisah.Simpan file lalu tambahkan, terapkan, dan dorong kembali ke GitHub dengan git:
git add . git commit -m "fix the workflow for a subdir" git push origin main
Dari browser, jalankan ulang alur kerja di GitHub di area tindakan fork Anda.
Tunggu hingga tindakan berhasil diselesaikan sebelum melanjutkan.
Di browser web, gunakan titik akhir API eksternal aplikasi fungsi Anda untuk memverifikasi aplikasi berhasil disebarkan.
https://YOUR-FUNCTION-APP-NAME.azurewebsites.net/api/todo
Hasil JSON yang dikembalikan untuk data dalam memori adalah:
{ "1": "Say hello" }
Catat URL fungsi Anda. Anda memerlukannya di bagian berikutnya.
Anda tahu bahwa aplikasi Azure Function Anda berfungsi di cloud. Sekarang Anda perlu membuat aplikasi web statis di cloud untuk menggunakan API.
6. Buat aplikasi web Statis Azure baru
Proses pembuatan ini menyebarkan repositori sampel GitHub fork yang sama ke Azure. Anda mengonfigurasi penyebaran untuk hanya menggunakan aplikasi front-end.
Buka portal Azure dan masuk dengan akun Azure Anda: portal Azure.
Gunakan informasi berikut untuk menyelesaikan langkah-langkah pembuatan:
Prompt Pengaturan Langganan Pilih langganan yang ingin Anda gunakan. Grup Sumber Daya Pilih Create new
dan masukkan baru untuk grup sumber daya sepertifirst-static-web-app
. Nama tidak digunakan di URL publik aplikasi. Grup sumber daya membantu Anda mengelompokkan sumber daya yang digunakan untuk satu proyek.Jenis paket Hosting Pilih Free
Azure Functions dan detail pementasan Jangan ubah default. Anda tidak menyebarkan Api Fungsi dalam aplikasi web statis. Detail penyebaran - sumber Pilih GitHub
Detail penyebaran - GitHub Masuk ke GitHub jika perlu. Detail penyebaran - Organisasi Pilih akun GitHub Anda. Detail penyebaran - Repositori Pilih repositori fork bernama azure-typescript-e2e-apps
.Detail penyebaran - Cabang Pilih cabang main
.Detail build - Build Presents Pilih Custom
.Detail build - Lokasi aplikasi Memasuki /app-react-vite
.Detail build - Lokasi api Biarkan kosong Detail build - Lokasi output Masukkan lokasi direktori output front-end, dist
.Pilih Tinjau + buat, lalu pilih Buat.
Saat sumber daya dibuat, pilih tombol
Go to resource
.Pada halaman Gambaran Umum , catat URL aplikasi web statis Anda. Anda memerlukannya di bagian berikutnya saat mengatur pengaturan CORS Azure Function.
Proses pembuatan membuat file alur kerja yaml GitHub di repositori GitHub fork Anda. Tarik perubahan tersebut ke bawah dengan perintah berikut:
git pull origin main
Tindakan GitHub yang ditemukan di
./.github/workflows/azure-static-web-apps-*.yml
bertanggung jawab untuk membangun dan menyebarkan aplikasi front-end. Edit file untuk menambahkan variabel lingkungan untuk URL API back-end berbasis cloud. Baris yang akan diedit disorot di blok yaml berikut dan dijelaskan di bawah blok yaml.name: Azure Static Web Apps CI/CD on: push: branches: - main paths: - 'app-react-vite/**' pull_request: types: [opened, synchronize, reopened, closed] branches: - main paths: - 'app-react-vite/**' workflow_dispatch: jobs: build_and_deploy_job: if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' || (github.event_name == 'pull_request' && github.event.action != 'closed') runs-on: ubuntu-latest name: Build and Deploy Job steps: - uses: actions/checkout@v2 with: submodules: true - name: Build And Deploy id: builddeploy uses: Azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_ORANGE_DUNE_123 }} repo_token: ${{ secrets.GITHUB_TOKEN }} # Used for Github integrations (i.e. PR comments) action: "upload" ###### Repository/Build Configurations - These values can be configured to match your app requirements. ###### # For more information regarding Static Web App workflow configurations, please visit: https://aka.ms/swaworkflowconfig app_location: "/app-react-vite" # App source code path api_location: "" # Api source code path - optional output_location: "dist" # Built app content directory - optional ###### End of Repository/Build Configurations ###### env: VITE_BACKEND_URI: https://swa-api-123.azurewebsites.net VITE_CLOUD_ENV: production close_pull_request_job: if: github.event_name == 'pull_request' && github.event.action == 'closed' runs-on: ubuntu-latest name: Close Pull Request Job steps: - name: Close Pull Request id: closepullrequest uses: Azure/static-web-apps-deploy@v1 with: azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN_ORANGE_DUNE_123 }} action: "close"
Perubahan properti Tujuan paths
Tambahkan bagian jalur untuk membatasi penyebaran agar berjalan hanya saat kode API Azure Functions berubah. Saat mengedit file alur kerja, Anda dapat memicu penyebaran secara manual. workflow_dispatch
Tambahkan workflow_dispatch
hanya saat mempelajari proses penyebaran dan men-debug masalah apa pun di build Vite. Hapus baris ini, ketika Anda melanjutkan kode sumber ini di luar artikel ini.if ... || github.event_name == 'workflow_dispatch'
workflow_dispatch
Sertakan peristiwa sebagaimana diizinkan untuk menghasilkan build saja sambil mempelajari proses penyebaran dan men-debug masalah apa pun dalam build Vite.env
Tambahkan variabel lingkungan yang diperlukan untuk menyertakan URL AZURE Function API dalam build statis dengan Vite. VITE_BACKEND_URL adalah URL aplikasi Azure Function Anda. VITE_CLOUD_ENV adalah parameter untuk menunjukkan kapan harus menggunakan URL VITE_BACKEND_URL. Jangan gunakan NODE_ENV untuk sampel ini karena memiliki efek samping yang tidak diinginkan. Simpan file lalu tambahkan, terapkan, dan dorong kembali ke GitHub dengan git:
git add . git commit -m "fix the workflow for a subdir" git push origin main
Dari browser, jalankan ulang alur kerja di GitHub di area tindakan fork Anda untuk aplikasi web statis Anda.
Aplikasi front-end Anda disebarkan ke Azure. Sekarang Anda perlu mengonfigurasi aplikasi Azure Function untuk mengizinkan permintaan CORS dari aplikasi web statis Anda.
7. Mengonfigurasi CORS untuk aplikasi Azure Function Anda
Saat menggunakan aplikasi Azure Function terpisah, alih-alih aplikasi Fungsi terkelola, Anda perlu mengonfigurasi CORS untuk mengizinkan permintaan dari aplikasi web statis Anda.
- Di portal Azure, buka aplikasi Azure Function Anda.
- Di bagian API -> CORS , tambahkan URL aplikasi web statis Anda ke daftar asal yang diizinkan.
8. Uji aplikasi web statis Anda
- Di browser, buka aplikasi web statis Anda.
- Berinteraksi dengan aplikasi untuk masuk, melihat informasi publik dan privat, dan keluar lagi.
9. Bersihkan semua sumber daya yang digunakan dalam seri artikel ini
Bersihkan semua sumber daya yang dibuat dalam seri artikel ini.
- Di portal Azure, hapus grup sumber daya Anda, yang menghapus aplikasi web statis dan aplikasi fungsi.
- Di portal GitHub, hapus repositori fork Anda.
Pemecahan Masalah
Sampel ini menyimpan daftar masalah dan resolusi yang diketahui. Jika masalah Anda tidak tercantum, silakan buka masalah.
URL publik aplikasi web statis dan aplikasi fungsi
Anda selalu dapat menemukan URL aplikasi web statis dan URL aplikasi fungsi Anda di portal Azure, di halaman Gambaran Umum setiap sumber daya. URL ini bersifat publik secara default.
Langkah berikutnya
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk