Spaces:
Configuration error
Configuration error
File size: 3,086 Bytes
681c53e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
import os
import json
import boto3
from botocore.exceptions import ClientError
from pydantic import BaseModel, ValidationError
class InputData(BaseModel):
title: str
text: str
keywords: list
def get_secret():
secret_name = "secret-manager"
region_name = "us-east-1"
# Create a Secrets Manager client
session = boto3.session.Session()
client = session.client(
service_name='secretsmanager',
region_name=region_name
)
try:
get_secret_value_response = client.get_secret_value(
SecretId=secret_name
)
except ClientError as e:
# Handle the exception
raise e
secret = get_secret_value_response['SecretString']
return json.loads(secret) # Return the secret as a dictionary
def lambda_handler(event, context):
# Retrieve secrets
secrets = get_secret()
aws_access_key = secrets['AWS_ACCESS_KEY_ID']
aws_secret_access_key = secrets['AWS_SECRET_ACCESS_KEY']
# DynamoDB tablosunun adını çevresel değişkenden al
table_name = os.environ['DYNAMODB_TABLE_NAME']
# Initialize DynamoDB resource
dynamodb = boto3.resource(
'dynamodb',
aws_access_key_id=aws_access_key,
aws_secret_access_key=aws_secret_access_key,
region_name='us-east-1'
)
# DynamoDB tablosuna erişim
table = dynamodb.Table(table_name)
lambda_name = 'LAMBDA_FUNCTION_NAME'
lambda_client = boto3.client('lambda')
try:
# Body'den JSON verilerini al.
body = json.loads(event.get('body', '{}'))
# Verileri Pydantic ile doğrula.
data = InputData(**body)
# DynamoDB'ye kaydetme işlemi.
table.put_item(
Item={
'title': data.title,
'text': data.text,
'keywords': ','.join(data.keywords) # Listeyi string olarak kaydet.
}
)
# Lambda fonksiyonunu çağırma işlemi.
lambda_payload = {
'text': data.text,
'title': data.title,
'keywords': data.keywords
}
response_invoke = lambda_client.invoke(
FunctionName=lambda_name,
InvocationType='RequestResponse',
Payload=json.dumps(lambda_payload)
)
return {
'statusCode': 200,
'body': json.dumps({
'message': 'Data successfully saved!',
'data': data.dict() # Doğrulanmış verileri döndür.
})
}
except ValidationError as e:
return {
'statusCode': 400,
'body': json.dumps({
'message': 'Invalid input data',
'errors': e.errors()
})
}
except Exception as e:
return {
'statusCode': 500,
'body': json.dumps({
'message': 'Internal server error',
'error': str(e)
})
}
|