AND/ATAU logika - Amazon Simple Notification Service

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

AND/ATAU logika

Anda dapat menggunakan operasi yang menyertakan logika AND /OR untuk mencocokkan atribut pesan atau properti isi pesan.

ANDlogika

Anda dapat menerapkan AND logika menggunakan beberapa nama properti.

Pertimbangkan kebijakan berikut:

{ "customer_interests": ["rugby"], "price_usd": [{"numeric": [">", 100]}] }

Ini cocok dengan atribut pesan atau properti badan pesan dengan nilai customer_interests set ke rugby dan nilai price_usd set ke angka yang lebih besar dari 100.

catatan

Anda tidak dapat menerapkan AND logika pada nilai atribut yang sama.

Logika ATAU

Anda dapat menerapkan logika OR dengan menetapkan beberapa nilai ke nama properti.

Pertimbangkan kebijakan berikut:

{ "customer_interests": ["rugby", "football", "baseball"] }

Ini cocok dengan atribut pesan atau properti badan pesan dengan nilai customer_interests set kerugby,football, ataubaseball.

ATAU operator

Anda dapat menggunakan "$or" operator untuk secara eksplisit menentukan kebijakan filter untuk mengekspresikan hubungan OR antara beberapa atribut dalam kebijakan.

Amazon SNS hanya mengakui "$or" hubungan ketika kebijakan telah memenuhi semua persyaratan berikut. Ketika semua kondisi ini tidak terpenuhi, "$or" diperlakukan sebagai nama atribut reguler, sama seperti string lain dalam kebijakan.

  • Ada atribut "$or" bidang dalam aturan diikuti dengan array, misalnya“$or” : [].

  • Setidaknya ada 2 objek dalam "$or" array:"$or": [{}, {}].

  • Tak satu pun dari objek dalam "$or" array memiliki nama bidang yang merupakan kata kunci cadangan.

Jika "$or" tidak, diperlakukan sebagai nama atribut normal, sama seperti string lain dalam kebijakan.

Kebijakan berikut tidak diuraikan sebagai hubungan OR karena numerik dan awalan adalah kata kunci yang dicadangkan.

{ "$or": [ {"numeric" : 123}, {"prefix": "abc"} ] }

ORcontoh operator

StandarOR:

{ "source": [ "aws.cloudwatch" ], "$or": [ { "metricName": [ "CPUUtilization" ] }, { "namespace": [ "AWS/EC2" ] } ] }

Logika filter untuk kebijakan ini adalah:

"source" && ("metricName" || "namespace")

Ini cocok dengan salah satu dari set atribut pesan berikut:

"source": {"Type": "String", "Value": "aws.cloudwatch"}, "metricName": {"Type": "String", "Value": "CPUUtilization"}

atau

"source": {"Type": "String", "Value": "aws.cloudwatch"}, "namespace": {"Type": "String", "Value": "AWS/EC2"}

Ini juga cocok dengan salah satu badan pesan berikut:

{ "source": "aws.cloudwatch", "metricName": "CPUUtilization" }

atau

{ "source": "aws.cloudwatch", "namespace": "AWS/EC2" }

Kendala kebijakan yang mencakup hubungan OR

Pertimbangkan kebijakan berikut:

{ "source": [ "aws.cloudwatch" ], "$or": [ { "metricName": [ "CPUUtilization", "ReadLatency" ] }, { "metricType": [ "MetricType" ] , "$or" : [ { "metricId": [ 1234, 4321 ] }, { "spaceId": [ 1000, 2000, 3000 ] } ] } ] }

Logika untuk kebijakan ini juga dapat disederhanakan sebagai:

("source" AND "metricName") OR ("source" AND "metricType" AND "metricId") OR ("source" AND "metricType" AND "spaceId")

Perhitungan kompleksitas untuk kebijakan dengan hubungan OR dapat disederhanakan sebagai jumlah kompleksitas kombinasi untuk setiap pernyataan OR.

Kombinasi total dihitung sebagai berikut:

(source * metricName) + (source * metricType * metricId) + (source * metricType * spaceId) = (1 * 2) + (1 * 1 * 2) + (1 * 1 * 3) = 7

sourcememiliki satu nilai, metricName memiliki dua nilai, metricType memiliki satu nilai, metricId memiliki dua nilai dan spaceId memiliki tiga nilai.

Pertimbangkan kebijakan filter bersarang berikut:

{ "$or": [ { "metricName": [ "CPUUtilization", "ReadLatency" ] }, { "namespace": [ "AWS/EC2", "AWS/ES" ] } ], "detail" : { "scope" : [ "Service" ], "$or": [ { "source": [ "aws.cloudwatch" ] }, { "type": [ "CloudWatch Alarm State Change"] } ] } }

Logika untuk kebijakan ini dapat disederhanakan sebagai:

("metricName" AND ("detail"."scope" AND "detail"."source") OR ("metricName" AND ("detail"."scope" AND "detail"."type") OR ("namespace" AND ("detail"."scope" AND "detail"."source") OR ("namespace" AND ("detail"."scope" AND "detail"."type")

Perhitungan untuk kombinasi total adalah sama untuk kebijakan non-bersarang kecuali kita perlu mempertimbangkan tingkat bersarang kunci.

Kombinasi total dihitung sebagai berikut:

(2 * 2 * 2) + (2 * 2 * 2) + (2 * 2 * 2) + (2 * 2 * 2) = 32

metricNamememiliki dua nilai, namespace memiliki dua nilai, scope adalah kunci bersarang dua tingkat dengan satu nilai, source adalah kunci bersarang dua tingkat dengan satu nilai, dan type merupakan kunci bersarang dua tingkat dengan satu nilai.