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. Dengan menggunakan pengubah masukan di konsol atau API, Anda menentukan variabel yang menggunakan jalur JSON untuk nilai referensi dalam sumber peristiwa asli. Peristiwa 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 tersebut di Templat Masukan sebagai <nama-variabel>.

Untuk tutorial tentang menggunakan pengubah masukan, lihat Tutorial: Gunakan transformator input untuk menyesuaikan apa yang EventBridge lolos ke target peristiwa.

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

Terdapat variabel yang telah ditetapkan 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 aturan tersebut. EventBridge

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

  • aws.events.event.ingestion-time— Waktu di mana acara diterima oleh EventBridge. Ini adalah stempel waktu ISO 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 bidang JSON, karena isinya tidak lolos.

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

Contoh transformasi masukan

Berikut ini adalah peristiwa Amazon EC2 contoh.

{ "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 digunakan untuk menetapkan variabel. Gunakan jalur JSON untuk item referensi dalam peristiwa Anda dan menyimpan 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 JSON yang valid. Karena itu, letakkan tanda kutip di sekitar variabel yang merujuk ke parameter jalur JSON, tetapi jangan beri tanda kutip di sekitar variabel yang merujuk ke objek atau array JSON.

{ "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.

Templat Masukan adalah templat untuk informasi yang ingin Anda lewatkan ke target Anda. Anda dapat membuat templat yang melewati baik string maupun JSON ke 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".

JSON sederhana

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

JSON dengan 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" }

JSON dengan campuran variabel dan informasi statis

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

Termasuk variabel cadangan 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 input dengan menggunakan API EventBridge

Untuk informasi tentang penggunaan EventBridge API untuk mengubah input, 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::Rule InputTransformer.

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 jalur JSON untuk templat Anda.

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

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

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

  • Jika jalur JSON mereferensikan objek atau array JSON, 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 objek JSON berdasarkan variabel jalur JSON 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 adalah JSON yang valid. EventBridge tidak menambahkan tanda kutip ke variabel yang mewakili objek atau array JSON. Jangan menambahkan tanda kutip untuk variabel yang mewakili objek JSON atau array.

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

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

    Menghasilkan JSON yang valid 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>"