Stellen Sie eine BigQuery-Abfrage von Lambda aus. Es ist das Untersuchungsprotokoll. Grundsätzlich verwende ich AWS, aber ich hatte die Möglichkeit, regelmäßig auf BigQuery von GCP zu verweisen. Ich dachte, es wäre bequem, es einfach auf Lambda laufen zu lassen.
Verwenden Sie das GCP SDK von Lambdas Python. Das GCP SDK wird in der Schicht gehalten. Sie müssen die GCP-Authentifizierung auf der AWS-Seite einrichten.
Das SDK ist die Python-Clientbibliothek. https://googleapis.dev/python/bigquery/latest/generated/google.cloud.bigquery.client.Client.html
Sie haben ein AWS-Konto. Ich habe ein GCP-Konto. Sie können BigQuery über die API verwenden. Die BigQuery-Tabelle wurde erstellt. Ich habe einen AWS-Zugriffsschlüssel
Python-Code, der nur BigQuery ausführt. Lassen Sie uns dies zunächst verschieben.
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!')
}
Fügen Sie das SDK der Ebene hinzu, um "import bigquery" in Lambdas Python zu verwenden. Holen Sie es mit Pip und Reißverschluss. Es ist eine Prozedur, um Linux mit einer Spot-Instanz auf EC2 zu booten und auf S3 zu setzen. Schnell.
--Erstellen Sie Amazon Linux 2 mit einer Spot-Instanz von EC2.
Kleine Spezifikationen sind genug.
Die IAM-Rolle wird nur mit "AmazonEC2RoleforSSM" vergeben. So stellen Sie eine Verbindung mit dem Sitzungsmanager von Systems Manager her
Sicherheitsgruppen sind unbegründet.
Kein Schlüsselpaar.
Stellen Sie nach dem Start der Instanz eine Verbindung über den Systems Manager-Sitzungsmanager her.
Die Ausführungsprozedur wird beschrieben. Legen Sie für <> Ihren eigenen Wert fest.
# ec2-Werden Sie Benutzer
sudo su - ec2-user
#Rohrinstallation
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 von sdk&Reißverschluss
pip install google-cloud-bigquery -t ./python/
zip -r google-cloud-bigquery.zip python
#Hinzugefügt, da Protobuf erforderlich ist
pip install protobuf --upgrade -t ./python/
zip -r google-cloud-bigquery.zip ./python/google/protobuf
#aws cli Einstellungen
aws configure
#Stellen Sie Folgendes ein:
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
#Speichern Sie auf s3
aws s3 mb s3://<my-bucket>
aws s3 cp google-cloud-bigquery.zip s3://<my-bucket>
Nach dem Speichern des SDK in s3 können Sie die Spot-Instanz löschen.
Kehre zu Lambda zurück.
--Erstelle eine Ebene.
Die Laufzeit hat Python 3.7
und Python 3.8
hinzugefügt.
--Wählen Sie eine Ebene und drücken Sie "Ebene hinzufügen".
Wählen Sie den Namen aus "Kundenebene". Wählen Sie die von Ihnen erstellte Version aus.
Wenn Sie eine Ebene hinzufügen, können Sie die S3-Datei sicher löschen.
https://cloud.google.com/docs/authentication/production
--Erstellen Sie einen JSON-Dienstkontoschlüssel.
Klicken Sie im obigen Link auf die Seite "Wechseln Sie zur Seite" Dienstkontoschlüssel erstellen ". Die Rolle hat "BigQuery Administrator" ausgewählt.
json fügte den Text aus "Neue Datei" durch Kopieren und Einfügen hinzu. Fügen Sie die Umgebungsvariable "GOOGLE_APPLICATION_CREDENTIALS" hinzu.
Ich konnte den Test von der Lambda-Konsole aus ausführen!
Ohne Protobuf habe ich einen Fehler bekommen und war in Schwierigkeiten ... Ich habe in StackOverflow nach einem Fall gesucht und ihn gelöst.
Ich frage mich, ob das in Ordnung ist, aber ich habe es gepostet, weil ich es geschafft habe!
――Ist dies der Weg, um das SDK zu erstellen? Wo zum Reißverschluss hinzufügen
――Können Sie die GCP-Authentifizierungsdatei mehr ausblenden? In Umgebungsvariablen, KMS, Parameterspeicher usw.
Recommended Posts