プログラミングマガジン

プログラミングを中心にIT技術をできるだけわかりやすくまとめます。

  • ホーム
  • Python
  • 【Lambda】PythonでLamda関数を定義して実行する
 
 
     
  • サーバー言語  
    • Python
    • Ruby
    • PHP
    • SQL
  •  
  • インフラ  
       
    • AWS
    •  
    • 基本
    • Git
  • Web
       
    • Web開発
    • JavaScript
    • Vue.js
    • React
  •  
  • 設計  
       
    • 実装設計
    • DB設計
  • 問い合わせ
  

【Lambda】PythonでLamda関数を定義して実行する

08.13

  • miyabisan2
  • コメントを書く

この記事は2分で読めます

S3にデータ準備

事前に以下のデータを用意しておきます。s3に任意の名前のバケットを作って以下データをアップロードしておきます。(今回は適当に「lamda-test-fajiga」という名前を付けました 笑)

a.json

1
2
3
4
5
{
"filename": "a.json",
"author": "太郎",
"age": 36
}

pythonのプログラム例

下記はs3バケットにアップロードしてあるa.jsonをb.jsonに変更する処理です。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import boto3
import json
from collections import OrderedDict
 
 
def handler(event, context):
    BUCKET_NAME = event["bucket_name"]
    BUCKET_KEY = event["bucket_key"]
    UPLOAD_BUCKET_KEY = "b.json"
 
    s3 = boto3.resource('s3')
    bucket = s3.Bucket(BUCKET_NAME)
    obj = bucket.Object(BUCKET_KEY)
    data = json.loads(obj.get()['Body'].read().decode('utf-8'))
    print(f"{BUCKET_KEY}の内容: {data}")
 
    s3 = boto3.resource("s3")
    obj = s3.Bucket(BUCKET_NAME).Object(UPLOAD_BUCKET_KEY)
    print("data",data)
    data = OrderedDict(
        file_name=UPLOAD_BUCKET_KEY, author=data["author"], age=(data["age"] + 1)
    )
 
    res = obj.put(Body=json.dumps(data))
    if res["ResponseMetadata"]["HTTPStatusCode"] == 200:
        print(f"[SUCCESS] upload {UPLOAD_BUCKET_KEY}")

boto3

PythonからAWSのリソースを取り扱うのが簡単にできるライブラリです。

def 関数名(event,context):

lambdaでは関数を定義する必要があります。

event

lambdaを実行する際にjson形式で色々な値を渡すことができるオブジェクトです。サンプルコードの中で「bucket_name」と「bucket_key」をプログラムに渡しています。lambda側のテストイベントに変数を設定するとプログラムから呼び出せるようになります。

context

これもlamdaが用意してくれる引数です。

lamdaに関数を定義する。(アップロード)

1.まずは作成したPythonファイルをfunction.zipという名前のzipファイルに圧縮します。

2.lamdaの設定

まずは作成するのでほとんどデフォルトの設定でよいでしょう。(言語とPythonのバージョンは注意です。)以下の設定で「関数の作成」をクリックします。

デフォルト実行ロールの変更で「基本的なLamdaアクセス権限で新しいロールを作成」

下には記載がありますが、ログを勝手にcloudwatch logsにアップロードする権限を持つ「s3-json-test-role-fxfcjuuo」という実行ロールを自動で作ります。基本的には実行ログは出した方が良い(エラーが発生した際にデバッグできるように)と思うのでこれを選択するのが無難です。

3.ハンドラを編集

作成されたlambdaのハンドラの内容を変えたいので「編集」をクリックします。

main.pyの中の「handler」という関数を呼び出したいので「main.handler」という記述にハンドラを変更します。

4.ソースコードをアップロードする。

先ほど作成したzipファイルをアップロードします。

アップロードすると以下のようにコードが反映されます。

s3にアクセスするロールの設定

設定→アクセス権限→ロール名(画像でいえば「s3-json-test-role-fxfcjuuo」)をクリックします。

「許可を追加」→「ポリシーをアタッチ」をクリックします。

「AmazonS3FullAccess」を追加します。

テスト

Testを選択します。

イベントの作成

以下のように設定をして「保存」します。

イベントJSON

これがPython側のeventのキーとして渡ります。

以下のようにテストイベントが作成されます。

実行結果

s3上に変換後のファイルが生成されています。

スポンサーリンク
  • 2023 08.13
  • miyabisan2
  • コメントを書く
  • Python
  • Tweets Twitter
  • このエントリーをはてなブックマークに追加
  • LINEで送る

関連記事

  1. 2023 06.06

    【Python】scrapyのcrawlテンプレートで実装

  2. 2023 06.06

    【Python】スクレイピングプログラムの実装時の細かい配慮

  3. 2023 06.12

    【Python】「Jupyter Notebook」とは?

  4. 2023 06.24

    【Python】PySimpleGUIについて

  5. 2023 06.16

    【Python】WindowsでAnacondaを使った環境構築

  6. 2023 06.10

    【Python】「scrapy-selenium」を扱う。

  • コメント ( 0 )
  • トラックバック ( 0 )
  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

返信をキャンセルする。

【Python】ValueError: Timeout…

【AWS】SAMによりローカルで開発した内容をlamb…

RETURN TOP

著者プロフィール

エンジニア歴10年で過去に業務系、Webデザイン、インフラ系なども経験あります。現在はWeb系でフロントエンド開発中心です。

詳細なプロフィールはこちら

スポンサーリンク

カテゴリー

  • Android
  • AngularJS
  • API
  • AWS
  • C++
  • CSS
  • cursor
  • C言語
  • DDD
  • DevOps
  • Django
  • Docker
  • Figma
  • Git
  • GitLab
  • GraphQL
  • gRPC
  • Hasura
  • Java
  • JavaScript
  • Kubernetes
  • Laravel
  • linux
  • MySQL
  • Next.js
  • nginx
  • Node.js
  • NoSQL
  • Nuxt.js
  • Oracle
  • PHP
  • Python
  • React
  • Redux
  • Rspec
  • Ruby
  • Ruby on Rails
  • Sass
  • Spring Framework
  • SQL
  • TypeScript
  • Unity
  • Vue.js
  • Webサービス開発
  • Webデザイン
  • Web技術
  • インフラ
  • オブジェクト指向
  • システム開発
  • セキュリティ
  • その他
  • データベース
  • デザインパターン
  • テスト
  • ネットワーク
  • プログラミング全般
  • マイクロサービス
  • マイクロソフト系技術
  • マルチメディア
  • リファクタリング
  • 副業
  • 未分類
  • 業務知識
  • 生成AI
  • 設計
  • 関数型言語
RETURN TOP

Copyright ©  プログラミングマガジン | プライバシーポリシー