Transformasi EventBridge masukan Amazon - Amazon EventBridge

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Transformasi EventBridge masukan Amazon

Anda dapat menyesuaikan teks dari suatu peristiwa sebelum EventBridge meneruskan informasi ke target aturan. Menggunakan transformator input di konsol atauAPI, Anda menentukan variabel yang menggunakan JSON jalur untuk mereferensikan nilai di sumber peristiwa asli. Acara yang diubah dikirim ke target, bukan acara asli. Namun, parameter jalur dinamis harus mereferensikan peristiwa asli, bukan peristiwa yang diubah. Anda dapat menentukan hingga 100 variabel, menetapkan setiap nilai dari masukan. Kemudian Anda dapat menggunakan variabel-variabel tersebut di Template Input sebagai <variable-name>.

Untuk tutorial tentang menggunakan pengubah masukan, lihat Tutorial: Gunakan transformator input untuk mengubah acara di EventBridge.

catatan

EventBridge tidak mendukung semua sintaks JSON Path dan mengevaluasinya saat runtime. Sintaks yang didukung meliputi:

  • notasi titik (misalnya,$.detail)

  • tanda hubung

  • menggarisbawahi

  • karakter alfanumerik

  • indeks array

  • wildcard (*)

Variabel yang telah ditetapkan

Ada variabel yang telah ditentukan sebelumnya yang dapat Anda gunakan tanpa menentukan jalur. JSON Variabel tersebut dicadangkan, dan Anda tidak dapat membuat variabel dengan nama tersebut:

  • aws.events.rule-arn— Nama Sumber Daya Amazon (ARN) dari EventBridge aturan.

  • aws.events.rule-name— Nama EventBridge aturan.

  • aws.events.event.ingestion-time— Waktu di mana acara diterima oleh EventBridge. Ini adalah stempel ISO waktu 8601. Variabel ini dihasilkan oleh EventBridge dan tidak dapat ditimpa.

  • aws.events.event— Payload acara asli sebagai JSON (tanpa detail bidang). Hanya dapat digunakan sebagai nilai untuk JSON bidang, karena isinya tidak lolos.

  • aws.events.event.json— Muatan acara asli lengkap sebagaiJSON. (dengan detail lapangan). Hanya dapat digunakan sebagai nilai untuk JSON bidang, karena isinya tidak lolos.

Contoh transformasi masukan

Berikut ini adalah contoh EC2 acara Amazon.

{ "version": "0", "id": "7bf73129-1428-4cd3-a780-95db273d1602", "detail-type": "EC2 Instance State-change Notification", "source": "aws.ec2", "account": "123456789012", "time": "2015-11-11T21:29:54Z", "region": "us-east-1", "resources": [ "arn:aws:ec2:us-east-1:123456789012:instance/i-abcd1111" ], "detail": { "instance-id": "i-0123456789", "state": "RUNNING" } }

Ketika menetapkan aturan di konsol, pilih opsi Pengubah Masukan di bawah Konfigurasi masukan. Opsi ini menampilkan dua kotak teks: satu untuk Jalur Masukan dan satu untuk Templat Masukan.

Jalur masukan

Jalur Masukan digunakan untuk menetapkan variabel. Gunakan JSON jalur untuk referensi item dalam acara Anda dan simpan nilai-nilai tersebut dalam variabel. Sebagai contoh, Anda dapat membuat Jalur Masukan untuk nilai referensi dalam peristiwa contoh dengan memasukkan hal berikut dalam kotak teks pertama. Anda juga dapat menggunakan tanda kurung dan indeks untuk mendapatkan item dari array.

catatan

EventBridge menggantikan transformator input saat runtime untuk memastikan output yang valid. JSON Karena itu, letakkan tanda kutip di sekitar variabel yang merujuk ke parameter JSON jalur, tetapi jangan letakkan tanda kutip di sekitar variabel yang merujuk ke JSON objek atau array.

{ "timestamp" : "$.time", "instance" : "$.detail.instance-id", "state" : "$.detail.state", "resource" : "$.resources[0]" }

Ini mendefinisikan empat variabel,,<timestamp>, <instance><state>, dan<resource>. Anda dapat mereferensikan variabel tersebut saat Anda membuat Templat Masukan.

catatan

Amazon CloudWatch Log dan SSM target tidak mendukung penggunaan Input dan InputPath dalam transformator inputnya.

Template masukan

Templat Masukan adalah templat untuk informasi yang ingin Anda lewatkan ke target Anda. Anda dapat membuat template yang melewati string atau JSON target. Dengan menggunakan peristiwa sebelumnya dan Jalur Masukan, contoh Templat Masukan berikut ini akan mengubah peristiwa untuk keluaran contoh sebelum merutekan ke target.

Deskripsi Templat Output
String sederhana
"instance <instance> is in <state>"
"instance i-0123456789 is in RUNNING"

String dengan tanda kutip lolos

"instance \"<instance>\" is in <state>"
"instance \"i-0123456789\" is in RUNNING"

Perhatikan bahwa ini adalah perilaku di EventBridge konsol. AWS CLI keluar dari karakter garis miring dan hasilnya adalah "instance "i-0123456789" is in RUNNING".

Sederhana JSON

{ "instance" : <instance>, "state": <state> }
{ "instance" : "i-0123456789", "state": "RUNNING" }

JSONdengan string dan variabel

{ "instance" : <instance>, "state": "<state>", "instanceStatus": "instance \"<instance>\" is in <state>" }
{ "instance" : "i-0123456789", "state": "RUNNING", "instanceStatus": "instance \"i-0123456789\" is in RUNNING" }

JSONdengan campuran variabel dan informasi statis

{ "instance" : <instance>, "state": [ 9, <state>, true ], "Transformed" : "Yes" }
{ "instance" : "i-0123456789", "state": [ 9, "RUNNING", true ], "Transformed" : "Yes" }

Termasuk variabel yang dicadangkan di JSON

{ "instance" : <instance>, "state": <state>, "ruleArn" : <aws.events.rule-arn>, "ruleName" : <aws.events.rule-name>, "originalEvent" : <aws.events.event.json> }
{ "instance" : "i-0123456789", "state": "RUNNING", "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example", "ruleName" : "example", "originalEvent" : { ... // commented for brevity } }

Termasuk variabel cadangan dalam string

"<aws.events.rule-name> triggered"
"example triggered"

Grup CloudWatch log Amazon

{ "timestamp" : <timestamp>, "message": "instance \"<instance>\" is in <state>" }
{ "timestamp" : 2015-11-11T21:29:54Z, "message": "instance "i-0123456789" is in RUNNING }

Mengubah masukan dengan menggunakan EventBridge API

Untuk informasi tentang penggunaan input EventBridge API to transform, lihat Menggunakan Input Transformer untuk mengekstrak data dari suatu peristiwa dan memasukkan data tersebut ke target.

Mengubah masukan dengan menggunakan AWS CloudFormation

Untuk informasi tentang menggunakan AWS CloudFormation untuk mengubah input, lihat AWS: :Events: InputTransformer :Rule.

Masalah Umum dengan mengubah input

Ini adalah beberapa masalah umum saat mengubah input di EventBridge:

  • Untuk String, tanda kutip diperlukan.

  • Tidak ada validasi saat membuat JSON path untuk template Anda.

  • Jika Anda menentukan variabel untuk mencocokkan JSON jalur yang tidak ada dalam acara tersebut, variabel tersebut tidak dibuat dan tidak akan muncul di output.

  • JSONproperti seperti hanya aws.events.event.json dapat digunakan sebagai nilai JSON bidang, bukan sebaris di string lain.

  • EventBridge tidak lolos dari nilai yang diekstraksi oleh Jalur Input, saat mengisi Template Input untuk target.

  • Jika JSON jalur mereferensikan JSON objek atau array, tetapi variabel direferensikan dalam string, EventBridge menghapus tanda kutip internal untuk memastikan string yang valid. Misalnya, untuk variabel yang <detail> ditunjuk$.detail, “Detail is<detail>” akan mengakibatkan EventBridge penghapusan tanda kutip dari objek.

    Oleh karena itu, jika Anda ingin menampilkan JSON objek berdasarkan variabel JSON jalur tunggal, Anda harus menempatkannya sebagai kunci. Dalam contoh ini,{"detail": <detail>}.

  • Kutipan tidak diperlukan untuk variabel yang mewakili string. Mereka diizinkan, tetapi EventBridge secara otomatis menambahkan tanda kutip ke nilai variabel string selama transformasi, untuk memastikan output transformasi validJSON. EventBridge tidak menambahkan tanda kutip ke variabel yang mewakili JSON objek atau array. Jangan menambahkan tanda kutip untuk variabel yang mewakili JSON objek atau array.

    Misalnya, template input berikut mencakup variabel yang mewakili string dan JSON objek:

    { "ruleArn" : <aws.events.rule-arn>, "ruleName" : <aws.events.rule-name>, "originalEvent" : <aws.events.event.json> }

    Menghasilkan valid JSON dengan kutipan yang tepat:

    { "ruleArn" : "arn:aws:events:us-east-2:123456789012:rule/example", "ruleName" : "example", "originalEvent" : { ... // commented for brevity } }
  • Untuk output teks (non-JSON) sebagai string multi-baris, bungkus setiap baris terpisah di template input Anda dalam tanda kutip ganda.

    Misalnya, jika Anda mencocokkan Amazon Inspector Finding event dengan pola event berikut:

    { "detail": { "severity": ["HIGH"], "status": ["ACTIVE"] }, "detail-type": ["Inspector2 Finding"], "source": ["inspector2"] }

    Dan menggunakan jalur input berikut:

    { "account": "$.detail.awsAccountId", "ami": "$.detail.resources[0].details.awsEc2Instance.imageId", "arn": "$.detail.findingArn", "description": "$.detail.description", "instance": "$.detail.resources[0].id", "platform": "$.detail.resources[0].details.awsEc2Instance.platform", "region": "$.detail.resources[0].region", "severity": "$.detail.severity", "time": "$.time", "title": "$.detail.title", "type": "$.detail.type" }

    Anda dapat menggunakan template input di bawah ini untuk menghasilkan output string multi-baris:

    "<severity> severity finding <title>" "Description: <description>" "ARN: \"<arn>\"" "Type: <type>" "AWS Account: <account>" "Region: <region>" "EC2 Instance: <instance>" "Platform: <platform>" "AMI: <ami>"