AWS Lambdaを使用してPythonスクリプトを実行するには、どうすればデータを保存できますか?

アリ

APIからデータを収集するスクリプトがあり、これをローカルマシンで手動で実行すると、データをCSVまたはSQLite.dbファイルに保存できます。

これをAWSラムダに配置した場合、データを保存および取得するにはどうすればよいですか?

オネマ

TL; DR

ラムダ関数のインスタンスにデータ保存できますが、永続的なストレージとして使用したくない場合に限ります。代わりに、データの保存に特化したクラウドサービスを使用する必要があります。これは、ユースケースによって異なります。

いくつかの背景情報

ラムダを使用する場合、/tmpディレクトリへのアクセスのみがあり、最大512MBを節約できる一時的なインスタンスと考える必要がありますラムダの制限を参照)。/tmpディレクトリに保存されているデータは、関数の実行中にのみ使用できる可能性があり、そこに保存した情報が将来の実行で使用できるという保証はありません。

考慮事項

そのため、他のクラウドサービスを使用してデータを保存することを検討する必要があります。たとえば、ファイルを保存するためのSimple Storage Service(S3)、リレーショナルデータベース用のRDS、NoSQLデータベースソリューションとしてのDynamoDBなどです。

他にも多くのオプションがあり、すべてユースケースによって異なります。

実用的なソリューション

Pythonを使用すると、boto3を使用してS3にファイルを保存するのは非常に簡単です。このコードは、ライブラリリクエストを使用してgoogle.comへのGETリクエストを実行し、出力をS3バケットに保存します。追加の手順として、ファイルのダウンロードに使用できる署名付きURLも作成します

# lambda_function.py
import os
import boto3
from botocore.client import Config
import requests

s3 = boto3.resource('s3')
client = boto3.client('s3', config=Config(signature_version='s3v4'))

# This environment variable is set via the serverless.yml configuration
bucket = os.environ['FILES_BUCKET']

def lambda_handler(event, conntext):
    # Make the API CALL
    response = requests.get('https://google.com')

    # Get the data you care and transform it to the desire format
    body = response.text

    # Save it to local storage
    tmp_file_path = "/tmp/website.html"
    with open(tmp_file_path, "w") as file:
        file.write(body)
    s3.Bucket(bucket).upload_file(tmp_file_path, 'website.html')

    # OPTIONAL: Generar signed URL to download the file
    url = client.generate_presigned_url(
        ClientMethod='get_object',
        Params={
            'Bucket': bucket,
            'Key': 'website.html'
        },
        ExpiresIn=604800 # 7 days
    )
    return url

展開

ラムダ関数をデプロイするには、サーバーレスLambdaSharpなどのデプロイツールを使用することを強くお勧めします。以下はserverless.yml、サーバーレスフレームワークがコードをパッケージ化してデプロイするためのファイルです。また、S3バケットを作成し、オブジェクトを配置して署名付きURLを生成するための適切なアクセス許可を設定します。

# serverless.yml
service: s3upload

provider:
  name: aws
  runtime: python3.7
  versionFunctions: false
  memorySize: 128
  timeout: 30

  # you can add statements to the Lambda function's IAM Role here
  iamRoleStatements: 
    - Effect: "Allow"
      Action:
        - s3:PutObject
        - s3:GetObject
      Resource:
        - Fn::Join: ["/", [Fn::GetAtt: [FilesBucket, Arn], "*"]]
        - Fn::GetAtt: [FilesBucket, Arn]

# Package information
package:
  artifact: package.zip

functions:
  s3upload-function:
    handler: lambda_function.lambda_handler
    environment:
      FILES_BUCKET:
        Ref: FilesBucket
    events: 
      # THIS LAMBDA FUNCTION WILL BE TRIGGERED EVERY 10 MINUTES
      # CHECK OUT THE SERVERLESS DOCS FOR ALTERNATIVE WAYS TO 
      # TRIGGER THE FUNCTION
       - schedule:
           rate: rate(10 minutes)

# you can add CloudFormation resource templates here
resources:
  Resources:
    FilesBucket:
      Type: AWS::S3::Bucket
      Properties:
        PublicAccessBlockConfiguration:
          BlockPublicAcls: true
          BlockPublicPolicy: true
          IgnorePublicAcls: true
          RestrictPublicBuckets: true

パッケージ化してデプロイします

#!/usr/bin/env bash
# deploy.sh
mkdir package
pip install -r requirements.txt --target=./package
cp lambda_function.py package/
$(cd package; zip -r ../package.zip .)
serverless deploy --verbose

結論

ラムダ関数を実行するときは、それらをステートレスと考える必要があります。アプリケーションの状態を保存したい場合は、ユースケースに適した他のクラウドサービスを使用することをお勧めします。CSVを保存する場合、S3はPythonの使用を開始するのが非常に簡単な高可用性ストレージシステムであるため、理想的なソリューションです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

EB CLIを使用してAWSにデプロイした後、スクリプトを自動的に実行するにはどうすればよいですか?

分類Dev

aws elasticbeanstalkのフックを使用してデプロイ後スクリプトを実行するにはどうすればよいですか?

分類Dev

Linux AWSボックスにSSHで接続しましたが、AWSボックスで実行されているスクリプトを閉じずにターミナルを終了するにはどうすればよいですか?

分類Dev

AWSでバックグラウンドサービスとしてPHPスクリプトを実行するにはどうすればよいですか?

分類Dev

AWS lambda24 / 7でPythonスクリプトを実行するにはどうすればよいですか

分類Dev

APIに対してスクリプトを実行し、受信したデータを保存するためのAWSサービスはありますか

分類Dev

リモートデスクトップにサービスを提供するようにAWSインスタンスを設定して、Windowsターミナルサービスを使用してアクセスできるようにするにはどうすればよいですか?

分類Dev

Bashスクリプトに含まれているawsコマンドを設定せずに実行するにはどうすればよいですか?

分類Dev

aws EC2インスタンス(ubuntu)でPythonスクリプトを実行するにはどうすればよいですか?

分類Dev

Databrickを使用してAWSパブリックデータセットにアクセスするにはどうすればよいですか?

分類Dev

(AWS SAMを使用して)AWS Lambda上のサーバーレスアプリケーションにHTMLテンプレートを保存して使用するにはどうすればよいですか?

分類Dev

サポート会社に、2要素認証を使用してAWS EC2インスタンス(RHEL)でSSHを使用してリモート管理を実行してもらいたいです。どうすればこれを達成できますか?

分類Dev

CLIを使用してAWSインスタンスメタデータをリモートで取得するにはどうすればよいですか?

分類Dev

PythonアプリがAWS Lambda関数内で実行されているかどうかを確認するにはどうすればよいですか?

分類Dev

AWS EC2サーバーにあるPythonスクリプトを実行するにはどうすればよいですか?

分類Dev

AWSのHTTP APIを使用して投稿リクエストを実行するにはどうすればよいですか?

分類Dev

AWS Lambdaにプリインストールされている信頼できるCAを確認するにはどうすればよいですか?

分類Dev

AWS Lambdaにプリインストールされている信頼できるCAを確認するにはどうすればよいですか?

分類Dev

AWSの質問-Pythonを使用したFargateタスクでCloudwatchイベントデータを取得するにはどうすればよいですか?

分類Dev

AWSの質問-Pythonを使用したFargateタスクでCloudwatchイベントデータを取得するにはどうすればよいですか?

分類Dev

AWS CLIを使用して複数のEC2インスタンスでシェルスクリプトを実行するにはどうすればよいですか?

分類Dev

AWS CLIを使用して複数のEC2インスタンスでシェルスクリプトを実行するにはどうすればよいですか?

分類Dev

AWS Lambdaを使用して無限のWebSocketデータソースを受信するにはどうすればよいですか?

分類Dev

AWS Elastic Beanstalkデプロイメントのnpmスクリプトを実行するにはどうすればよいですか?

分類Dev

Pythonを使用して、ファイル/ディレクトリをLinuxからAWS EC2インスタンスのWindowsにリモートでコピーするにはどうすればよいですか?

分類Dev

オンデマンドでEMRクラスターを作成し、aws emrコマンドを実行するにはどうすればよいですか?

分類Dev

spring-cloud-starter-awsを使用してアプリをローカルで実行するにはどうすればよいですか?

分類Dev

Pythonを使用してAWS LambdaパブリックIPアドレスを取得するにはどうすればよいですか?

分類Dev

AWS LambdaとCloudWatchを使用してウェブサイトのステータスを監視するにはどうすればよいですか?

Related 関連記事

  1. 1

    EB CLIを使用してAWSにデプロイした後、スクリプトを自動的に実行するにはどうすればよいですか?

  2. 2

    aws elasticbeanstalkのフックを使用してデプロイ後スクリプトを実行するにはどうすればよいですか?

  3. 3

    Linux AWSボックスにSSHで接続しましたが、AWSボックスで実行されているスクリプトを閉じずにターミナルを終了するにはどうすればよいですか?

  4. 4

    AWSでバックグラウンドサービスとしてPHPスクリプトを実行するにはどうすればよいですか?

  5. 5

    AWS lambda24 / 7でPythonスクリプトを実行するにはどうすればよいですか

  6. 6

    APIに対してスクリプトを実行し、受信したデータを保存するためのAWSサービスはありますか

  7. 7

    リモートデスクトップにサービスを提供するようにAWSインスタンスを設定して、Windowsターミナルサービスを使用してアクセスできるようにするにはどうすればよいですか?

  8. 8

    Bashスクリプトに含まれているawsコマンドを設定せずに実行するにはどうすればよいですか?

  9. 9

    aws EC2インスタンス(ubuntu)でPythonスクリプトを実行するにはどうすればよいですか?

  10. 10

    Databrickを使用してAWSパブリックデータセットにアクセスするにはどうすればよいですか?

  11. 11

    (AWS SAMを使用して)AWS Lambda上のサーバーレスアプリケーションにHTMLテンプレートを保存して使用するにはどうすればよいですか?

  12. 12

    サポート会社に、2要素認証を使用してAWS EC2インスタンス(RHEL)でSSHを使用してリモート管理を実行してもらいたいです。どうすればこれを達成できますか?

  13. 13

    CLIを使用してAWSインスタンスメタデータをリモートで取得するにはどうすればよいですか?

  14. 14

    PythonアプリがAWS Lambda関数内で実行されているかどうかを確認するにはどうすればよいですか?

  15. 15

    AWS EC2サーバーにあるPythonスクリプトを実行するにはどうすればよいですか?

  16. 16

    AWSのHTTP APIを使用して投稿リクエストを実行するにはどうすればよいですか?

  17. 17

    AWS Lambdaにプリインストールされている信頼できるCAを確認するにはどうすればよいですか?

  18. 18

    AWS Lambdaにプリインストールされている信頼できるCAを確認するにはどうすればよいですか?

  19. 19

    AWSの質問-Pythonを使用したFargateタスクでCloudwatchイベントデータを取得するにはどうすればよいですか?

  20. 20

    AWSの質問-Pythonを使用したFargateタスクでCloudwatchイベントデータを取得するにはどうすればよいですか?

  21. 21

    AWS CLIを使用して複数のEC2インスタンスでシェルスクリプトを実行するにはどうすればよいですか?

  22. 22

    AWS CLIを使用して複数のEC2インスタンスでシェルスクリプトを実行するにはどうすればよいですか?

  23. 23

    AWS Lambdaを使用して無限のWebSocketデータソースを受信するにはどうすればよいですか?

  24. 24

    AWS Elastic Beanstalkデプロイメントのnpmスクリプトを実行するにはどうすればよいですか?

  25. 25

    Pythonを使用して、ファイル/ディレクトリをLinuxからAWS EC2インスタンスのWindowsにリモートでコピーするにはどうすればよいですか?

  26. 26

    オンデマンドでEMRクラスターを作成し、aws emrコマンドを実行するにはどうすればよいですか?

  27. 27

    spring-cloud-starter-awsを使用してアプリをローカルで実行するにはどうすればよいですか?

  28. 28

    Pythonを使用してAWS LambdaパブリックIPアドレスを取得するにはどうすればよいですか?

  29. 29

    AWS LambdaとCloudWatchを使用してウェブサイトのステータスを監視するにはどうすればよいですか?

ホットタグ

アーカイブ