Podejście jest takie, jak podano powyżej, ma wyzwalacz zdarzenia S3 i nasłuchiwanie zadania lambda w lokalizacji wiadra/obiektu s3. Jak tylko plik zostanie przesłany do lokalizacji s3, zadanie lambda zostanie uruchomione, aw lambdzie można skonfigurować wywołanie zadania AWS Glue. To jest dokładnie to, co zrobiliśmy i pomyślnie przeszliśmy na żywo. Lambda ma żywotność 15 minut, a uruchomienie/rozpoczęcie zadania klejenia powinno zająć mniej minuty.
Poniżej znajdziesz przykładowe źródło w celach informacyjnych.
from __future__ import print_function
import json
import boto3
import time
import urllib
print('Loading function')
s3 = boto3.client('s3')
glue = boto3.client('glue')
def lambda_handler(event, context):
gluejobname="your-glue-job-name here"
try:
runId = glue.start_job_run(JobName=gluejobname)
status = glue.get_job_run(JobName=gluejobname, RunId=runId['JobRunId'])
print("Job Status : ", status['JobRun']['JobRunState'])
except Exception as e:
print(e)
print('Error getting object {} from bucket {}. Make sure they exist '
'and your bucket is in the same region as this '
'function.'.format(source_bucket, source_bucket))
raise e
Aby utworzyć funkcję Lambda, przejdź do AWS Lambdra->Create a new function from Scratch->Select S3 for event, a następnie skonfiguruj lokalizacje wiader S3, prefiksy zgodnie z wymaganiami. Następnie skopiuj, wklej powyższy przykładowy kod, obszar kodu wbudowanego i skonfiguruj nazwę zadania klejenia zgodnie z potrzebami. Upewnij się, że masz wszystkie wymagane role/ustawienia dostępu do uprawnień.
Zadanie klejenia powinno mieć możliwość połączenia się z twoją Aurora, a następnie możesz użyć polecenia "LOAD FROM S3....." dostarczonego przez Aurorę. Upewnij się, że wszystkie ustawienia/konfiguracje grupy parametrów zostały wykonane zgodnie z potrzebami.
Daj mi znać, jeśli wystąpią jakiekolwiek problemy.
AKTUALIZACJA:PRZYKŁADOWY fragment kodu dla LOAD FROM S3:
conn = mysql.connector.connect(host=url, user=uname, password=pwd, database=dbase)
cur = conn.cursor()
cur, conn = connect()
createStgTable1 = "DROP TABLE IF EXISTS mydb.STG_TABLE;"
createStgTable2 = "CREATE TABLE mydb.STG_TABLE(COL1 VARCHAR(50) NOT NULL, COL2 VARCHAR(50), COL3 VARCHAR(50), COL4 CHAR(1) NOT NULL);"
loadQry = "LOAD DATA FROM S3 PREFIX 's3://<bucketname>/folder' REPLACE INTO TABLE mydb.STG_TABLE FIELDS TERMINATED BY '|' LINES TERMINATED BY '\n' IGNORE 1 LINES (@var1, @var2, @var3, @var4) SET col1= @var1, col2= @var2, col3= @var3, [email protected];"
cur.execute(createStgTable1)
cur.execute(createStgTable2)
cur.execute(loadQry)
conn.commit()
conn.close()