Connecter un notebook Jupyter via Python (Partie 3)

Connecter un notebook Jupyter via Python (Partie 3)


Dans deuxième partie de cette série en quatre parties, nous avons appris à créer une instance Sagemaker Notebook. Dans la troisième partie, nous apprendrons comment connecter cette instance Sagemaker Notebook à Snowflake. Si vous avez terminé les étapes décrites dans partie un et deuxième partie, l’instance Jupyter Notebook est opérationnelle et vous avez accès à votre instance Snowflake, y compris l’ensemble de données de démonstration. Vous êtes maintenant prêt à connecter les deux plates-formes.

Vous pouvez consulter toute la série de blogs ici : Partie un > Deuxième partie > Partie trois > Quatrième partie.

La console Sagemaker

La première étape consiste à ouvrir le service Jupyter en utilisant le lien sur la console Sagemaker.

x5tDi 65ydil Suu zGAalEesiwQX61FK1v3Esi5 BRpI0pkfInuw1kXu2VTahUBLfPeumS0v8pE6NUztiW0e8OO6UhyJvlU6Srlt2G5VnvlWiaEl mZFjoWGh7AhachwhZv2q8Q7ilgf9h A

Il existe deux options pour créer un bloc-notes Jupyter. Vous pouvez créer le bloc-notes à partir de zéro en suivant les instructions étape par étape ci-dessous, ou vous pouvez télécharger des exemples de blocs-notes ici. Si vous décidez de construire le bloc-notes à partir de zéro, sélectionnez le noyau conda_python3. Sinon, si vous décidez de travailler avec un échantillon préfabriqué, assurez-vous de le télécharger d’abord sur votre instance de bloc-notes Sagemaker.

9BYlWh4Lfiycd4RtKGFK g3dcSo175AtH5XBGbkeXnTSQUfBAddKAnbxCEgd vi0ihidOmwZ4K586qGFx pQdNeYiZklEbpMopdvCyFigQ6V52PZwttenJYpkTY3gdhtY6WbGMC4ffhvUynSzA

L’étape suivante consiste à se connecter à l’instance Snowflake avec vos informations d’identification.

import snowflake.connector
# Connecting to Snowflake using the default authenticator
ctx = snowflake.connector.connect(
  user=<user>,
  password=<password>,
  account=<account>
)

Ici, vous avez la possibilité de coder en dur toutes les informations d’identification et d’autres informations spécifiques, y compris les noms de compartiment S3. Cependant, pour des raisons de sécurité, il est conseillé de ne pas stocker les informations d’identification dans le bloc-notes. Une autre option consiste à entrer vos informations d’identification chaque fois que vous exécutez le bloc-notes.

Plutôt que de stocker les informations d’identification directement dans le bloc-notes, j’ai choisi de stocker une référence aux informations d’identification. Les informations d’identification réelles sont automatiquement stockées dans un système de gestion de clé/valeur sécurisé appelé Magasin de paramètres AWS Systems Manager (SSM).

Avec la plupart des systèmes AWS, la première étape nécessite la configuration d’autorisations pour SSM via AWS IAM. Veuillez demander à votre administrateur de sécurité AWS de créer une autre stratégie avec les actions suivantes sur KMS et SSM avec les éléments suivants :

En adhérant au principe des meilleures pratiques des autorisations minimales, je recommande de limiter l’utilisation du « Actions par ressource ». Assurez-vous également de changer la région et identifiant de compte dans le segment de code indiqué ci-dessus ou, alternativement, accordez l’accès à toutes les ressources (c’est-à-dire, « * »).

Dans le segment de code ci-dessus, j’ai créé un nom racine de « FLOCON DE NEIGE”. Ceci n’est qu’un exemple. Vous êtes libre de créer votre propre convention de nommage unique.

Ensuite, vérifiez les autorisations pour votre connexion. En supposant que la nouvelle politique a été appelée SagemakerCredentialsPolicyles autorisations pour votre connexion doivent ressembler à l’exemple ci-dessous :

hQXr9R80oWW KRQEikmLLvMnCdmsNOThUT7DG2HSnfyWradNKAviQSks rrHkSIhytEETNW1VT HD JEHNU7MBluSEeosKFlD4bjEG1PHdnNxr kDhrDLr2o1xkFtBs4dLIpk PshjhWeBy vw

Avec SagemakerCredentialsPolicy en place, vous êtes prêt à commencer à configurer tous vos secrets (c’est-à-dire, les informations d’identification) dans SSM. Assurez-vous de prendre le même espace de noms que celui que vous avez utilisé pour configurer la stratégie d’informations d’identification et de les appliquer aux préfixes de vos secrets.

vUKtZfal7rmq42dUi2asI15zbj KJjGup2QANkO9Gwv5tJToQqtPYTvYObNI8yGryDZcKeMCCRUPcATMn3FZ40ldzQ902 fuuB7Ve zG2moIvyRr5uSz jonYiuxT85yn2Y62 W8Uv1tgPjh8w

Après avoir configuré vos paires clé/valeur dans SSM, utilisez l’étape suivante pour lire les paires clé/valeur dans votre bloc-notes Jupyter.

import boto3

params=['/SNOWFLAKE/URL','/SNOWFLAKE/ACCOUNT_ID'
        ,'/SNOWFLAKE/USER_ID','/SNOWFLAKE/PASSWORD'
        ,'/SNOWFLAKE/DATABASE','/SNOWFLAKE/SCHEMA'
        ,'/SNOWFLAKE/WAREHOUSE','/SNOWFLAKE/BUCKET'
        ,'/SNOWFLAKE/PREFIX']
region='us-east-1'

def get_credentials(params):
   ssm = boto3.client('ssm',region)
   response = ssm.get_parameters(
      Names=params,
      WithDecryption=True
   )
   #Build dict of credentials
   param_values={k['Name']:k['Value'] for k in  response['Parameters']}
   return param_values

param_values=get_credentials(params)

Au lieu de coder en dur les informations d’identification, vous pouvez référencer des paires clé/valeur via le variable param_values. En plus des identifiants (identifiant_compte, identifiant_utilisateur, mot de passe)j’ai également stocké l’entrepôt, la base de données et le schéma.

import snowflake.connector
# Connecting to Snowflake using the default authenticator
ctx = snowflake.connector.connect(
  user=param_values['/SNOWFLAKE/USER_ID'],
  password=param_values['/SNOWFLAKE/PASSWORD'],
  account=param_values['/SNOWFLAKE/ACCOUNT_ID'],
  warehouse=param_values['/SNOWFLAKE/WAREHOUSE'],
  database=param_values['/SNOWFLAKE/DATABASE'],
  schema=param_values['/SNOWFLAKE/SCHEMA']

Vous êtes maintenant prêt à lire les données de Snowflake. Pour illustrer les avantages de l’utilisation des données dans Snowflake, nous allons lire des données semi-structurées de la base de données que j’ai nommée « SNOWFLAKE_SAMPLE_DATABASE ».

Lorsque les données sont stockées dans Snowflake, vous pouvez utiliser l’analyseur Snowflake JSON et le moteur SQL pour interroger, transformer, convertir et filtrer facilement les données JSON avant qu’elles n’atteignent le bloc-notes Jupyter.

À partir des documents JSON stockés dans MÉTÉO_14_TOTALl’étape suivante affiche les valeurs de température minimale et maximale, une date et un horodatage, ainsi que les coordonnées de latitude/longitude pour la ville de New York.

cs=ctx.cursor()
allrows=cs.execute( 
"select (V:main.temp_max - 273.15) * 1.8000 + 32.00 as temp_max_far, " +
"       (V:main.temp_min - 273.15) * 1.8000 + 32.00 as temp_min_far, " +
"       cast(V:time as timestamp) time, " +
"       V:city.coord.lat lat, " +
"       V:city.coord.lon lon " +
"from snowflake_sample_data.weather.weather_14_total " +
"where v:city.name="New York" " +
"and   v:city.country = 'US' ").fetchall()

La dernière étape convertit l’ensemble de résultats en un Pandas DataFrame, qui convient aux algorithmes d’apprentissage automatique.

import pandas as pd                               # For munging tabular data

data = pd.DataFrame(allrows)
data.columns=['temp_max_far','temp_min_far','time','lat','lon']
pd.set_option('display.max_columns', 500)     # Make sure we can see all of the columns
pd.set_option('display.max_rows', 10)         # Keep the output on one page
Data
FLb7rCOU2gRrEslaeRW2aDXX3yay95DGzfV5IDX8dsmfwkVmAhpiSQTV6fF4m8kpyX0PwhFPmE8w l IxTWQzlnU3qAn7n3 7kwocgjeGfCuIYDVFOOpc3H9N5jP758O3Xe NmO8oQkCVUutjg

Conclusion

Maintenant que nous avons connecté un Jupyter Notebook dans Sagemaker aux données dans Snowflake à l’aide du connecteur Snowflake pour Python, nous sommes prêts pour l’étape finale : connecter Sagemaker et un Jupyter Notebook à la fois à une instance Spark locale et à un EMR multinœud. Grappe d’étincelles. J’expliquerai comment accomplir cette connexion dans le quatrième et dernier volet de cette série – Connecter un notebook Jupyter à Snowflake via Spark.

Vous pouvez consulter toute la série de blogs ici : Pun art > Deuxième partie > Partie trois > Quatrième partie.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.