

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

# Logika DAN/ATAU
<a name="and-or-logic"></a>

Gunakan AND/OR logika 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
<a name="and-logic"></a>

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
<a name="or-logic"></a>

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 ke`rugby`,`football`, *atau*`baseball`.

## ATAU operator
<a name="or-operator"></a>

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**

Standar`OR`:

```
{
  "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`
<a name="or-operator-constraints"></a>

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.