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-variabel lingkungan
Anda dapat menggunakan variabel lingkungan saat membuat kenari. Anda dapat menulis skrip kenari tunggal dan menggunakannya dengan nilai yang berbeda untuk membuat beberapa kenari dengan cepat untuk tugas serupa.
Misalnya, misalkan organisasi Anda memiliki titik akhir sepertiprod,dev, dan pre-release untuk tahap 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 istirahat menggunakan kunci yang AWS dimiliki. Namun, CloudWatch Synthetics tidak menerapkan enkripsi sisi klien. Simpan informasi sensitif hanya setelah mengenkripsi dalam perjalanan. Untuk informasi selengkapnya, lihat Mengenkripsi variabel lingkungan dalam perjalanan. Anda juga dapat menggunakan AWS KMS kunci yang dikelola pelanggan untuk mengenkripsi variabel lingkungan kenari Anda saat istirahat. Untuk informasi selengkapnya, lihat Mengenkripsi variabel lingkungan saat istirahat 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 yang ditunjukkan di bawah ini.
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;
Script 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 menciptakan kenari yang menggunakan dua variabel lingkungan dengan kunci Environment danRegion.
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 istirahat dengan kunci yang dikelola pelanggan
Secara default, kunci yang AWS dimiliki mengenkripsi variabel lingkungan kenari saat istirahat. Anda dapat menentukan AWS KMS kunci yang dikelola pelanggan untuk mengenkripsi variabel lingkungan kenari saat istirahat. 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 Anda mengonfigurasi kunci terkelola pelanggan, verifikasi bahwa Anda memenuhi persyaratan berikut:
-
AWS KMS Kuncinya harus berupa kunci enkripsi simetris.
-
Kebijakan kunci harus diberikan
kms:CreateGrantkepada pemanggil (prinsipal IAM yang memanggil Synthetics API). -
AWS Lambda menggunakan hibah untuk mengenkripsi dan mendekripsi variabel lingkungan saat istirahat.
-
AWS KMS Kuncinya harus berada di AWS Wilayah yang sama dengan kenari.
Mengonfigurasi kunci terkelola pelanggan
Anda dapat mengonfigurasi kunci yang dikelola pelanggan saat membuat atau memperbarui kenari. Prosedur berikut menunjukkan cara mengonfigurasi enkripsi menggunakan CloudWatch konsol Amazon dan API Synthetics.
Konfigurasikan enkripsi di konsol
Untuk membuat atau mengedit kenari di CloudWatch konsol Amazon, perluas bagian Variabel lingkungan. Di bawah Enkripsi saat konfigurasi istirahat, pilih Gunakan kunci yang dikelola pelanggan dan kemudian pilih atau tentukan ARN kunci Anda AWS KMS .
Konfigurasikan enkripsi menggunakan API
Saat menelepon CreateCanary atauUpdateCanary, tentukan KmsKeyArn parameter dengan ARN kunci yang dikelola pelanggan Anda. Untuk kembali ke kunci yang AWS dikelola, 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 kunci: AWS KMS
-
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 saat istirahat. Lambda menggunakan hibah untuk menangani enkripsi dan dekripsi.
Multi-location kenari
Untuk kenari multi-lokasi, setiap lokasi replika dapat memiliki kuncinya sendiri. AWS KMS Tentukan AddReplicaLocations parameter KmsKeyArn dalam saat membuat atau memperbarui kenari. Kuncinya harus berada di Wilayah yang sama dengan replika.
Mengenkripsi variabel lingkungan dalam perjalanan
Selain enkripsi saat istirahat, Anda dapat mengenkripsi nilai variabel lingkungan individu sebelum CloudWatch Synthetics menyimpannya. CloudWatch Synthetics menyebut enkripsi ini dalam perjalanan. Saat Anda mengenkripsi nilai dalam perjalanan, konsol mengganti nilai plaintext dengan ciphertext berenkode base64 yang hanya dapat didekripsi oleh kenari Anda saat runtime.
Cara kerja enkripsi dalam perjalanan
Bila Anda memilih untuk mengenkripsi nilai variabel lingkungan dalam perjalanan:
-
Konsol memanggil
kms:Encryptdengan AWS KMS kunci yang Anda pilih untuk mengenkripsi nilai plaintext. -
Ciphertext terenkripsi (base64-encoded) menggantikan nilai plaintext dalam konfigurasi variabel lingkungan.
-
Saat runtime, skrip kenari Anda mendekripsi nilai dengan menelepon.
kms:Decrypt
Izin yang diperlukan untuk enkripsi dalam perjalanan
Anda memerlukan izin berikut untuk enkripsi dalam perjalanan:
-
Pengguna konsol atau pemanggil API —
kms:Encryptpada AWS KMS kuncinya. Anda memerlukan izin ini untuk mengenkripsi nilai sebelum menyimpannya. -
Peran eksekusi kenari —
kms:Decryptpada AWS KMS kuncinya. Fungsi Lambda kenari memerlukan izin ini untuk mendekripsi nilai saat runtime.
Berikut ini adalah contoh kebijakan IAM untuk melampirkan 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 kenari Anda, dekripsi saat runtime. Node.js Contoh berikut menunjukkan bagaimana untuk 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 layanan lain AWS .
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 skrip 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
0.0.0.0/0beralih dari 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 beralih dari gateway
0.0.0.0/0NAT. -
Buat canary Anda.