

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Guida introduttiva: crea una regola Amazon EventBridge Event Bus
<a name="event-bus-rule-get-started"></a>

Per acquisire familiarità con EventBridge le regole e le relative funzionalità, utilizzeremo un CloudFormation modello per configurare una regola del bus degli eventi e i componenti associati, tra cui un'origine dell'evento, un modello di evento e una destinazione. Poi potremo scoprire come funzionano le regole per selezionare gli eventi che desideri.

Il modello crea una regola sul bus degli eventi predefinito. Questa regola utilizza un modello di eventi per filtrare gli eventi da uno specifico bucket Amazon S3. La regola invia gli eventi corrispondenti alla destinazione specificata, un argomento di Amazon SNS. Ogni volta che un oggetto viene creato nel bucket, la regola invia una notifica all'argomento, che quindi invia un'e-mail all'indirizzo e-mail specificato.

Le risorse distribuite sono costituite da:
+ Un bucket Amazon S3 con EventBridge notifiche abilitate a fungere da origine dell'evento.
+ Un argomento Amazon SNS e un abbonamento e-mail come destinazione per le notifiche.
+ Un ruolo di esecuzione che concede EventBridge le autorizzazioni necessarie per la pubblicazione sull'argomento Amazon SNS.
+ La regola stessa, che: 
  + Definisce un pattern di eventi che corrisponde solo `Object Created` agli eventi dello specifico bucket Amazon S3.
  + Specifica l'argomento Amazon SNS come destinazione a EventBridge cui fornire eventi corrispondenti.

Per dettagli tecnici specifici del modello, consulta. [Dettagli del modello](#event-bus-rule-get-started-template-details)

![\[Gli eventi di Amazon S3 vengono abbinati allo schema di eventi della regola e, se corrispondono, vengono inviati a un argomento SNS.\]](http://docs.aws.amazon.com/it_it/eventbridge/latest/userguide/images/rule-get-started_eventbridge_architectural.svg)


## Prima di iniziare
<a name="event-bus-rule-get-started-create-prereqs"></a>

Per ricevere eventi Amazon S3 in EventBridge, devi abilitarli EventBridge all'interno di Amazon S3. Questo argomento presuppone che sia abilitato. EventBridge Per ulteriori informazioni, consulta [Enabling EventBridge](https://docs.aws.amazon.com/AmazonS3/latest/userguide/enable-event-notifications-eventbridge.html) in the *Amazon S3 User Guide*.

## Creazione della regola utilizzando CloudFormation
<a name="event-bus-rule-get-started-create"></a>

Per creare la regola e le risorse associate, creeremo un CloudFormation modello e lo useremo per creare uno stack contenente una regola di esempio, completa di origine e destinazione.

**Importante**  
Se crei uno stack da questo modello, ti verranno addebitate le risorse Amazon utilizzate.

### Creazione del modello
<a name="event-bus-rule-get-started-file"></a>

Per prima cosa, crea il CloudFormation modello.

1. Nella sezione [Modello](#event-bus-rule-get-started-template), fai clic sull’icona di copia nella scheda **JSON** o **YAML** per copiare i contenuti del modello.

1. Copia i contenuti del modello in un nuovo file.

1. Salva il file localmente.

### Creazione dello stack
<a name="event-bus-rule-get-started-stack"></a>

Quindi, usa il modello che hai salvato per effettuare il provisioning di uno CloudFormation stack.

**Crea lo stack usando CloudFormation (console)**

1. Apri la CloudFormation console all'indirizzo [https://console.aws.amazon.com/cloudformation/](https://console.aws.amazon.com/cloudformation/).

1. Nella pagina **Stack**, scegli **Con nuove risorse (standard)** nel menu **Crea stack**.

1. Specifica il modello:

   1. In **Prerequisito**, seleziona **Scegli un modello esistente**.

   1. In **Specifica modello**, seleziona **Carica un file di modello**.

   1. Seleziona **Scegli file**, quindi passa al file del modello e selezionalo.

   1. Scegli **Next (Successivo)**.

1. Specifica i dettagli dello stack:

   1. Inserisci un nome dello stack.

   1. Per **BucketName**, inserisci un nome di bucket univoco a livello globale. I nomi dei bucket Amazon S3 devono essere univoci per tutti gli account. AWS 

   1. Per **SNSTopicDisplayName**, **SNSTopicName** e **RuleName**, accetta i valori predefiniti o inserisci i tuoi.

   1. Per **EmailAddress**, inserisci un indirizzo email valido a cui desideri ricevere le notifiche.

   1. Scegli **Next (Successivo)**.

1. Configura le opzioni dello stack:

   1. In **Opzioni di errore dello stack**, scegli **Elimina tutte le nuove risorse create**.
**Nota**  
Scegliendo questa opzione si evita di ricevere addebiti per risorse la cui policy di eliminazione specifica che devono essere mantenute anche se la creazione dello stack non riesce. Per ulteriori informazioni, consulta la pagina relativa all’[attributo `DeletionPolicy`](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-attribute-deletionpolicy.html) nella *Guida per l’utente di CloudFormation *.

   1. Accetta tutti gli altri valori predefiniti.

   1. In **Funzionalità**, seleziona la casella per confermare che CloudFormation potresti creare risorse IAM nel tuo account.

   1. Scegli **Next (Successivo)**.

1. Rivedi i dettagli dello stack e scegli **Invia**.

**Crea lo stack usando CloudFormation ()AWS CLI**

Puoi anche usare il AWS CLI per creare lo stack.
+ Utilizza il comando [https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html).
  +  Accetta i valori dei parametri predefiniti del modello, specificando il nome dello stack, l'indirizzo email e il nome del bucket. Utilizzate il `template-body` parametro per passare il contenuto del modello o `template-url` per specificare una posizione URL.

    ```
    aws cloudformation create-stack \
      --stack-name eventbridge-rule-tutorial \
      --template-body template-contents \
      --parameters \
        ParameterKey=EmailAddress,ParameterValue=your.email@example.com \
        ParameterKey=BucketName,ParameterValue=my-unique-bucket-name \
      --capabilities CAPABILITY_IAM
    ```
  + Sostituisci i valori predefiniti di uno o più parametri del modello. Esempio:

    ```
    aws cloudformation create-stack \
      --stack-name eventbridge-rule-tutorial \
      ----template-body template-contents \
      --parameters \
        ParameterKey=EmailAddress,ParameterValue=your.email@example.com \
        ParameterKey=BucketName,ParameterValue=my-custom-bucket-name \
        ParameterKey=RuleName,ParameterValue=my-custom-rule-name \
      --capabilities CAPABILITY_IAM
    ```

CloudFormation crea lo stack. Una volta completata la creazione dello stack, le relative risorse sono pronte per l’uso. Puoi utilizzare la scheda **Risorse** nella pagina dei dettagli dello stack per visualizzare le risorse che sono state fornite nel tuo account.

Dopo aver creato lo stack, riceverai un'email di conferma dell'iscrizione all'indirizzo che hai fornito. È necessario confermare l'iscrizione per ricevere le notifiche.

## Esplorazione delle funzionalità delle regole
<a name="event-bus-rule-get-started-using"></a>

Una volta creata la regola, puoi utilizzare la EventBridge console per osservare il funzionamento delle regole e testare la consegna degli eventi.

1. Aprire la EventBridge console a [https://console.aws.amazon.com/events/casa? \$1/regole](https://console.aws.amazon.com/events/home?#/rules).

1. Scegli la regola che hai creato.

   Nella pagina dei dettagli della regola, la sezione **Dettagli della regola** mostra le informazioni sulla regola, inclusi lo schema e gli obiettivi degli eventi.

### Esame dello schema degli eventi
<a name="event-bus-rule-get-started-using-pattern"></a>

Prima di testare il funzionamento della regola, esaminiamo il modello di eventi che abbiamo specificato per controllare quali eventi vengono inviati alla destinazione. La regola invierà all'obiettivo solo gli eventi che corrispondono ai criteri del pattern. In questo caso, vogliamo solo l'evento che Amazon S3 genera quando un oggetto viene creato nel nostro bucket specifico.
+ Nella pagina dei dettagli della regola, in **Schema di evento**, puoi vedere che il modello di evento seleziona solo gli eventi in cui:
  + La fonte è il servizio Amazon S3 () `aws.s3`
  + Il tipo di dettaglio è `Object Created`
  + Il nome del bucket corrisponde al nome del bucket che abbiamo creato

  ```
  {
    "source": ["aws.s3"],
    "detail-type": ["Object Created"],
    "detail": {
      "bucket": {
        "name": ["eventbridge-rule-example-source"]
      }
    }
  }
  ```

### Invio di eventi tramite la regola
<a name="event-bus-rule-get-started-using-source"></a>

Successivamente, genereremo eventi nell'origine dell'evento per verificare che la corrispondenza e la consegna delle regole funzionino correttamente. Per fare ciò, caricheremo un oggetto nel bucket S3 che abbiamo specificato come origine dell'evento.

1. Apri la console Amazon S3 all'indirizzo. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

1. Nell'elenco dei **bucket**, scegli il bucket che hai creato con il modello.

1. Scegli **Carica**.

1. Carica un file di test per generare un `Object Created` evento:

   1. Scegli **Aggiungi file** e seleziona un file dal tuo computer.

   1. Scegli **Carica**.

1. Attendi qualche istante che l'evento venga elaborato EventBridge e che la notifica venga inviata.

1. Controlla la tua e-mail per una notifica sull'evento di creazione dell'oggetto. L'e-mail conterrà dettagli sull'evento S3, incluso il nome del bucket e la chiave dell'oggetto.

### Visualizzazione delle metriche delle regole
<a name="event-bus-rule-get-started-using-metrics"></a>

Puoi visualizzare le metriche della tua regola per confermare che gli eventi vengano elaborati correttamente.

1. Nella [EventBridge console](https://console.aws.amazon.com/events/home?#/rules), scegli la tua regola.

1. Seleziona la scheda **Parametri**.

1. Puoi visualizzare metriche come:
   + **Invocazioni**: il numero di volte in cui la regola è stata attivata.
   + **TriggeredRules**: il numero di regole che sono state attivate dagli eventi corrispondenti.

## Pulizia: eliminazione delle risorse
<a name="event-bus-rule-get-started-delete"></a>

Come passaggio finale, elimineremo lo stack e le risorse in esso contenute.

**Importante**  
Ti verranno addebitate le risorse Amazon contenute nello stack per tutto il tempo in cui esiste.

1. Apri la CloudFormation console all'indirizzo. [https://console.aws.amazon.com/cloudformation/](https://console.aws.amazon.com/cloudformation/)

1. Nella pagina **Stack**, scegli lo stack creato dal modello, poi scegli **Elimina**, quindi conferma con **Elimina**.

   CloudFormation avvia l'eliminazione dello stack e di tutte le risorse che include.

## CloudFormation dettagli del modello
<a name="event-bus-rule-get-started-template-details"></a>

Questo modello crea risorse e concede autorizzazioni nel tuo account.

### Resources
<a name="event-bus-rule-get-started-template-resources"></a>

Il CloudFormation modello di questo tutorial creerà le seguenti risorse nel tuo account:

**Importante**  
Se crei uno stack da questo modello, ti verranno addebitate le risorse Amazon utilizzate.
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-s3-bucket.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-s3-bucket.html): un bucket Amazon S3 che funge da origine degli eventi per la regola, con EventBridge le notifiche abilitate.
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-sns-topic.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-sns-topic.html): un argomento di Amazon SNS che funge da destinazione per gli eventi corrispondenti alla regola.
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-sns-subscription.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-sns-subscription.html): un abbonamento e-mail all'argomento SNS.
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-role.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-iam-role.html): ruoli di esecuzione IAM che concedono le autorizzazioni al EventBridge servizio e alla funzione di pulizia Lambda.
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-events-rule.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-events-rule.html): La regola che collega gli eventi del bucket Amazon S3 all'argomento Amazon SNS.
+ [https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-lambda-function.html](https://docs.aws.amazon.com/AWSCloudFormation/latest/TemplateReference/aws-resource-lambda-function.html): Una funzione Lambda che svuota il bucket Amazon S3 quando lo stack viene eliminato, permettendo l'eliminazione pulita di tutte le risorse.

### Permissions
<a name="event-bus-rule-get-started-template-perms"></a>

Il modello include una `AWS::IAM::Role` risorsa che rappresenta un ruolo di esecuzione. Questo ruolo concede al EventBridge servizio (`events.amazonaws.com`) le seguenti autorizzazioni nel tuo account.

Le seguenti autorizzazioni vengono concesse tramite la politica gestita: `AmazonSNSFullAccess`
+ Accesso completo alle risorse e alle operazioni di Amazon SNS

## CloudFormation modello
<a name="event-bus-rule-get-started-template"></a>

Salva il seguente codice YAML come file separato da utilizzare come CloudFormation modello per questo tutorial.

------
#### [ YAML ]

```
AWSTemplateFormatVersion: '2010-09-09'
Description: '[AWSDocs] EventBridge: event-bus-rule-get-started'

Parameters:
  BucketName:
    Type: String
    Description: Name of the S3 bucket (must be globally unique)

  SNSTopicDisplayName:
    Type: String
    Description: Display name for the SNS topic
    Default: eventbridge-rule-example-target

  SNSTopicName:
    Type: String
    Description: Name for the SNS topic
    Default: eventbridge-rule-example-target

  RuleName:
    Type: String
    Description: Name for the EventBridge rule
    Default: eventbridge-rule-example

  EmailAddress:
    Type: String
    Description: Email address to receive notifications
    AllowedPattern: '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+[a-zA-Z0-9-]*(\\.[a-zA-Z0-9-]+)*$'

Resources:
  # S3 Bucket with notifications enabled
  S3Bucket:
    Type: AWS::S3::Bucket
    Properties:
      BucketName: !Ref BucketName
      NotificationConfiguration:
        EventBridgeConfiguration:
          EventBridgeEnabled: true

  # Lambda function to empty the S3 bucket before deletion
  EmptyBucketFunction:
    Type: AWS::Lambda::Function
    Properties:
      Runtime: python3.12
      Handler: index.handler
      Timeout: 60
      Role: !GetAtt EmptyBucketRole.Arn
      Code:
        ZipFile: |
          import boto3
          import cfnresponse
          def handler(event, context):
              bucket = event['ResourceProperties']['BucketName']
              if event['RequestType'] == 'Delete':
                  s3 = boto3.resource('s3')
                  bucket_resource = s3.Bucket(bucket)
                  bucket_resource.objects.all().delete()
              cfnresponse.send(event, context, cfnresponse.SUCCESS, {})

  # IAM Role for the bucket cleanup Lambda function
  EmptyBucketRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
      Policies:
        - PolicyName: EmptyBucketPolicy
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - s3:DeleteObject
                  - s3:ListBucket
                Resource:
                  - !Sub arn:aws:s3:::${BucketName}
                  - !Sub arn:aws:s3:::${BucketName}/*

  # Custom resource to trigger bucket cleanup on stack deletion
  EmptyBucketOnDelete:
    Type: Custom::EmptyBucket
    Properties:
      ServiceToken: !GetAtt EmptyBucketFunction.Arn
      BucketName: !Ref S3Bucket

  # SNS Topic for email notifications
  SNSTopic:
    Type: AWS::SNS::Topic
    Properties:
      DisplayName: !Ref SNSTopicDisplayName
      TopicName: !Ref SNSTopicName

  # SNS Subscription for email
  SNSSubscription:
    Type: AWS::SNS::Subscription
    Properties:
      Protocol: email
      Endpoint: !Ref EmailAddress
      TopicArn: !Ref SNSTopic

  # EventBridge Rule to match S3 object creation events and send them to the SNS topic
  EventBridgeRule:
    Type: AWS::Events::Rule
    Properties:
      Name: !Ref RuleName
      Description: "Rule to detect S3 object creation and send email notification"
      EventPattern:
        source:
          - aws.s3
        detail-type:
          - "Object Created"
        detail:
          bucket:
            name:
              - !Ref BucketName
      State: ENABLED
      Targets:
        - Id: SendToSNS
          Arn: !Ref SNSTopic
          RoleArn: !GetAtt EventBridgeRole.Arn

  # IAM Role for EventBridge to publish to SNS
  EventBridgeRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: events.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonSNSFullAccess

Outputs:
  BucketName:
    Description: Name of the S3 bucket
    Value: !Ref S3Bucket
  SNSTopicARN:
    Description: ARN of the SNS topic
    Value: !Ref SNSTopic
  EmailSubscription:
    Description: Email address for notifications
    Value: !Ref EmailAddress
```

------
#### [ JSON ]

```
{
  "AWSTemplateFormatVersion": "2010-09-09",
  "Description": "[AWSDocs] EventBridge: event-bus-rule-get-started",
  "Parameters": {
    "BucketName": {
      "Type": "String",
      "Description": "Name of the S3 bucket (must be globally unique)"
    },
    "SNSTopicDisplayName": {
      "Type": "String",
      "Description": "Display name for the SNS topic",
      "Default": "eventbridge-rule-example-target"
    },
    "SNSTopicName": {
      "Type": "String",
      "Description": "Name for the SNS topic",
      "Default": "eventbridge-rule-example-target"
    },
    "RuleName": {
      "Type": "String",
      "Description": "Name for the EventBridge rule",
      "Default": "eventbridge-rule-example"
    },
    "EmailAddress": {
      "Type": "String",
      "Description": "Email address to receive notifications",
      "AllowedPattern": "^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+[a-zA-Z0-9-]*(\\.[a-zA-Z0-9-]+)*$"
    }
  },
  "Resources": {
    "S3Bucket": {
      "Type": "AWS::S3::Bucket",
      "Properties": {
        "BucketName": {
          "Ref": "BucketName"
        },
        "NotificationConfiguration": {
          "EventBridgeConfiguration": {
            "EventBridgeEnabled": true
          }
        }
      }
    },
    "EmptyBucketFunction": {
      "Type": "AWS::Lambda::Function",
      "Properties": {
        "Runtime": "python3.12",
        "Handler": "index.handler",
        "Timeout": 60,
        "Role": {
          "Fn::GetAtt": ["EmptyBucketRole", "Arn"]
        },
        "Code": {
          "ZipFile": "import boto3\nimport cfnresponse\ndef handler(event, context):\n    bucket = event['ResourceProperties']['BucketName']\n    if event['RequestType'] == 'Delete':\n        s3 = boto3.resource('s3')\n        bucket_resource = s3.Bucket(bucket)\n        bucket_resource.objects.all().delete()\n    cfnresponse.send(event, context, cfnresponse.SUCCESS, {})"
        }
      }
    },
    "EmptyBucketRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": "lambda.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
            }
          ]
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
        ],
        "Policies": [
          {
            "PolicyName": "EmptyBucketPolicy",
            "PolicyDocument": {
              "Version": "2012-10-17",
              "Statement": [
                {
                  "Effect": "Allow",
                  "Action": ["s3:DeleteObject", "s3:ListBucket"],
                  "Resource": [
                    {"Fn::Sub": "arn:aws:s3:::${BucketName}"},
                    {"Fn::Sub": "arn:aws:s3:::${BucketName}/*"}
                  ]
                }
              ]
            }
          }
        ]
      }
    },
    "EmptyBucketOnDelete": {
      "Type": "Custom::EmptyBucket",
      "Properties": {
        "ServiceToken": {
          "Fn::GetAtt": ["EmptyBucketFunction", "Arn"]
        },
        "BucketName": {
          "Ref": "S3Bucket"
        }
      }
    },
    "SNSTopic": {
      "Type": "AWS::SNS::Topic",
      "Properties": {
        "DisplayName": {
          "Ref": "SNSTopicDisplayName"
        },
        "TopicName": {
          "Ref": "SNSTopicName"
        }
      }
    },
    "SNSSubscription": {
      "Type": "AWS::SNS::Subscription",
      "Properties": {
        "Protocol": "email",
        "Endpoint": {
          "Ref": "EmailAddress"
        },
        "TopicArn": {
          "Ref": "SNSTopic"
        }
      }
    },
    "EventBridgeRule": {
      "Type": "AWS::Events::Rule",
      "Properties": {
        "Name": {
          "Ref": "RuleName"
        },
        "Description": "Rule to detect S3 object creation and send email notification",
        "EventPattern": {
          "source": [
            "aws.s3"
          ],
          "detail-type": [
            "Object Created"
          ],
          "detail": {
            "bucket": {
              "name": [
                {
                  "Ref": "BucketName"
                }
              ]
            }
          }
        },
        "State": "ENABLED",
        "Targets": [
          {
            "Id": "SendToSNS",
            "Arn": {
              "Ref": "SNSTopic"
            },
            "RoleArn": {
              "Fn::GetAtt": [
                "EventBridgeRole",
                "Arn"
              ]
            }
          }
        ]
      }
    },
    "EventBridgeRole": {
      "Type": "AWS::IAM::Role",
      "Properties": {
        "AssumeRolePolicyDocument": {
          "Version": "2012-10-17",
          "Statement": [
            {
              "Effect": "Allow",
              "Principal": {
                "Service": "events.amazonaws.com"
              },
              "Action": "sts:AssumeRole"
            }
          ]
        },
        "ManagedPolicyArns": [
          "arn:aws:iam::aws:policy/AmazonSNSFullAccess"
        ]
      }
    }
  },
  "Outputs": {
    "BucketName": {
      "Description": "Name of the S3 bucket",
      "Value": {
        "Ref": "S3Bucket"
      }
    },
    "SNSTopicARN": {
      "Description": "ARN of the SNS topic",
      "Value": {
        "Ref": "SNSTopic"
      }
    },
    "EmailSubscription": {
      "Description": "Email address for notifications",
      "Value": {
        "Ref": "EmailAddress"
      }
    }
  }
}
```

------