É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.
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.
Le SDK est la bibliothèque cliente Python. https://googleapis.dev/python/bigquery/latest/generated/google.cloud.bigquery.client.Client.html
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
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!')
}
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.
Retournez voir Lambda.
--Créez un calque.
Le runtime a ajouté Python 3.7
et Python 3.8
.
--Ajoutez un calque à la fonction.
--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.
Si vous ajoutez une couche, vous pouvez supprimer en toute sécurité le fichier S3.
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.
json a ajouté le texte de New File
par copier-coller.
Ajoutez la variable d'environnement "GOOGLE_APPLICATION_CREDENTIALS".
J'ai pu exécuter le test depuis la console Lambda!
Sans protobuf, j'ai eu une erreur et j'étais en difficulté ... J'ai recherché un cas dans StackOverflow et l'ai résolu.
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