[PYTHON] [AWS] Verknüpfen Sie Lambda und S3 mit boto3

Einführung

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.

Systemkonfiguration

Lambda_S3.png

  1. Erstellen Sie eine Datei in / tmp / log / sess / und archivieren Sie das Verzeichnis in / tmp / sess-info.tar.
  2. Laden Sie sess-info.tar in S3 \ hoch.
  3. Löschen Sie / tmp / sess-info.tar und laden Sie sess-info.tar von S3 \ auf / tmp / sess-info.tar herunter.
  4. Löschen Sie / 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".

abschließend

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

[AWS] Verknüpfen Sie Lambda und S3 mit boto3
Stellen Sie mit AWS Lambda Python eine Verbindung zu s3 her
[AWS] Machen Sie SSI-ähnliche Dinge mit S3 / Lambda
S3 Uploader mit Boto
Dynamische HTML-Seiten mit AWS Lambda und Python
Bearbeiten Sie S3-Objekte mit Boto3 (High-Level-API und Low-Level-API)
PyTorch mit AWS Lambda [Lambda-Import]
Machen Sie mit AWS Lambda und Python gewöhnliche Tweets flottenartig
Ausgabe von CloudWatch-Protokollen an S3 mit AWS Lambda (Pythyon ver)
Site-Überwachung und Alarmbenachrichtigung mit AWS Lambda + Python + Slack
[AWS] API mit API Gateway + Lambda erstellen
Einfacher AWS S3-Test mit MinIO
Benachrichtigen Sie HipChat mit AWS Lambda (Python)
Verwenden Sie boto3, um zu S3 zu gelangen
Generieren Sie eine mit S3 signierte URL mit boto
[AWS] Suchen und Abrufen der erforderlichen Daten aus S3-Dateien mit S3 Select
Bereiten Sie eine Umgebung für die Verwendung von OpenCV und Pillow mit AWS Lambda vor
[AWS] Verwenden von INI-Dateien mit Lambda [Python]
Versuchen Sie die serverseitige Verschlüsselung von S3 mit boto3
S3 serverseitige Verschlüsselung SSE mit Python boto3
Berühren Sie AWS mit Serverless Framework und Python
Ich habe gerade FizzBuzz mit AWS Lambda gemacht
[AWS] Erstellen Sie mit CodeStar eine Python Lambda-Umgebung und führen Sie Hello World aus
Einfache Serverüberwachung mit AWS Lambda (Python) und Ergebnisbenachrichtigung mit Slack
Laden Sie das, was Sie angefordert haben, mit AWS Lambda Python in S3 hoch
[AWS lambda] Stellen Sie mit lambda verschiedene Bibliotheken bereit (generieren Sie eine Zip-Datei mit einem Kennwort und laden Sie sie auf s3 hoch) @ Python
[AWS SAM] Erstellen Sie eine API mit DynamoDB + Lambda + API Gateway
MessagePack-Versuchen Sie, Java und Python mit RPC zu verbinden
Unterschiede zwischen queryStringParameters und multiValueQueryStringParameters in AWS Lambda
Regelmäßiges Serverless Scraping mit AWS Lambda + Scrapy Teil 1.8
Zeigen Sie Bilder in S3 mit API Gateway + Lambda an
Abrufen und Analysieren von S3-Protokollprotokollen mit Lambda-Ereignis-Nortifizierung und Eintauchen in BigQuery
LINE BOT mit Python + AWS Lambda + API Gateway
Serverlose Anwendung mit AWS SAM! (APIGATEWAY + Lambda (Python))
Einfache Röntgenaufnahme mit Lambda Layer und CloudFormation / sam-cli
Verwalten Sie AWS mit der Python-Bibliothek Boto
[AWS; Einführung in Lambda] 2. Extrahieren Sie Sätze aus der JSON-Datei und speichern Sie S3 ♬
[AWS] Versuchen Sie, API Gateway + Lambda mit X-Ray zu verfolgen
Exportieren Sie den RDS-Snapshot mit Lambda (Python) nach S3.
Ich habe versucht, AWS Lambda mit anderen Diensten zu verbinden
Beschreibe ec2 mit boto3 und rufe den Wert ab
Automatisierung des Infrastrukturbaus mit CloudFromation + Tropical + AWS Lambda
Amazon API Gateway und AWS Lambda Python-Version
Entwickeln, Ausführen und Bereitstellen von AWS Lambda remote mit dem Lambda-Uploader
[AWS] Spielen mit Schrittfunktionen (SAM + Lambda) Teil 3 (Zweig)
Erstellen Sie Amazon Linux mit AWS EC2 und melden Sie sich an
Stellen Sie die Python 3-Funktion mit Serverless Framework unter AWS Lambda bereit
Ausgabe der zeitlich begrenzten S3-URL mit boto3 (mit Bestätigung der Dateiexistenz)
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
[AWS] Spielen mit Schrittfunktionen (SAM + Lambda) Teil 1 (Basic)
Ich möchte Lambda mit Python auf Mac AWS!
Verwalten Sie die Aufbewahrung von Amazon CloudWatch-Protokollgruppen mit AWS Lambda
Erstellen Sie AWS EC2 und RDS mit Terraform Terraform 3 Minuten Garzeit
[Memo] Lade csv von s3 mit boto3 in Pandas
[AWS] Spielen mit Schrittfunktionen (SAM + Lambda) Teil 2 (Parameter)
Starten Sie Lambda mit Boto3