Erstellen Sie eine temporäre Datei in AWS Lambda und laden Sie sie in S3 hoch. Außerdem werde ich versuchen, die auf S3 hochgeladene Datei an den ursprünglichen Speicherort herunterzuladen.
/ tmp / log / sess /
und archivieren Sie das Verzeichnis in / tmp / sess-info.tar
.sess-info.tar
in S3 \ / tmp / sess-info.tar
und laden Sie sess-info.tar
von S3 \ / tmp / sess-info.tar
herunter./ tmp / log / sess /
, falls vorhanden, und erweitern Sie sess-info.tar
auf / tmp / log / sess /
.Lambda Code
import boto3
import os
import os.path
import tarfile
import shutil
def lambda_handler(event, context):
bucket_name = 'bucket_name'
tmp_dir = '/tmp/'
log_dir = '/tmp/log/sess/'
file_name = 'sess-info.tar'
key = file_name
file_path = tmp_dir + file_name
# === Step 1
# create log dir
if os.path.exists(log_dir) == False:
os.makedirs(log_dir)
# write log
with open(log_dir + 'log1.txt', 'w') as file:
file.write('hoge\n')
with open(log_dir + 'log2.txt', 'w') as file:
file.write('fuga\n')
# create log archive
with tarfile.open(file_path, mode='w:gz') as archive:
archive.add(log_dir)
# === Step 2
# create s3 resource
s3 = boto3.resource('s3')
bucket = s3.Bucket(bucket_name)
# upload log archive
bucket.upload_file(file_path, key)
# === Step 3
# delete log archive
if os.path.exists(file_path):
os.remove(file_path)
# download log archive
bucket.download_file(key, file_path)
# === Step 4
# delete log dir
if os.path.exists(log_dir):
shutil.rmtree(log_dir)
# extract log archive
with tarfile.open(file_path, mode='r:gz') as archive:
archive.extractall('/')
Lambda Configuration
S3 Bucket Erstellen Sie einen Bucket mit demselben Namen wie der Lambda-Code "Bucket_name".
Lambda ist grundsätzlich zustandslos konzipiert, aber manchmal möchten Sie auf statusbehaftete Daten zugreifen. In einem solchen Fall werden wir Folgendes nutzen.
Diesmal war es ein Beispiel für die Verwendung des Lambda-Verzeichnisses / tmp und von S3.
Recommended Posts