AWS Python Lambda-Funktion - Upload-Datei auf S3
Habe ich eine AWS Lambda-Funktion, geschrieben in Python 2.7 in die ich möchte:
1) Greifen ein .xls-Datei form einer HTTP-Adresse.
2) Speichern Sie es in einem temporären Speicherort.
3) Speichern Sie die Datei in einem S3-bucket.
Mein code ist wie folgt:
from __future__ import print_function
import urllib
import datetime
import boto3
from botocore.client import Config
def lambda_handler(event, context):
"""Make a variable containing the date format based on YYYYYMMDD"""
cur_dt = datetime.datetime.today().strftime('%Y%m%d')
"""Make a variable containing the url and current date based on the variable
cur_dt"""
dls = "http://11.11.111.111/XL/" + cur_dt + ".xlsx"
urllib.urlretrieve(dls, cur_dt + "test.xls")
ACCESS_KEY_ID = 'Abcdefg'
ACCESS_SECRET_KEY = 'hijklmnop+6dKeiAByFluK1R7rngF'
BUCKET_NAME = 'my-bicket'
FILE_NAME = cur_dt + "test.xls";
data = open('/tmp/' + FILE_NAME, 'wb')
# S3 Connect
s3 = boto3.resource(
's3',
aws_access_key_id=ACCESS_KEY_ID,
aws_secret_access_key=ACCESS_SECRET_KEY,
config=Config(signature_version='s3v4')
)
# Uploaded File
s3.Bucket(BUCKET_NAME).put(Key=FILE_NAME, Body=data, ACL='public-read')
Allerdings, wenn ich diese Funktion ausführen, erhalte ich die folgende Fehlermeldung:
'IOError: [Errno 30] Read-only file system'
Ich habe Stunden damit verbracht, zu versuchen, dieses Problem zu beheben, aber ich werde fallen auf mein Gesicht. Jede Hilfe würde geschätzt werden.
Wenn eine Antwort Ihnen geholfen hat, ist es üblich, deaktivieren Sie die Häkchen neben es, als die akzeptierte Lösung.
InformationsquelleAutor pol_guy | 2017-05-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Scheinen Sie zu fehlen einige schreib-Zugriff rechten. Wenn deine lambda hat eine andere Politik, versuche, an diese Richtlinie zu Ihrer Rolle:
Es hat vollen Zugriff auf S3 auch, in Fall können Sie nicht, schreiben Sie in Ihrem Eimer. Wenn es löst Ihr Problem, Sie entfernen Sie einige Rechte danach.
InformationsquelleAutor Sébastien Coste
ändern
data = open('/tmp/' + FILE_NAME, 'wb')
ändern Sie den Weißabgleich für das "r"auch, ich nehme an, Ihr IAM-Benutzer hat vollen Zugriff auf S3 richtig?
oder vielleicht ist das problem in der Anfrage, die url...
versuchen Sie, die cur_dt beginnt mit "/tmp/"
urllib.urlretrieve(dls, "/tmp/" + cur_dt + "test.xls")
InformationsquelleAutor UXDart
Hochgeladen habe ich das Bild zur s3-Bucket. In "Lambda-Test-Event", die ich erstellt habe, eine json-test-event enthält BASE64 Bild für den Upload auf s3-Bucket und Image-Name.
Lambda-Test-JSON-Ereignis als magerstandorte ======>
Folgende code ist der code um ein Bild hochzuladen oder eine Datei zu s3 ======>
InformationsquelleAutor Suraj Kulkarni