

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Automatisez l'ingestion de flux de données dans une base de données Snowflake à l'aide de Snowflake Snowpipe, Amazon S3, Amazon SNS et Amazon Data Firehose
<a name="automate-data-stream-ingestion-into-a-snowflake-database-by-using-snowflake-snowpipe-amazon-s3-amazon-sns-and-amazon-data-firehose"></a>

*Bikash Chandra Rout, Amazon Web Services*

## Résumé
<a name="automate-data-stream-ingestion-into-a-snowflake-database-by-using-snowflake-snowpipe-amazon-s3-amazon-sns-and-amazon-data-firehose-summary"></a>

Ce modèle décrit comment utiliser les services du cloud Amazon Web Services (AWS) pour traiter un flux continu de données et le charger dans une base de données Snowflake. Le modèle utilise Amazon Data Firehose pour transmettre les données à Amazon Simple Storage Service (Amazon S3), Amazon Simple Notification Service (Amazon SNS) pour envoyer des notifications lorsque de nouvelles données sont reçues, et Snowflake Snowpipe pour charger les données dans une base de données Snowflake.

En suivant ce modèle, vous pouvez disposer de données générées en continu et disponibles pour analyse en quelques secondes, éviter de multiples `COPY` commandes manuelles et bénéficier d'une prise en charge complète des données semi-structurées lors du chargement.

## Conditions préalables et limitations
<a name="automate-data-stream-ingestion-into-a-snowflake-database-by-using-snowflake-snowpipe-amazon-s3-amazon-sns-and-amazon-data-firehose-prereqs"></a>

**Conditions préalables**
+ Un actif Compte AWS.
+ Source de données qui envoie en permanence des données à un flux de diffusion Firehose.
+ Un compartiment S3 existant qui reçoit les données du flux de diffusion Firehose.
+ Un compte Snowflake actif.

**Limites**
+ Snowflake Snowpipe ne se connecte pas directement à Firehose.

## Architecture
<a name="automate-data-stream-ingestion-into-a-snowflake-database-by-using-snowflake-snowpipe-amazon-s3-amazon-sns-and-amazon-data-firehose-architecture"></a>

![\[Les données ingérées par Firehose sont transmises à Amazon S3, Amazon SNS, Snowflake Snowpipe et à la base de données Snowflake.\]](http://docs.aws.amazon.com/fr_fr/prescriptive-guidance/latest/patterns/images/pattern-img/0c6f473b-973f-4229-a12e-ef697ae9b299/images/0adee3fb-1b90-4f7d-b2d0-b3b958f62c75.png)


**Pile technologique**
+ Amazon Data Firehose
+ Amazon SNS
+ Amazon S3
+ Flocon de neige Snowpipe
+ Base de données Snowflake

## Outils
<a name="automate-data-stream-ingestion-into-a-snowflake-database-by-using-snowflake-snowpipe-amazon-s3-amazon-sns-and-amazon-data-firehose-tools"></a>
+ [Amazon Data Firehose](https://docs.aws.amazon.com/firehose/latest/dev/what-is-this-service.html) est un service entièrement géré permettant de diffuser des données de streaming en temps réel vers des destinations telles qu'Amazon S3, Amazon Redshift, OpenSearch Amazon Service, Splunk et tout point de terminaison HTTP personnalisé ou appartenant à des fournisseurs de services tiers pris en charge.
+ [Amazon Simple Storage Service (Amazon S3)](https://docs.aws.amazon.com/AmazonS3/latest/dev/Introduction.html) est un service de stockage pour Internet.
+ [Amazon Simple Notification Service (Amazon SNS)](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) coordonne et gère la mise à disposition ou l'envoi de messages à des clients ou à des points de terminaison abonnés.
+ [Snowflake](https://www.snowflake.com/) — Snowflake est un entrepôt de données analytiques fourni en tant que (SaaS). Software-as-a-Service
+ [Snowflake Snowpipe — Snowpipe](https://docs.snowflake.com/en/user-guide/data-load-snowpipe-intro.html) charge les données des fichiers dès qu'ils sont disponibles dans un stage Snowflake.

## Épopées
<a name="automate-data-stream-ingestion-into-a-snowflake-database-by-using-snowflake-snowpipe-amazon-s3-amazon-sns-and-amazon-data-firehose-epics"></a>

### Installez un Snowflake Snowpipe
<a name="set-up-a-snowflake-snowpipe"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez un fichier CSV dans Snowflake. | Connectez-vous à Snowflake et exécutez la `CREATE FILE FORMAT` commande pour créer un fichier CSV avec un délimiteur de champs spécifié. Pour plus d'informations à ce sujet et sur d'autres commandes Snowflake, consultez la section [Informations supplémentaires](#automate-data-stream-ingestion-into-a-snowflake-database-by-using-snowflake-snowpipe-amazon-s3-amazon-sns-and-amazon-data-firehose-additional). | Developer | 
| Créez une scène Snowflake externe. | Exécutez la `CREATE STAGE` commande pour créer un stage Snowflake externe qui fait référence au fichier CSV que vous avez créé précédemment. Important : vous aurez besoin de l'URL du compartiment S3, de votre clé AWS d'accès et de votre clé d'accès AWS secrète. Exécutez la `SHOW STAGES` commande pour vérifier que le stage Snowflake est créé. | Developer  | 
| Créez la table cible Snowflake. | Exécutez la `CREATE TABLE` commande pour créer la table Snowflake. | Developer | 
| Créez un tuyau. | Exécutez la `CREATE PIPE` commande ; assurez-vous qu'elle `auto_ingest=true` figure dans la commande. Exécutez la `SHOW PIPES` commande pour vérifier que le canal est créé. Copiez et enregistrez la valeur de la `notification_channel` colonne. Cette valeur sera utilisée pour configurer les notifications d'événements Amazon S3. | Developer | 

### Configuration du compartiment S3
<a name="configure-the-s3-bucket"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une politique de cycle de vie de 30 jours pour le compartiment S3. | Connectez-vous à la console Amazon S3 AWS Management Console et ouvrez-la. Choisissez le compartiment S3 qui contient les données de Firehose. Choisissez ensuite l'onglet **Gestion** dans le compartiment S3 et choisissez **Ajouter une règle de cycle de vie**. Entrez un nom pour votre règle dans la boîte de dialogue **Règle du cycle** de vie et configurez une règle de cycle de vie de 30 jours pour votre compartiment. Pour obtenir de l'aide sur ce sujet et sur d'autres articles, consultez la section [Ressources connexes](#automate-data-stream-ingestion-into-a-snowflake-database-by-using-snowflake-snowpipe-amazon-s3-amazon-sns-and-amazon-data-firehose-resources). | Administrateur système, développeur | 
| Créez une politique IAM pour le compartiment S3. | Ouvrez la console Gestion des identités et des accès AWS (IAM) et choisissez **Policies**. Sélectionnez **Créer une politique**, puis l’onglet **JSON**. Copiez et collez la politique de la section [Informations supplémentaires](#automate-data-stream-ingestion-into-a-snowflake-database-by-using-snowflake-snowpipe-amazon-s3-amazon-sns-and-amazon-data-firehose-additional) dans le champ JSON. Cette politique accordera `PutObject` des `DeleteObject` autorisations, ainsi que `GetObject``GetObjectVersion`, et `ListBucket` des autorisations. Choisissez **Réviser la politique**, entrez un nom de stratégie, puis choisissez **Créer une politique**. | Administrateur système, développeur | 
| Attribuez la politique à un rôle IAM. | Ouvrez la console IAM, sélectionnez **Rôles**, puis sélectionnez **Créer un rôle**. Choisissez **un autre compte AWS** comme entité de confiance. Entrez votre Compte AWS identifiant, puis choisissez **Exiger un identifiant externe**. Entrez un identifiant d'espace réservé que vous modifierez ultérieurement. Choisissez **Next** et attribuez la politique IAM que vous avez créée précédemment. Créez ensuite le rôle IAM. | Administrateur système, développeur | 
| Copiez le nom de ressource Amazon (ARN) pour le rôle IAM. | Ouvrez la console IAM, puis sélectionnez **Rôles**. Choisissez le rôle IAM que vous avez créé précédemment, puis copiez et stockez l'**ARN du rôle**. | Administrateur système, développeur | 

### Configurer une intégration de stockage dans Snowflake
<a name="set-up-a-storage-integration-in-snowflake"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Créez une intégration de stockage dans Snowflake. | Connectez-vous à Snowflake et exécutez la `CREATE STORAGE INTEGRATION` commande. Cela modifiera la relation de confiance, accordera l'accès à Snowflake et fournira l'identifiant externe pour votre stage Snowflake. | Administrateur système, développeur | 
| Récupérez le rôle IAM pour votre compte Snowflake. | Exécutez la `DESC INTEGRATION` commande pour récupérer l'ARN du rôle IAM.`<integration_ name>`est le nom de l'intégration de stockage Snowflake que vous avez créée précédemment. | Administrateur système, développeur | 
| Enregistrez les valeurs de deux colonnes. | Copiez et enregistrez les valeurs des `storage_aws_external_id` colonnes `storage_aws_iam_user_arn` et. | Administrateur système, développeur | 

### Autoriser Snowflake Snowpipe à accéder au compartiment S3
<a name="allow-snowflake-snowpipe-to-access-the-s3-bucket"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Modifiez la politique de rôle IAM. | Ouvrez la console IAM et choisissez **Rôles**. Choisissez le rôle IAM que vous avez créé précédemment et cliquez sur l'onglet **Relations de confiance**. Choisissez **Modifier la relation d’approbation**. Remplacez `snowflake_external_id` par la `storage_aws_external_id` valeur que vous avez copiée précédemment. Remplacez `snowflake_user_arn` par la `storage_aws_iam_user_arn` valeur que vous avez copiée précédemment. Choisissez ensuite **Mettre à jour la politique de confiance**. | Administrateur système, développeur | 

### Activer et configurer les notifications SNS pour le compartiment S3
<a name="turn-on-and-configure-sns-notifications-for-the-s3-bucket"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Activez les notifications d'événements pour le compartiment S3. | Ouvrez la console Amazon S3 et choisissez votre compartiment. Choisissez **Propriétés**, puis sous **Paramètres avancés**, sélectionnez **Événements**. Choisissez **Ajouter une notification**, puis entrez le nom de cet événement. Si vous n'entrez pas de nom, un identifiant global unique (GUID) sera utilisé. | Administrateur système, développeur | 
| Configurez les notifications Amazon SNS pour le compartiment S3. | Sous **Événements**, choisissez **ObjectCreate (Tous)**, puis choisissez **SQS Queue** dans la liste déroulante **Envoyer vers**. Dans la liste **SNS**, choisissez **Ajouter un ARN de file d'attente SQS** et collez la `notification_channel` valeur que vous avez copiée précédemment. Ensuite, choisissez **Save** (Enregistrer). | Administrateur système, développeur | 
| Abonnez la file d'attente Snowflake SQS à la rubrique SNS. | Abonnez la file d'attente Snowflake SQS à la rubrique SNS que vous avez créée. Pour obtenir de l'aide concernant cette étape, consultez la section [Ressources connexes](#automate-data-stream-ingestion-into-a-snowflake-database-by-using-snowflake-snowpipe-amazon-s3-amazon-sns-and-amazon-data-firehose-resources). | Administrateur système, développeur | 

### Vérifiez l'intégration de la scène Snowflake
<a name="check-the-snowflake-stage-integration"></a>


| Sous-tâche | Description | Compétences requises | 
| --- | --- | --- | 
| Vérifiez et testez Snowpipe. | Connectez-vous à Snowflake et ouvrez la scène Snowflake. Déposez les fichiers dans votre compartiment S3 et vérifiez si la table Snowflake les charge. Amazon S3 envoie des notifications SNS à Snowpipe lorsque de nouveaux objets apparaissent dans le compartiment S3. | Administrateur système, développeur | 

## Ressources connexes
<a name="automate-data-stream-ingestion-into-a-snowflake-database-by-using-snowflake-snowpipe-amazon-s3-amazon-sns-and-amazon-data-firehose-resources"></a>
+ [Gestion du cycle de vie de votre stockage](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-lifecycle.html)
+ [Abonnez la file d'attente Snowflake SQS à la rubrique Amazon SNS](https://docs.snowflake.com/en/user-guide/data-load-snowpipe-auto-s3.html#prerequisite-create-an-amazon-sns-topic-and-subscription)

## Informations supplémentaires
<a name="automate-data-stream-ingestion-into-a-snowflake-database-by-using-snowflake-snowpipe-amazon-s3-amazon-sns-and-amazon-data-firehose-additional"></a>

**Créez un format de fichier :**

```
CREATE FILE FORMAT <name>
TYPE = 'CSV'
FIELD_DELIMITER = '|'
SKIP_HEADER = 1;
```

**Créez une scène externe :**

```
externalStageParams (for Amazon S3) ::=
  URL = 's3://[//]'

  [ { STORAGE_INTEGRATION =  } | { CREDENTIALS = ( {  { AWS_KEY_ID = `` AWS_SECRET_KEY = `` [ AWS_TOKEN = `` ] } | AWS_ROLE = ``  } ) ) }` ]
  [ ENCRYPTION = ( [ TYPE = 'AWS_CSE' ] [ MASTER_KEY = '' ] |
                   [ TYPE = 'AWS_SSE_S3' ] |
                   [ TYPE = 'AWS_SSE_KMS' [ KMS_KEY_ID = '' ] |
                   [ TYPE = NONE ] )
```

**Créez une table :**

```
CREATE [ OR REPLACE ] [ { [ LOCAL | GLOBAL ] TEMP[ORARY] | VOLATILE } | TRANSIENT ] TABLE [ IF NOT EXISTS ]
  <table_name>
    ( <col_name> <col_type> [ { DEFAULT <expr>
                               | { AUTOINCREMENT | IDENTITY } [ ( <start_num> , <step_num> ) | START <num> INCREMENT <num> ] } ]
                                /* AUTOINCREMENT / IDENTITY supported only for numeric data types (NUMBER, INT, etc.) */
                            [ inlineConstraint ]
      [ , <col_name> <col_type> ... ]
      [ , outoflineConstraint ]
      [ , ... ] )
  [ CLUSTER BY ( <expr> [ , <expr> , ... ] ) ]
  [ STAGE_FILE_FORMAT = ( { FORMAT_NAME = '<file_format_name>'
                           | TYPE = { CSV | JSON | AVRO | ORC | PARQUET | XML } [ formatTypeOptions ] } ) ]
  [ STAGE_COPY_OPTIONS = ( copyOptions ) ]
  [ DATA_RETENTION_TIME_IN_DAYS = <num> ]
  [ COPY GRANTS ]
  [ COMMENT = '<string_literal>' ]
```

**Afficher les étapes :**

```
SHOW STAGES;
```

**Créez un tube :**

```
CREATE [ OR REPLACE ] PIPE [ IF NOT EXISTS ] 
  [ AUTO_INGEST = [ TRUE | FALSE ] ]
  [ AWS_SNS_TOPIC =  ]
  [ INTEGRATION = '' ]
  [ COMMENT = '' ]
  AS
```

**Afficher les pipes :**

```
SHOW PIPES [ LIKE '<pattern>' ]           
           [ IN { ACCOUNT | [ DATABASE ] <db_name> | [ SCHEMA ] <schema_name> } ]
```

**Créez une intégration de stockage :**

```
CREATE STORAGE INTEGRATION <integration_name>
  TYPE = EXTERNAL_STAGE
  STORAGE_PROVIDER = S3
  ENABLED = TRUE
  STORAGE_AWS_ROLE_ARN = '<iam_role>'
  STORAGE_ALLOWED_LOCATIONS = ('s3://<bucket>/<path>/', 's3://<bucket>/<path>/')
  [ STORAGE_BLOCKED_LOCATIONS = ('s3://<bucket>/<path>/', 's3://<bucket>/<path>/') ]
```

Exemple :

```
create storage integration s3_int
  type = external_stage
  storage_provider = s3
  enabled = true
  storage_aws_role_arn = 'arn:aws:iam::001234567890:role/myrole'
  storage_allowed_locations = ('s3://amzn-s3-demo-bucket1/mypath1/', 's3://amzn-s3-demo-bucket2/mypath2/')
  storage_blocked_locations = ('s3://amzn-s3-demo-bucket1/mypath1/sensitivedata/', 's3://amzn-s3-demo-bucket2/mypath2/sensitivedata/');
```

Pour plus d'informations sur cette étape, consultez la [section Configuration d'une intégration de stockage Snowflake pour accéder à Amazon S3 à](https://docs.snowflake.com/en/user-guide/data-load-s3-config-storage-integration.html) partir de la documentation Snowflake.

**Décrivez une intégration :**

```
DESC INTEGRATION <integration_name>;
```

**Politique relative aux compartiments S3 :**

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
              "s3:PutObject",
              "s3:GetObject",
              "s3:GetObjectVersion",
              "s3:DeleteObject",
              "s3:DeleteObjectVersion"
            ],
            "Resource": "arn:aws:s3::://*"
        },
        {
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": "arn:aws:s3:::",
            "Condition": {
                "StringLike": {
                    "s3:prefix": [
                        "/*"
                    ]
                }
            }
        }
    ]
}
```