AWS Prendere dati tramite una lambda da dynamoDB

di il
1 risposte

AWS Prendere dati tramite una lambda da dynamoDB

Salve a tutti,

come si può leggere dal titolo, avrei bisogno di prendere dei dati salvati sul dynamodb con una funzione lambda scritta ovviamente in python.
La lambda riceve tramite una richiesta http post un xml il quale viene salvato in un s3 bucket.
Prima di procedere a salvare l'xml devo controllare che il race_id (una stringa passata assieme alla richiesta http nell'url tramite query string) combaci con uno dei valori contenuti nella tabella (chiamata registrazioneDB) della dynamodb in corrispondenza della colonna "race_id".

Vi posto giù il codice, in cui ho evidenziato con tanti ############################ la sezione che riguarda il problema per cui vi scrivo.
Infatti l'errore che mi si presenta e che vedo da cloudwatch è il seguente:
invalid syntax (lambda_function.py, line 41)
Traceback (most recent call last):
File "/var/task/lambda_function.py" Line 41
'race_id': race_id;

Di seguito il codice:
import json
import boto3
import logging


logger= logging.getLogger()
logger.setLevel(logging.INFO)


# Nome del bucket. TODO: sostituire con il nome del proprio bucket.
DEFAULT_BUCKET = 'mdv-xmlresults-bucket2'

def lambda_handler(event, context):
    
    # A seconda del tipo di metodo HTTP si fanno cose diverse:
    # - GET  -> si restituisce una stringa di saluto. Serve solo per assicurarsi che tutto stia funzionando, verrà eliminato in seguito
    # - POST -> ci si aspetta che il body della richiesta contenga l'XML e che ci sia il paramtero raceid.
    #           La stringa XML ricevuta viene salvata nel oggetto S3 (file) "RACEID.xml"
    # - PUT  -> si restituisce l'oggetto event per vedere cosa contiene. Serve solo per DEBUG. Verrà cambiato in seguito.
    
    httpMethod = event['requestContext']['http']['method']
    print("httpMethod è: " + event['requestContext']['http']['method']);

    
    if httpMethod == 'GET':
        res = {
            'statusCode': 200,
            'body': json.dumps('Ciao from Lambda!')
        }
    elif httpMethod == 'POST':
        xmlstring = event['body']
        object_name = event['queryStringParameters']['raceid'] + '.xml'
        
     
        #prendo da DynamoDB il token che corrisponde (se esiste) al race_id fornito in string query
        race_id= event['queryStringParameters']['raceid'];
        client = boto3.resource("dynamobd");
        table = client.get_item (
            tablename= 'registrazioneDB', 
            Key={
           'race_id': race_id;
            })
       
        
        
        
        
        
        put_to_bucket(content=xmlstring, object_name=object_name)
        res = {'statusCode': 200, 'body': 'File updloaded.'}
        
        
        
    elif httpMethod == 'PUT':
        res = {'statusCode': 200, 'body': json.dumps(str(event))}
    else:
        res = {'statusCode': 405, 'body': 'Method Not Allowed'}
    return res


def put_to_bucket(bucket_name=DEFAULT_BUCKET, object_name='prova.xml', content=None):
    assert check_xml(content)
    s3 = boto3.resource('s3')
    obj = s3.Object(bucket_name, object_name)
    obj.put(Body=content)


def check_xml(xml_string):
    # TODO XML validation
    return True


Dove sta il problema ?

1 Risposte

  • Re: AWS Prendere dati tramite una lambda da dynamoDB

    Il problema sta' in


    INVALID SYNTAX (lambda_function.py, line 41)


    E la riga 41 contiene
    
    'race_id': race_id;
    
    CHE COSA c'e' che non va ????
    PERCHE' la SINTASSI e' SBAGLIATA ????

    Tu dirai: ma se chiedo aiuto, vuol dire che non lo so!
    E la risposa' e':

    "di che colore e' il cavallo BIANCO di Napoleone ??"



    O se vuoi: un Italiano, come mangia gli spaghetti? Con cucchiaio e coltello???


    Del tipo: il problema E' OVVIO/BANALE/EVIDENTE/...
Devi accedere o registrarti per scrivere nel forum
1 risposte