Menulis skrip kenari menggunakan runtime Java - Amazon CloudWatch

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

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.

Untuk informasi tentang dependensi waktu kompilasi atau antarmuka untuk pustaka Synthetics, lihat README di bawah -java. aws-cloudwatch-synthetics-sdk

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