Как я могу подключить Oracle DB к лямбде с помощью модуля Python oracledb?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу подключить Oracle DB к лямбде с помощью модуля Python oracledb?

Сообщение Anonymous »

Наша база данных Oracle версии 12.1 размещена на ec2 как отдельная БД. Я пытаюсь получить доступ к этому серверу из другой учетной записи. Используя модуль Python oracleDB в тонком режиме, я написал сценарий, который позволяет мне подключаться к базе данных.
Из моей локальной системы с помощью Visual Studio я могу подключиться к базе данных. Однако когда я изменяю тот же код для AWS Lambda и тестирую его, время ожидания моей лямбда-функции истекает.
Я пытался изменить настройки VPC базы данных. Я установил лямбда-функцию как часть входящего правила, а для лямбда-роли iam я предоставил «AWSLambdaVPCAccessExecutionRole».
Может ли кто-нибудь объяснить, почему это происходит и как я могу это исправить?
Вот сообщение об ошибке, которое я получаю:
{
"errorMessage": "2023-11-29T17:33:43.835Z 7bb3a696-cab2-4964-9a09-691995e136f1 Task timed out after 30.01 seconds"
}

Ниже приведена реализация кода:
import oracledb
import csv
import os
from datetime import datetime
import boto3
import json

def lambda_handler(event, context):
try:
export_to_csv("Sample")
return {"statusCode": 200, "body": json.dumps("Hello from Lambda!")}

except Exception as e:
print(f"Error: {str(e)}")
return {"statusCode": 500, "body": json.dumps(f"Error: {str(e)}")}

def export_to_csv(table_name):
try:
# Initialize Oracle client
# Oracle connection details
oracle_user = "***"
oracle_password = "****"
oracle_dsn = "****"

s3_bucket_name = "***"
s3_prefix = "****"
aws_access_key = "****"
aws_secret_key = "****"

# Initialize Oracle connection
connection = oracledb.connect(
user=oracle_user, password=oracle_password, dsn=oracle_dsn
)

# Create an S3 client
s3_client = boto3.client(
"s3", aws_access_key_id=aws_access_key, aws_secret_access_key=aws_secret_key
)

if connection:
# Query to get column names
cursor = connection.cursor()
cursor.execute(
f"SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = '{table_name}'"
)
column_names = [row[0] for row in cursor.fetchall()]

# Get current date
current_date = datetime.now().strftime("%Y%m%d_%H%M%S")

# Define CSV file path with current date in the filename
csv_file_path = f"output_{current_date}.csv"

with open(csv_file_path, "w", newline="") as csv_file:
csv_writer = csv.writer(csv_file)

csv_writer.writerow(column_names)
cursor.execute(f"SELECT * FROM {table_name} ")
data = cursor.fetchall()

# Write data rows
for row in data:
csv_writer.writerow(row)

# Upload CSV file to S3
s3_object_key = os.path.join(s3_prefix, f"output_{current_date}.csv")
s3_client.upload_file(csv_file_path, s3_bucket_name, s3_object_key)

print("Data transfer to S3 completed")

else:
raise Exception("Oracle connection failed.")

except Exception as e:
print(f"Error is {e}")
raise e


Подробнее здесь: https://stackoverflow.com/questions/775 ... hon-module
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»