Lambda関連のことを調べてみた

Lambda関連のことを調べてみた
目次

Python lambdaで一行関数を書く時のコツ

## はじめに

Pythonのlambda式は、簡潔で読みやすい一行関数を作成するための強力なツールです。本記事では、lambdaを使って効果的な一行関数を書くためのコツをいくつか紹介します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2648069/be7e42f0-cc6a-90cd-ff99-8d61e3050277.png)

## 1. シンプルさを保つ

lambdaは単純な操作に最適です。複雑な処理は通常の関数で行いましょう。

“`python
# Good
square = lambda x: x**2
print(square(5)) # 出力: 25

# Not so good (複雑すぎる)
complicated = lambda x, y: [i for i in range(x) if i % y == 0]
print(complicated(10, 3)) # 出力: [0, 3, 6, 9]
“`

## 2. 読みやすさを優先する

元記事を表示

Lambda関数で日本語ファイルを処理する際にエラーが出た

# はじめに

Lambda関数でAWS CLIコマンドを使用して、日本語ファイル名のファイルをS3にアップロードしようとしたところ、エラーが出ました。

“`
‘utf-8’ codec can’t encode characters in …
“`

Lambda関数のランタイムは `Node.js20.x (OS: Amazon Linux 2023)` です。

# エラーの原因

まずは、環境変数設定で `LANG` に `ja_JP.utf8` を設定してみますが、結果は変わらず。

![スクリーンショット 2024-07-29 15.15.19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3687813/fc945b3b-4e9d-94cd-144c-6edab6db41ab.png)

Amazon Linux 2023のDockerコンテナを起動して確認してみると、そもそもデフォルトで日本語のロケールデータが存在していませんでした。

“`bash
$ docker run

元記事を表示

Lambda関数でAWS CLIを使用する

# はじめに

この記事では、AWS LambdaでAWS CLIを使用する手順についてまとめています。

# 対応方法

AWS Lambdaでは、ファイル書き込みが許可されているのは `/tmp` 配下のみです。
これはつまり、AWS Lambdaで実行するプログラムからはパッケージのインストールは行えないということを意味します。

そのため、対応方法としては、デプロイパッケージにまとめてしまうか、Lambdaレイヤーを使用するかになるかと思います。

今回の私のケースでは、AWS CLIは他の関数でも使用する可能性があることなどを踏まえて、Lambdaレイヤーを使用することにしました。
Lambdaレイヤーについての詳細な説明は、[AWS公式ドキュメント](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/chapter-layers.html)に譲ります。

# 対応手順

全体の流れとしては、Lambda関数で使用するOSのDockerコンテナでAWS CLIのzipファイルを作成し、そのzipファイルでLambdaレイヤー

元記事を表示

AWS CDKを用いてRemixアプリケーションをLambdaにデプロイする

## はじめに

この記事は[こちらの記事](https://qiita.com/monjara/items/9aad76d22a70557a8a6a)の内容をAWS CDKに置き換えたものです。
cdkプロジェクトはTypeScriptで作成しています。

完成品はこちらのリポジトリにあります。

https://github.com/monjara/remix-cdk-lambda-example

## 必要なもの
– CDK CLI
– Node.js
– Docker

## 階層構造

以下のような階層でプロジェクトを作成します。

“`sh
.
├── remix-app/ # Remixのアプリケーション
│   ├── (Remixのファイル群)
│   ├── Dockerfile # buildしたアプリケーションを実行するためのDockerfile
│   └── run.sh # remix-serveを実行するスクリプト
└── cdk/ # CDKのプロジェクト
“`

## Remixプロジェクトのセットアップ

“`sh
npx create-r

元記事を表示

akippaの予約CSVからGoogleカレンダーに転記するLambda関数 #1

バックオフィスが生成AIでがんばるシリーズですが、今回はプライベートで利用しているサービスの自動化についてやっていきます。
# やりたいこと
[akippa(アキッパ)](https://www.akippa.com/)の駐車場予約情報CSVをオーナーサイトからダウンロードして予約情報をGoogleカレンダーに転記します。

# 方針
以下の処理を行うAWSのLambda関数を作成して実現させます。
1. akippaのオーナーサイトにログインします
1. 予約一覧のページにあるCSVダウンロードのリンクから予約一覧CSVをダウンロードします
1. CSVから1行ごとの予約情報をパースして、Googleカレンダーに Google calendar API を使用して転記します

なおコードをクリーンにするため、akippaオーナーサイトのログイン情報(ID/Pass)及びGoogleカレンダーIDやAPIのトークン(JSON)はLambda関数の環境変数に保存します。
今回コードはChatGPT 4o に作成させ、テストしながらデバッグしていきました。
# Googleカレンダーの準備

元記事を表示

Lambda関数を定期的に実行するEventBridge SchedulerをTerraformで作る

# 概要
最近はEventBridgeではなくSchedulerのほうが推奨されているらしいので、やってみました。

参考URL -> https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon-EventBridge-Scheduler_0930_v1.pdf (P.9参照)

# 環境
– Terraform 1.9.1
– Terraform AWS Provider 5.36.0

# コード
“`terraform
# Lambda関数
resource “aws_lambda_function” “sample” {
# 省略
}

# EventBridge Scheduler使用するIAMロール
resource “aws_iam_role” “sample_scheduler” {
name = “sample-scheduler-role”
assume_role_policy = jsonencode({
Version = “2012-10-17”,

元記事を表示

AWSにおける脆弱性対策に便利そうなサービス Amazon Inspector についてざっくりまとめる

## この記事について

この記事は、Amazon Inspectorの利用を検討する上で調べた内容のまとめです。

## Amazon Inspector とは?

Amazon Inspectorは、以下のAWSリソースを自動的に検出し、既知のソフトウェアの脆弱性や意図しないネットワークへの露出がないかスキャンするサービスです。

– Amazon EC2インスタンス
– Amazon ECR内のコンテナイメージ
– AWS Lambda関数

継続的なスキャンにより、潜在的なセキュリティリスクを早期に発見し、対策を講じることが可能になります。
**EC2, ECR, Lambdaの脆弱性対策について検討している人には、一考の価値があるサービスかと思います。**

## 主な機能

### 1. ハイブリッドスキャンモード

Amazon Inspectorを新規に有効化した場合、デフォルトでハイブリッドスキャンモードが有効になります。

– SSMエージェントがインストールされているインスタンス:エージェントベースのスキャン
– SSMエージェントがインストールされていないインス

元記事を表示

S3にファイルがアップロードされたらLambdaからAutonomous DatabaseのPL/SQLプロシージャを実行してObject Storageにファイルをコピーする

# はじめに

自己学習を兼ねて、Amazon S3にファルがアップロードされたら、それをトリガーにしてLambdaファンクションが起動し、LambdaファンクションがAutonomous Databaseに接続してアップロードされたファイルをAmazon S3からOCI Object Storageに移動するPL/SQLプロシージャを実行するという仕組みを構築してみました。

処理の流れのイメージは以下のようになります。

1. Amazon S3のバケットにファイルをアップロード

2. Amazon S3バケットのオブジェクト作成イベントをLambdaに通知

3. LambdaからAutonomous Databaseにアクセス

4. Amazon S3にアップロードされたファイルをOCI Object Storageに移動するPL/SQLプロシージャをLambdaから実行

5. PL/SQLプロシージャによって、Amazon S3にアップロードされたファイルがOCI Object Storageに移動される

※なお、Python、Lambdaに関して初心者ですので、最低

元記事を表示

AWS Lambdaにレイヤーを追加する

## やること

– ローカル環境でlambda関数で使用するライブラリをインストール
– ライブラリをzip化
– lambda関数にレイヤーを設定

## 環境

– lambda
– Python
– Windows(WSL,ubuntu)

## ライブラリを用意

##### lambda関数で使用するライブラリをインストールする。ここではsqlalchemyとしておく。

ローカル環境でvenv仮想環境を構築して、sqlalchemyをインストール。
“`shell
python -m venv venv
source venv/bin/activate
pip install sqlalchemy
deactivate
“`

ライブラリをzip化
“`shell
# 適当なディレクトリにpythonディレクトを作成
mkdir /home/hoge/tmp/python
# 仮想環境でインストールしたライブラリをコピー
cp -r venv/lib /home/hoge/tmp/python/
# zip化
cd /home/hoge/tmp
zip -r lay

元記事を表示

Lambda で Prisma 使って Migrate する

## やりたいこと

AWS で RDS 作ったけど、テーブル作ったりするのどうしよー
という事で、今回は [Prisma](https://www.prisma.io/) を AWS Lambda に入れて、migrate を実行してみました。

1. ローカルで `prisma migrate dev` を実行して migration ファイルを作成
2. AWS Lambda で `prisma migrate deploy` を実行して Amazon RDS に適応

ということをやろうと思います。こうすることで、

– AWS 上にサーバーを立てることなく DB のテーブル作成が可能
– Prisma の migration ファイルを管理することで、複数人での開発や、他環境への適応も楽

になるはず。
ちなみに、私は Amplify を使って Lambda を作成しました。

## Lambda のコード

RDS のユーザ名、パスワードは Secrets Manager にある前提です。
以下の環境変数の設定が必要です。

– DATABASE_SECRET_ARN: S

元記事を表示

GmailトリガーでAWSのLambdaを起動する

非エンジニアのバックオフィスが頑張るシリーズです。

今回は会社に関係なく個人的なニーズでやってます。今どき個人でもLambda関数のひとつやふたつ、もっているのが常識ですよね🙃
届いたメールでLambdaが起動したらきっと便利なはず!
# やりたいこと
Gmailで特定条件のメールが来たら、Lambdaを起動したい
# 具体的な方針
1. Gmailで特定条件のフィルタを作成しラベルをつける
1. GASでGmail API を叩いてラベルのついたメールがあったらAWS API Gateway を叩く
1. API Gateway から Lambda を起動する
# 作成編
今回は既に問題なく動く Lambda関数があって、デプロイ・テスト完了しているものとします。
## Gmailのフィルタ設定
まずGmailで特定のラベルをつけるフィルタを設定します。(説明割愛)
## API Gateway の準備
今回は単純にAPIを叩くだけで、パラメータ等の引き渡しはしませんので、簡単に作成します。
## API Gateway 作成
「APIを作成」ボタンを押下します。
![image.

元記事を表示

AWS Textractを使用したS3アップロードトリガーの自動テキスト抽出

この記事では、AWS SAMを使用してS3バケットにファイルがアップロードされた際に自動的にAWS Textractを利用してテキストを抽出するLambda関数を作成する方法を説明します。
このテンプレートは以下のリソースを作成します。

S3バケット: ファイルのアップロードをトリガーするための入力バケットです。
バケット名は{AccountId}-{Region}-input-bucketという形式で生成されます。

Lambda関数: S3バケットにファイルがアップロードされるとトリガーされる関数です。
この関数はPython 3.11で動作し、Textractを使用してアップロードされたファイルからテキストを抽出します。

IAMロール: Lambda関数が適切な権限を持つためのロールです。
このロールには、Lambdaの基本実行権限、S3へのフルアクセス権限、Textractへのフルアクセス権限が含まれます。

このテンプレートの構成と実装方法を解説し、最後に、実際に動作確認を行い、S3バケットにファイルをアップロードしてTextractによるテキスト抽出が成功することを

元記事を表示

【LangChain編】FAQがAIの力でパワーアップ!誰でもナレッジ情報を自由自在に活用できる仕組みをAmazon Bedrock(RAG)+ LangChain + GASで構築

# はじめに
こんにちは!CBcloudのRyoです:grinning:

私の所属するCBcloudでは、物流ラストワンマイルの配送プラットフォーム「ピックゴー」を運用しており、荷物を送りたい方、荷物を届けてくれる方を24時間365日、サービスを通してつなげています!

https://pickgo.town/?utm_source=google&utm_medium=cpc&utm_campaign=brand&utm_id=749340152&utm_term=pickgo&af_pid=google&af_c=brand&gad_source=1&gclid=CjwKCAjwyJqzBhBaEiwAWDRJVBRiSmk6aRJqjngMWLKe1uuwT-EGw6Ktv9Vu7EG8o7545efU0FJaeBoCKuMQAvD_BwE

今回は以前より投稿しているRAGを使ったAI構築のLangchain編となります
Bedrockやナレッジベース・エージェントの説明は前の記事にありますので気になる方はそちらを参照ください

完成品編

https://qiit

元記事を表示

LocalStack に Lambda 関数を作成して実行する

## このエントリについて

– [こちらのエントリ](https://qiita.com/outerlet/items/8199c2f4eb7cbc678f16) と同じく、以前残したメモを供養する目的で書きました
– LocalStack はv3がリリース済みですが、ここに書いたのはv2の使用時に調べた設定やコマンドです。v3のコンテナでも通用することを確認したうえで書いていますが、v3に最適化したわけでないことはご承知おきください
– LocalStack の CloudWatch Logs を使って動作確認していますが、操作は全てCLIでやっています。コンソールなどで確認できるのかも知れませんが、そのあたりは調べきれておらず、割愛させてください
– `aws lambda` のコマンドリファレンスは [こちら](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/index.html “https://awscli.amazonaws.com/v2/documentation/api

元記事を表示

Lambda式の理解

# 関数型インターフェスとLambda
Javaでは変数として関数(処理の実装)を受け取るための変数が用意されています。
関数型インタフェースの用途を理解することでLambda式も理解できるかと思います。

|変数型|サンプル|
|—-|—-|
|String|”abcdefg”|
|Integer|123456|
|関数型インタフェース|x+yの結果を返す関数|

関数型インタフェースについてはjava.util.functionパッケージ内で準備されています。
関数型インタフェースの概要についていくつか説明します。

|関数型インタフェース|メソッド|概要|
|—|—|—|
|Function\|R apply(T t)|入力値Tを受け取り、結果Rを返却|
|Predicate\|boolena test(T t)|入力値Tを受け取り、評価結果booleanを返却|
|Consumer\|void accept(T t)|入力値Tを受け取る|
|Supplier\|T get()|結果Tを返却|

## Function\

元記事を表示

BedrockとPollyを使ってシャドーイングアプリを作ってみた

## はじめに
本記事では、BedrockとPollyを軸にシャドーイングアプリを作成した際の備忘録です。
個人で使用することを想定したアプリであるため、セキュリティ面はあまり考慮していませんのでご了承ください。

## アプリの概要
1. Bedrock先生にシャドーイング用の英文テキストを生成してもらう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1371880/392855d6-2b04-b13f-eaab-5e3bcc5e0394.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1371880/9b8a7fe0-9aa5-c323-2a6a-8173d1725d8e.png)

2. 生成してもらった英文テキストをPolly先生が音声データに変換してもらう
![image.png](https://qiita-image-store.s3.ap-northeast-1.a

元記事を表示

AWS SAMを用いてRemixアプリケーションをLambdaへデプロイする

## はじめに

[aws-lambda-web-adapter](https://github.com/awslabs/aws-lambda-web-adapter)を使って、とても簡単にRemixで作られたアプリケーションをLambdaにデプロイできたのでその手順をまとめました。

完成品はこちらのリポジトリにあります。

https://github.com/monjara/remix-sam-lambda-example

## 必要なもの
– SAM CLI
– Node.js
– Docker

## 階層構造

以下のような階層でプロジェクトを作成します。

“`sh
.
├── remix-app/ # Remixのアプリケーション
│   ├── (Remixのファイル群)
│   ├── Dockerfile # buildしたアプリケーションを実行するためのDockerfile
│   └── run.sh # remix-serveを実行するスクリプト
└── template.yaml # SAMのテンプレートファイル
“`

## Remixプロジェクト

元記事を表示

Lambdaの実行中に、追加データを送ってみる

# この記事について

よくあるLambdaは次の図のような動きをします。
リクエストを投げるとLambdaの処理が始まって、処理が完了すると結果が返ります。

![buffered-response.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233180/ce7aad3b-8911-f739-6139-bda8439d2cf5.png)

この記事では、次の図のようなことをする方法を紹介します。
実行中のLambdaに対して、追加のデータを送信します。

![buffered-response-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233180/7604e9ef-75fe-5792-39e2-b319983f68c5.png)

# 利用する環境

Lambdaの実装言語: TypeScript
ランタイム: Node.js 18.x

# 何が嬉しいのか

双方向通信をするだけならAPI Gatewa

元記事を表示

AWS Lambda にPythonウェブサーバーを立てる最小のDockerfileを書いた

関数URLにアクセスすれば
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118083/3231bf48-ede2-f3f8-7dca-8fb3780a2abb.png)

これが動くなら言語、フレームワーク問わずどんなウェブサーバーも動かせそうですね
“`Dockerfile
FROM public.ecr.aws/lambda/python:3.12
COPY –from=public.ecr.aws/awsguru/aws-lambda-adapter:0.8.3 /lambda-adapter /opt/extensions/lambda-adapter
ENV PORT=8080
RUN printf “\n\
import os, http.server, socketserver\n\
class MyHandler(http.server.SimpleHTTPRequestHandler):\n\
def do_GET(self):\n\
se

元記事を表示

Terraformを使ったLambda関数のコンテナイメージ構築

# はじめに

AWS Lambdaは、サーバーレスでイベント駆動型のコンピューティングサービスです。従来のLambda関数ではzipファイルでコードをアップロードしていましたが、コンテナイメージを使用することで、より柔軟で強力な開発・デプロイが可能になります。
本記事では、Infrastructure as CodeツールであるTerraformを用いて、Lambda関数として実行するコンテナイメージを構築し、AWS環境へデプロイする手順を解説します。

制作したレポジトリはこちらです。

https://github.com/sugiyama404/practice_lambda_docker

参考にしたサイト

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-image.html#python-image-instructions

# 目的

Lambda関数をコンテナイメージで実行することにより、柔軟性とパフォーマンスを向上させることを目指します。

# インフラ構成

![aws.png](https:/

元記事を表示

OTHERカテゴリの最新記事