Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Fitur kenari umum
Anda dapat menggunakan fitur-fitur berikut dengan semua runtime kenari.
Variabel lingkungan
Anda dapat menggunakan variabel lingkungan saat membuat burung kenari. Anda dapat menulis skrip kenari tunggal dan menggunakannya dengan nilai yang berbeda untuk membuat beberapa kenari dengan cepat untuk tugas serupa.
Misalnya, organisasi Anda memiliki titik akhir sepertiprod,dev, dan pre-release untuk tahapan pengembangan perangkat lunak yang berbeda. Anda harus membuat kenari untuk menguji setiap titik akhir. Anda dapat menulis skrip kenari tunggal yang menguji perangkat lunak Anda. Kemudian tentukan nilai variabel lingkungan titik akhir yang berbeda saat Anda membuat masing-masing dari tiga kenari. Saat Anda membuat kenari, tentukan skrip dan nilai variabel lingkungan.
Nama-nama variabel lingkungan dapat memuat huruf, angka, dan karakter garis bawah. Nama variavel harus dimulai dengan sebuah huruf dan setidaknya dua karakter. Ukuran total variabel lingkungan Anda tidak dapat lebih dari 4 KB. Anda tidak dapat menentukan variabel lingkungan yang dicadangkan Lambda sebagai nama variabel lingkungan Anda. Untuk informasi selengkapnya tentang variabel lingkungan yang dicadangkan, silakan lihat Variabel lingkungan runtime.
Variabel lingkungan tidak dienkripsi sisi klien
Secara default, AWS mengenkripsi kunci variabel lingkungan dan nilai saat diam menggunakan kunci yang AWS dimiliki. Namun, CloudWatch Synthetics tidak menerapkan enkripsi sisi klien. Simpan informasi sensitif hanya setelah mengenkripsi saat transit. Untuk informasi selengkapnya, lihat Mengenkripsi variabel lingkungan dalam transit. Anda juga dapat menggunakan AWS KMS kunci yang dikelola pelanggan untuk mengenkripsi variabel lingkungan kenari Anda saat diam. Untuk informasi selengkapnya, lihat Mengenkripsi variabel lingkungan saat diam dengan kunci yang dikelola pelanggan.
Contoh skrip berikut menggunakan dua variabel lingkungan. Skrip ini adalah untuk canary yang memeriksa apakah sebuah halaman web tersedia. Ini menggunakan variabel lingkungan untuk membuat parameter URL yang diperiksa dan tingkat log CloudWatch Synthetics yang digunakannya.
Cuplikan berikut adalah bagian dari skrip lengkap berikut.
Fungsi berikut menetapkan LogLevel ke nilai variabel lingkungan LOG_LEVEL.
synthetics.setLogLevel(process.env.LOG_LEVEL);
Fungsi ini menetapkan URL ke nilai variabel lingkungan URL.
const URL = process.env.URL;
Skrip lengkap berikut menunjukkan kedua variabel lingkungan. Ketika Anda membuat canary menggunakan skrip ini, Anda menentukan nilai untuk variabel lingkungan LOG_LEVEL dan URL.
var synthetics = require('@aws/synthetics-puppeteer'); const log = require('@aws/synthetics-logger'); const pageLoadEnvironmentVariable = async function () { // Setting the log level (0-3) synthetics.setLogLevel(process.env.LOG_LEVEL); // INSERT URL here const URL = process.env.URL; let page = await synthetics.getPage(); //You can customize the wait condition here. For instance, //using 'networkidle2' may be less restrictive. const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000}); if (!response) { throw "Failed to load page!"; } //Wait for page to render. //Increase or decrease wait time based on endpoint being monitored. await page.waitFor(15000); await synthetics.takeScreenshot('loaded', 'loaded'); let pageTitle = await page.title(); log.info('Page title: ' + pageTitle); log.debug('Environment variable:' + process.env.URL); //If the response status code is not a 2xx success code if (response.status() < 200 || response.status() > 299) { throw "Failed to load page!"; } }; exports.handler = async () => { return await pageLoadEnvironmentVariable(); };
Meneruskan variabel lingkungan ke script Anda
Untuk meneruskan variabel lingkungan ke skrip Anda ketika Anda membuat canary di konsol, tentukan kunci dan nilai-nilai variabel lingkungan di bagian Variabel lingkungan pada konsol. Untuk informasi selengkapnya, lihat Membuat canary.
Untuk meneruskan variabel lingkungan melalui API atau AWS CLI, gunakan EnvironmentVariables parameter di RunConfig bagian. Berikut ini adalah contoh AWS CLI perintah yang membuat kenari yang menggunakan dua variabel lingkungan dengan kunci Environment danRegion.
Untuk skema lengkap RunConfig parameter termasukEnvironmentVariables, lihat CanaryRunConfigInput di Refer ensi API Amazon CloudWatch Synthetics.
aws synthetics create-canary --cli-input-json '{ "Name": "nameofCanary", "ExecutionRoleArn": "roleArn", "ArtifactS3Location": "s3://amzn-s3-demo-bucket-123456789012-us-west-2", "Schedule": { "Expression": "rate(0 minute)", "DurationInSeconds": 604800 }, "Code": { "S3Bucket": "canarycreation", "S3Key": "cwsyn-mycanaryheartbeat-12345678-d1bd-1234-abcd-123456789012-12345678-6a1f-47c3-b291-123456789012.zip", "Handler": "pageLoadBlueprint.handler" }, "RunConfig": { "TimeoutInSeconds": 60, "EnvironmentVariables": { "Environment": "Production", "Region": "us-west-1" } }, "SuccessRetentionPeriodInDays": 13, "FailureRetentionPeriodInDays": 13, "RuntimeVersion": "syn-nodejs-2.0" }'
Mengenkripsi variabel lingkungan saat diam dengan kunci yang dikelola pelanggan
Secara default, kunci yang AWS dimiliki mengenkripsi variabel lingkungan kenari saat diam. Anda dapat menentukan AWS KMS kunci yang dikelola pelanggan untuk mengenkripsi variabel lingkungan kenari saat diam. Dengan kunci yang dikelola pelanggan, Anda memiliki kontrol penuh atas enkripsi data konfigurasi sensitif. Bagian berikut menjelaskan persyaratan, langkah konfigurasi, dan izin untuk menggunakan kunci yang dikelola pelanggan.
Persyaratan
Sebelum mengonfigurasi kunci yang dikelola pelanggan, verifikasi bahwa Anda memenuhi persyaratan berikut:
-
Kun AWS KMS cinya harus berupa kunci enkripsi simetris.
-
Kebijakan kunci harus diberikan
kms:CreateGrantkepada pemanggil (kepala sekolah IAM yang memanggil Synthetics API). -
AWS Lambda menggunakan hibah untuk mengenkripsi dan mendekripsi variabel lingkungan saat diam.
-
Kun AWS KMS cinya harus berada di Wil AWS ayah yang sama dengan kenari.
Mengkonfigurasi kunci yang dikelola pelanggan
Anda dapat mengonfigurasi kunci yang dikelola pelanggan saat membuat atau memperbarui kenari. Prosedur berikut menunjukkan cara mengonfigurasi enkripsi menggunakan CloudWatch konsol Amazon dan Synthetics API.
Konfigurasikan enkripsi di konsol
Untuk membuat atau mengedit kenari di CloudWatch konsol Amazon, perluas bagian variabel lingkungan. Di bawah konfigurasi Enkripsi saat istirahat, pilih Gunakan kunci yang dikelola pelanggan dan kemudian pilih atau tentukan ARN AWS KMS kunci Anda.
Konfigurasikan enkripsi menggunakan API
Saat menelep CreateCanary on atauUpdateCanary, tent KmsKeyArn ukan parameter dengan ARN kunci yang dikelola pelanggan Anda. Untuk kembali ke kunci ter AWS kelola, atur KmsKeyArn ke string kosong.
Contoh: CreateCanary permintaan dengan kunci yang dikelola pelanggan
{ "Name": "my-canary-EXAMPLE", "KmsKeyArn": "arn:aws:kms:us-east-1:111122223333:key/a1b2c3d4-e5f6-7890-abcd-EXAMPLE11111", "RunConfig": { "EnvironmentVariables": { "SECRET_KEY": "my-secret-value-EXAMPLE" } } }
Izin yang diperlukan untuk enkripsi saat istirahat
Jika Anda membuat atau memperbarui kenari, Anda harus memiliki izin berikut pada AWS KMS kunci:
-
kms:CreateGrant,kms:Encrypt—Diperlukan untuk mengonfigurasi kunci yang dikelola pelanggan untuk kenari. -
kms:Decrypt—Diperlukan untuk melihat dan mengelola variabel lingkungan yang dienkripsi dengan kunci yang dikelola pelanggan. -
kms:DescribeKey—Diperlukan untuk memvalidasi kunci.
Peran eksekusi kenari tidak memerlukan AWS KMS izin untuk enkripsi diam. Lambda menggunakan hibah untuk menangani enkripsi dan dekripsi.
Multi-location burung kenari
Untuk burung kenari multi-lokasi, setiap lokasi replika dapat memiliki kuncinya sendiri AWS KMS . Tentukan KmsKeyArn AddReplicaLocations parameter saat membuat atau memperbarui kenari. Kunci harus berada di Wilayah yang sama dengan replika.
Mengenkripsi variabel lingkungan dalam transit
Selain enkripsi saat diam, Anda dapat mengenkripsi nilai variabel lingkungan individu sebelum CloudWatch Synthetics menyimpannya. CloudWatch Synthetics menyebut enkripsi ini dalam transit. Saat Anda mengenkripsi nilai dalam transit, konsol mengganti nilai plaintext dengan ciphertext yang dikodekan base64 yang hanya dapat didekripsi oleh burung canary Anda saat runtime.
Cara kerja enkripsi dalam transit
Saat Anda memilih untuk mengenkripsi nilai variabel lingkungan dalam transit:
-
Konsol memanggil
kms:Encryptdengan AWS KMS kunci yang Anda pilih untuk mengenkripsi nilai plaintext. -
Ciphertext terenkripsi (dikodekan base64) menggantikan nilai plaintext dalam konfigurasi variabel lingkungan.
-
Saat runtime, skrip kenari Anda mendekripsi nilai dengan memanggil
kms:Decrypt.
Izin yang diperlukan untuk enkripsi dalam transit
Anda memerlukan izin berikut untuk enkripsi saat transit:
-
Pengguna konsol atau pemanggil API -
kms:Encryptpada AWS KMS kunci. Anda memerlukan izin ini untuk mengenkripsi nilai sebelum menyimpannya. -
Peran eksekusi Canary —
kms:Decryptpada kun AWS KMS cinya. Fungsi Lambda burung kenari memerlukan izin ini untuk mendekripsi nilai saat runtime.
Berikut ini adalah contoh kebijakan IAM untuk dilampirkan ke peran eksekusi kenari:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-1:111122223333:key/a1b2c3d4-e5f6-7890-abcd-EXAMPLE11111" } ] }
Mendekripsi nilai dalam skrip kenari Anda
Untuk menggunakan variabel lingkungan terenkripsi dalam skrip canary Anda, dekripsi saat runtime. Node.js Contoh berikut menunjukkan cara mendekripsi variabel lingkungan:
const { KMSClient, DecryptCommand } = require('@aws-sdk/client-kms'); const client = new KMSClient({ region: process.env.AWS_REGION }); async function decryptEnvVar(name) { const encrypted = process.env[name]; const req = { CiphertextBlob: Buffer.from(encrypted, 'base64'), }; const command = new DecryptCommand(req); const response = await client.send(command); return new TextDecoder().decode(response.Plaintext); } // Usage const mySecret = await decryptEnvVar('MY_CONFIG_VAR');
Mengintegrasikan kenari Anda dengan yang lain AWS layanan
Anda dapat menggunakan pustaka AWS SDK di kenari Anda untuk berintegrasi dengan AWS layanan lain.
Untuk melakukannya, tambahkan kode berikut ke kenari Anda. Dalam contoh-contoh ini, kenari terintegrasi dengan AWS Secrets Manager.
-
Impor AWS SDK.
const AWS = require('aws-sdk'); -
Buat klien untuk AWS layanan yang Anda integrasikan.
const secretsManager = new AWS.SecretsManager(); -
Gunakan klien untuk melakukan panggilan API ke layanan tersebut.
var params = { SecretId: secretName }; return await secretsManager.getSecretValue(params).promise();
Cuplikan kode script canary berikut menunjukkan cara mengintegrasikan dengan Secrets Manager secara lebih rinci.
var synthetics = require('@aws/synthetics-puppeteer'); const log = require('@aws/synthetics-logger'); const AWS = require('aws-sdk'); const secretsManager = new AWS.SecretsManager(); const getSecrets = async (secretName) => { var params = { SecretId: secretName }; return await secretsManager.getSecretValue(params).promise(); } const secretsExample = async function () { let URL = "<URL>"; let page = await synthetics.getPage(); log.info(`Navigating to URL: ${URL}`); const response = await page.goto(URL, {waitUntil: 'domcontentloaded', timeout: 30000}); // Fetch secrets let secrets = await getSecrets("secretname") /** * Use secrets to login. * * Assuming secrets are stored in a JSON format like: * { * "username": "<USERNAME>", * "password": "<PASSWORD>" * } **/ let secretsObj = JSON.parse(secrets.SecretString); await synthetics.executeStep('login', async function () { await page.type(">USERNAME-INPUT-SELECTOR<", secretsObj.username); await page.type(">PASSWORD-INPUT-SELECTOR<", secretsObj.password); await Promise.all([ page.waitForNavigation({ timeout: 30000 }), await page.click(">SUBMIT-BUTTON-SELECTOR<") ]); }); // Verify login was successful await synthetics.executeStep('verify', async function () { await page.waitForXPath(">SELECTOR<", { timeout: 30000 }); }); }; exports.handler = async () => { return await secretsExample(); };
Menyempurnakan canary Anda untuk menggunakan alamat IP statis
Anda dapat menyiapkan canary sehingga menggunakan alamat IP statis.
Untuk memaksa canary menggunakan alamat IP statis
-
Buat VPC baru. Untuk informasi selengkapnya, lihat Menggunakan DNS dengan VPC Anda.
-
Membuat gateway internet baru. Untuk informasi selengkapnya, silakan lihat Menambahkan gateway internet ke VPC Anda.
-
Buat subnet publik di dalam VPC Anda yang baru.
-
Tambahkan tabel rute baru ke VPC.
-
Tambahkan rute di tabel rute baru yang beralih dari
0.0.0.0/0ke gateway internet. -
Kaitkan tabel rute baru dengan subnet publik.
-
Buat alamat IP elastis. Untuk informasi selengkapnya, lihat Alamat IP elastis.
-
Buat gateway NAT baru dan tetapkan ke subnet publik dan alamat IP elastis.
-
Buat subnet privat di dalam VPC.
-
Tambahkan rute ke tabel rute default VPC yang
0.0.0.0/0beralih dari gateway NAT. -
Buat canary Anda.