UND/ODER-Logik - Amazon Simple Notification Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

UND/ODER-Logik

Sie können Vorgänge mit UND/ODER-Logik verwenden, um Nachrichtenattribute abzugleichen.

UND-Logik

Sie können die UND-Logik mit mehreren Attributnamen anwenden.

Betrachten Sie folgende Richtlinie:

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

Sie gleicht alle Nachrichtenattribute oder die Eigenschaft des Nachrichtentexts ab, bei denen der Wert customer_interests auf rugby und der Wert price_usd auf eine Zahl größer als 100 festgelegt ist.

Anmerkung

Sie können keine AND-Logik auf Werte desselben Attributs anwenden.

ODER-Logik

Sie können die ODER-Logik durch die Zuweisung mehrerer Werte zu einem Attributnamen anwenden.

Betrachten Sie folgende Richtlinie:

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

Sie gleicht alle Nachrichtenattribute ab, deren customer_interests-Wert auf rugby, football, oder baseball festgelegt ist.

OR-Operator

Sie können den "$or"-Operator verwenden, um explizit eine Filterrichtlinie zu definieren, um die OR-Beziehung zwischen mehreren Attributen in der Richtlinie auszudrücken.

Amazon SNS erkennt eine "$or"-Beziehung nur an, wenn die Richtlinie alle der folgenden Bedingungen erfüllt hat. Wenn all diese Bedingungen nicht erfüllt sind, wird "$or" wie ein regulärer Attributname behandelt, genauso wie jede andere Zeichenfolge in der Richtlinie.

  • Die Regel enthält beispielsweise ein "$or"-Feldattribut, gefolgt von einem Array, z. B. “$or” : [].

  • Das "$or"-Array enthält mindestens 2 Objekte: "$or": [{}, {}].

  • Keines der Objekte im "$or"-Array hat Feldnamen, bei denen es sich um reservierte Schlüsselwörter handelt.

Andernfalls wird "$or" wie ein normaler Attributname behandelt, genau wie andere Zeichenfolgen in der Richtlinie.

Die folgende Richtlinie wird nicht als OR-Beziehung analysiert, da Zahl und Präfix reservierte Schlüsselwörter sind.

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

Beispiele für OR-Operatoren

Standard OR:

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

Die Filterlogik für diese Richtlinie lautet:

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

Sie stimmt mit einem der beiden folgenden Nachrichtenattributsätze überein:

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

or

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

Sie stimmt auch mit einem der beiden folgenden Nachrichtentexte überein:

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

or

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

Richtlinieneinschränkungen, zu denen auch OR-Beziehungen gehören

Betrachten Sie folgende Richtlinie:

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

Die Logik dieser Richtlinie kann auch wie folgt vereinfacht werden:

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

Die Komplexitätsberechnung für Richtlinien mit OR-Beziehungen kann vereinfacht werden, indem die Summe der Kombinationskomplexitäten für jede OR-Anweisung berechnet wird.

Die Gesamtkombination wird wie folgt berechnet:

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

source hat einen Wert, metricName hat zwei Werte, metricType hat einen Wert, metricId hat zwei Werte und spaceId hat drei Werte.

Beachten Sie die folgende Richtlinie für verschachtelte Filter:

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

Die Logik dieser Richtlinie kann wie folgt vereinfacht werden:

("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")

Die Berechnung der Gesamtkombinationen ist bei nicht verschachtelten Richtlinien gleich, außer dass wir die Verschachtelungsebene des Schlüssels berücksichtigen müssen.

Die Gesamtkombination wird wie folgt berechnet:

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

metricName hat zwei Werte, namespace hat zwei Werte, scope ist ein zweistufiger verschachtelter Schlüssel mit einem Wert, source ist ein zweistufiger verschachtelter Schlüssel mit einem Wert und type ist ein zweistufiger verschachtelter Schlüssel mit einem Wert.