Загрузка XML в корзину S3, загрузка с помощью Lambda / Python - PullRequest
0 голосов
/ 20 декабря 2018

XML-файл будет помещен в корзину AWS S3, и я хотел бы проанализировать его и переместить данные в таблицу DynamoDB или RDS из функции Lambda, написанной на Python.

Пока у меня есть толькомоя функция захватывает файл XML, анализирует его и распечатывает данные.Я только уверен, что получение корзины и имени файла работает правильно.

Содержимое XML-файла выглядит следующим образом:

<Locations>
    <Location>
        <d_num>034567</d_num>
        <CID>333</CID>
        <Tool>
            <t_num>JM12345</t_num>
            <qua>1</qua>
        </Tool>
        <Tool>
            <t_num>YT98234</t_num>
            <qua>1</qua>
        </Tool>
    </Location>
</Locations>

И моя лямбда-функция выглядит следующим образом:

import boto3
from xml.dom import minidom

s3 = boto3.client('s3')

def lambda_handler(event, context):
    # retrieve bucket name and file_key from the S3 event
    bucket_name = event['Records'][0]['s3']['bucket']['name']
    file_key = event['Records'][0]['s3']['object']['key']

    # get the object
    #obj = s3.get_object(Bucket=bucket_name, Key=file_key) 
    obj = s3.Object(bucket_name, file_key) #<- and ^: neither seem 
                                           #           to work

    #get data from s3 event object
    file_data = obj['Body'].read() 

    #parse through xml file
    xmldoc = minidom.parse(file_data)
    itemlist = xmldoc.getElementsByTagName('Location')
    print(len(itemlist))

    for i in itemlist:
      print(itemlist[i].attributes['d_num'].value)
      print(itemlist[i].attributes['CID'].value)
      tList = itemlist[i].getElementsByTagName('Tools')
      for s in tList:
         print(s.attributes['t_num'].value)
         print(s.attributes['qua'].value)
    print("Ran all commands")

Конечной целью является получение данных в реляционномбаза данных.Пока мне просто нужно знать, как анализировать и хранить данные XML.Тогда беспокойтесь о получении этого в базу данных.Любая помощь будет оценена!

1 Ответ

0 голосов
/ 14 января 2019

Для получения надлежащих разрешений для вашей лямбды вам необходимо:
-подойти к консоли управления IAM в AWS
-создать роль
-создать и присоединить политику к этой роли, которая разрешает доступ к вашему S3bucket
- использовать эту роль в вашей лямбда-функции

Следующий шаблон политики разрешит доступ ко всем ресурсам S3:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

Вы можете создать политику из IAM без написания JSONсебя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...