[PYTHON] Exécutez BigQuery à partir de Lambda

introduction

Émettez une requête BigQuery à partir de Lambda. C'est le dossier d'enquête. J'utilise essentiellement AWS, mais j'ai eu l'occasion de me référer régulièrement à BigQuery de GCP. J'ai pensé qu'il serait pratique de l'exécuter facilement sur Lambda.

Aperçu environnemental

Utilisez le SDK GCP de Python de Lambda. Le SDK GCP est conservé dans la couche. Vous devez configurer l'authentification GCP du côté AWS.

スクリーンショット 2019-11-16 17.55.25.png

Le SDK est la bibliothèque cliente Python. https://googleapis.dev/python/bigquery/latest/generated/google.cloud.bigquery.client.Client.html

procédure

Conditions préalables

Vous avez un compte AWS. J'ai un compte GCP. Vous pouvez utiliser BigQuery à partir de l'API. La table BigQuery a été créée. J'ai une clé d'accès AWS

Créez une fonction Lambda.

Code Python qui n'exécute que BigQuery. Commençons par déplacer ceci.

import json
from google.cloud import bigquery

def lambda_handler(event, context):
    client = bigquery.Client()
    sql = """
        SELECT *
        FROM `<my-project>.<my-dataset>.<my-table>`
        LIMIT 10
    """
    
    # Run a Standard SQL query using the environment's default project
    results = client.query(sql).result()
    for row in results:
        print(row)

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

Créez un SDK GCP pour vous inscrire à la couche Lambda.

Ajoutez le SDK à la couche pour utiliser ʻimport bigquery` dans le Python de Lambda. Obtenez-le avec pip et zippez-le. C'est une procédure pour démarrer Linux avec une instance spot sur EC2 et la mettre sur S3. Rapidement.

--Une fois l'instance lancée, connectez-vous depuis le gestionnaire de session Systems Manager.

La procédure d'exécution est décrite. Pour <>, définissez votre propre valeur.

# ec2-Devenez utilisateur
sudo su - ec2-user
#installation de pip
sudo yum install python3 -y
curl -O https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py

export PATH=$PATH:/usr/local/bin
#Installation de sdk&Zippé
pip install google-cloud-bigquery -t ./python/
zip -r google-cloud-bigquery.zip python
#Ajouté car protobuf est requis
pip install protobuf --upgrade -t ./python/
zip -r google-cloud-bigquery.zip ./python/google/protobuf
#Paramètres aws cli
aws configure
#Définissez les éléments suivants:
  AWS Access Key ID [None]: <my-access-key>
  AWS Secret Access Key [None]: <my-secret-key>
  Default region name [None]: ap-northeast-1
  Default output format [None]: json
#Enregistrer en s3
aws s3 mb s3://<my-bucket>
aws s3 cp google-cloud-bigquery.zip s3://<my-bucket>

Après avoir enregistré le SDK dans s3, vous pouvez supprimer l'instance spot.

Enregistrez la bibliothèque créée dans la couche Lambda.

Retournez voir Lambda.

--Créez un calque. スクリーンショット 2019-11-24 11.18.55.png

Le runtime a ajouté Python 3.7 et Python 3.8.

--Ajoutez un calque à la fonction. スクリーンショット 2019-11-24 11.11.29.png

--Sélectionnez un calque et appuyez sur «Ajouter un calque».

Sélectionnez le nom dans "Customer's Layer". Sélectionnez la version que vous avez créée. スクリーンショット 2019-11-24 11.22.41.png

Si vous ajoutez une couche, vous pouvez supprimer en toute sécurité le fichier S3.

Obtenez le fichier de certification GCP.

https://cloud.google.com/docs/authentication/production

--Créez une clé de compte de service json.

À partir de la page «Accéder à la page Créer une clé de compte de service», cliquez sur le lien ci-dessus. J'ai sélectionné "Administrateur BigQuery" comme rôle. image.png

Enregistrez le fichier d'authentification GCP dans Lambda.

json a ajouté le texte de New File par copier-coller. Ajoutez la variable d'environnement "GOOGLE_APPLICATION_CREDENTIALS".

image.png

Essai

J'ai pu exécuter le test depuis la console Lambda!

Points obstrués

Sans protobuf, j'ai eu une erreur et j'étais en difficulté ... J'ai recherché un cas dans StackOverflow et l'ai résolu.

en conclusion

Je me demande si tout va bien, mais je l'ai posté parce que j'ai pu le faire!

―― Est-ce la manière de créer le SDK? Où ajouter au zip

――Pouvez-vous masquer davantage le fichier d'authentification GCP? Dans les variables d'environnement, KMS, magasin de paramètres, etc.

Recommended Posts

Exécutez BigQuery à partir de Lambda
Exécutez Python à partir d'Excel
Exécutez mysqlclient sur Lambda
Exécutez le script illustrator à partir de python
Interroger Athena depuis Lambda Python
lambda
[Lambda] [Python] Publier sur Twitter depuis Lambda!
Exécutez Aprili depuis Python sur Orange
Détection d'erreur Python exécutée à partir de Powershell
Exécutez des scripts Python de manière synchrone à partir de C #
Exécutez Systems Manager à partir de Lambda pour obtenir une sauvegarde d'EC2
Faites fonctionner Dynamodb depuis Lambda comme SQL
Exécutez Ansible à partir de Python à l'aide de l'API
Exécutez le script Python à partir de Cisco Memorandum_EEM
Le module ne peut pas être importé en Python sur EC2 exécuté à partir d'AWS Lambda
Exécutez Cloud Dataflow (Python) depuis AppEngine
Exécutez Keras avec le backend CNTK à partir de CentOS
4 façons de mettre à jour les différences entre les feuilles de calcul et BigQuery
Utilisez BigQuery à partir de votre bloc-notes Jupyter local
[Python] Exécutez Headless Chrome sur AWS Lambda