Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Menulis skrip kenari menggunakan runtime Java
Topik
Struktur proyek Java untuk kenari
Untuk membuat kenari di Jawa, Anda perlu menulis kode Anda, mengompilasinya, dan menyebarkan artefak yang dikompilasi ke Synthetics. Anda dapat menginisialisasi proyek Java Lambda dengan berbagai cara. Misalnya, Anda dapat menggunakan pengaturan proyek Java standar di IDE pilihan Anda, seperti IntelliJ IDEA atau Visual Studio Code. Atau, Anda dapat membuat struktur file yang diperlukan secara manual.
Sebuah proyek Java Synthetics berisi struktur umum berikut:
/project-root └ src └ main └ java └ canarypackage // name of package | └ ExampleCanary.java // Canary code file | └
other_supporting_classes
- resources └ synthetics.json // Synthetics configuration file └ build.gradle OR pom.xml
Anda dapat menggunakan Maven atau Gradle untuk membangun proyek dan mengelola dependensi.
Dalam struktur di atas, ExampleCanary
kelas adalah titik masuk atau handler untuk kenari.
Contoh kelas kenari Java
Contoh ini adalah untuk kenari untuk membuat permintaan get ke URL yang disimpan dalam variabel lingkungan Lambda TESTING_URL. Canary tidak menggunakan metode apa pun yang disediakan oleh runtime Synthetics.
package canarypackage; import java.net.HttpURLConnection; import java.net.URL; // Handler value: canary.ExampleCanary::canaryCode public class ExampleCanary { public void canaryCode() throws Exception{ URL url = new URL(System.getenv("
TESTING_URL
")); HttpURLConnection con=(HttpURLConnection)url.openConnection(); con.setRequestMethod("GET"); con.setConnectTimeout(5000); con.setReadTimeout(5000); int status=con.getResponseCode(); if(status!=200){ throw new Exception("Failed to load " + url + ", status code: " + status); } } }
Sangat disarankan untuk memodulasi kenari Anda menggunakan fungsi perpustakaan yang disediakan Synthetics. executeStep
Kenari membuat get
panggilan ke dua variabel yang URLs diperoleh dari URL1 dan URL2 lingkungan yang terpisah.
catatan
Untuk menggunakan executeStep
fungsionalitas, metode handler untuk kenari harus menggunakan parameter tipe Synthetics seperti yang ditunjukkan di bawah ini.
package canarypackage; import com.amazonaws.synthetics.Synthetics; import java.net.HttpURLConnection; import java.net.URL; // Handler value: canary.ExampleCanary::canaryCode public class ExampleCanary { public void canaryCode(Synthetics synthetics) throws Exception { createStep("Step1", synthetics, System.getenv("URL1")); createStep("Step2", synthetics, System.getenv("URL2")); return; } private void createStep(String stepName, Synthetics synthetics, String url) throws Exception{ synthetics.executeStep(stepName,()->{ URL obj=new URL(url); HttpURLConnection con=(HttpURLConnection)obj.openConnection(); con.setRequestMethod("GET"); con.setConnectTimeout(5000); con.setReadTimeout(5000); int status=con.getResponseCode(); if(status!=200){ throw new Exception("Failed to load" + url + "status code:" + status); } return null; }).get(); } }
Mengemas proyek untuk kenari
Synthetics menerima kode untuk kenari java dalam format zip. Zip terdiri dari file kelas untuk kode kenari, toples untuk dependensi pihak ketiga dan file konfigurasi Synthetics.
Sebuah zip Synthetics Java berisi struktur umum berikut.
example-canary └ lib | └ //third party dependency jars └ java-canary.jar └ synthetics.json
Untuk membangun zip ini dari struktur proyek di atas, Anda dapat menggunakan gradle (build.gradle) atau maven (pom.xml). Inilah contohnya.
plugins { id 'java' } repositories { mavenCentral() } dependencies { // Third party dependencies // example: implementation 'software.amazon.awssdk:s3:2.31.9' // Declares dependency on Synthetics interfaces for compiling only // Refer https://github.com/aws/aws-cloudwatch-synthetics-sdk-java for building from source. compileOnly 'software.amazon.synthetics:aws-cloudwatch-synthetics-sdk-java:1.0.0'} test { useJUnitPlatform() } // Build the zip to be used as Canary code. task buildZip(type: Zip) { archiveFileName.set("example-canary.zip") destinationDirectory.set(file("$buildDir")) from processResources into('lib') { from configurations.runtimeClasspath from(tasks.named("jar")) } from "src/main/java/resources/synthetics.json" doLast { println "Artifact written to: ${archiveFile.get().asFile.absolutePath}" } } java { toolchain { languageVersion = JavaLanguageVersion.of(21) } } tasks.named("build") { dependsOn "buildZip" }
Nama handler
Nama handler adalah titik masuk untuk kenari. Untuk runtime Java, handler dalam format berikut.
<<full qualified name for canary class>>::<<name of the method to start the execution from>> // for above code: canarypackage.ExampleCanary::canaryCode
CloudWatch Konfigurasi Synthetics
Anda dapat mengonfigurasi perilaku runtime Synthetics Java dengan menyediakan file konfigurasi JSON opsional bernama. synthetics.json
File ini harus dikemas dalam direktori root dari paket zip. Meskipun file konfigurasi bersifat opsional, jika Anda tidak menyediakan file konfigurasi, atau kunci konfigurasi tidak ada, CloudWatch gunakan default.
Berikut ini adalah nilai konfigurasi yang didukung, dan defaultnya.
{ "step": { "stepSuccessMetric": true, "stepDurationMetric": true, "continueOnStepFailure": false, "stepsReport": true }, "logging": { "logRequest": false, "logResponse": false }, "httpMetrics": { "metric_2xx": true, "metric_4xx": true, "metric_5xx": true, "aggregated2xxMetric": true, "aggregated4xxMetric": true, "aggregated5xxMetric": true }, "canaryMetrics": { "failedCanaryMetric": true, "aggregatedFailedCanaryMetric": true } }
Konfigurasi langkah
-
continueOnStepKegagalan — Menentukan apakah skrip harus dilanjutkan bahkan setelah langkah gagal. Default-nya adalah salah.
-
stepSuccessMetric— Menentukan apakah
SuccessPercent
metrik langkah dipancarkan.SuccessPercent
Metrik untuk langkah adalah 100 untuk lari kenari jika langkah berhasil, dan 0 jika langkah gagal. Defaultnya benar. -
stepDurationMetric— Menentukan apakah metrik Durasi langkah dipancarkan. Metrik Durasi dipancarkan sebagai durasi, dalam milidetik, dari langkah yang dijalankan. Defaultnya benar.
Konfigurasi logging
Berlaku untuk log yang dihasilkan oleh CloudWatch Synthetics. Mengontrol verbositas log permintaan dan respons.
-
LogRequest - Menentukan apakah akan log setiap permintaan di log kenari. Default-nya adalah salah.
-
LogResponse - Menentukan apakah akan log setiap respon dalam log kenari. Default-nya adalah salah.
Konfigurasi metrik HTTP
Konfigurasi untuk metrik yang terkait dengan jumlah permintaan jaringan dengan kode status HTTP yang berbeda, yang dipancarkan oleh CloudWatch Synthetics untuk kenari ini.
-
metric_2xx - Menentukan apakah akan memancarkan metrik 2xx (dengan dimensi) untuk kenari ini. CanaryName Defaultnya benar.
-
metric_4xx - Menentukan apakah akan memancarkan metrik 4xx (dengan dimensi) untuk kenari ini. CanaryName Defaultnya benar.
-
metric_5xx - Menentukan apakah akan memancarkan metrik 5xx (dengan dimensi) untuk kenari ini. CanaryName Defaultnya benar.
-
Aggregated2xxMetric - Menentukan apakah akan memancarkan metrik 2xx (tanpa dimensi) untuk kenari ini. CanaryName Defaultnya benar.
-
Aggregated4xxMetric - Menentukan apakah akan memancarkan metrik 4xx (tanpa dimensi) untuk kenari ini. CanaryName Defaultnya benar.
-
Aggregated5xxMetric - Menentukan apakah akan memancarkan metrik 5xx (tanpa dimensi) untuk kenari ini. CanaryName Defaultnya benar.
Konfigurasi metrik kenari
Konfigurasi untuk metrik lain yang dipancarkan oleh Synthetics. CloudWatch
-
failedCanaryMetricNetwork Access Analyzer Menentukan apakah akan memancarkan metrik Gagal (dengan CanaryName dimensi) untuk kenari ini. Defaultnya benar.
-
aggregatedFailedCanaryMetrik - Menentukan apakah akan memancarkan metrik Gagal (tanpa CanaryName dimensi) untuk kenari ini. Defaultnya benar.
CloudWatch Variabel lingkungan Synthetics
Anda dapat mengonfigurasi tingkat dan format logging dengan menggunakan variabel lingkungan.
Format log
Runtime CloudWatch Synthetics Java membuat CloudWatch log untuk setiap proses kenari. Log ditulis dalam format JSON untuk query yang nyaman. Secara opsional, Anda dapat mengubah format log menjadi TEXT.
-
Nama variabel lingkungan - CW_SYNTHETICS_LOG_FORMAT
-
Nilai yang didukung - JSON, TEXT
-
Standar —JSON
Tingkat log
-
Nama variabel lingkungan - CW_SYNTHETICS_LOG_LEVEL
-
Nilai yang didukung - TRACE, DEBUG, INFO, WARN, ERROR, FATAL
-
Default — INFO
Terlepas dari variabel lingkungan di atas, ada variabel lingkungan default yang ditambahkan untuk runtime Java, variabel AWS_LAMBDA-EXEC_WRAPPER
lingkungan ke fungsi Anda, dan menetapkan nilainya. /opt/synthetics-otel-instrument
Variabel lingkungan ini memodifikasi perilaku startup fungsi Anda untuk telemetri. Jika variabel lingkungan ini sudah ada, pastikan bahwa itu diatur ke nilai yang diperlukan.