Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Gunakan logika DAN/ATAU dalam kebijakan filter untuk mencocokkan atribut pesan atau properti isi pesan di Amazon SNS. Ini memungkinkan penyaringan pesan yang lebih tepat dan fleksibel.
Logika DAN
Anda dapat menerapkan logika AND 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 logika AND ke 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 mengenali "$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"} ]
}
OR
contoh 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
source
memiliki 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
metricName
memiliki 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.