Spaces:
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)
            })
        }