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

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

terraform-aws-modules/lambda/awsとPoetryを使ってLambda Layerを作成

### 課題

Terraformの `terraform-aws-modules/lambda/aws` と `poetry` を利用してLambda Layerを作成したい場合の方法です。

基本はドキュメントの例にあるように `create_layer = true` を設定すれば良いのですが、そのままドキュメント通りに実装すると、`Unable to import module` となります。

https://registry.terraform.io/modules/terraform-aws-modules/lambda/aws/latest

これは、こちらに記載のある `python` ディレクトリ配下にモジュールをインストールする構造を実現できません。

https://docs.aws.amazon.com/lambda/latest/dg/packaging-layers.html

### 実現方法

`poetry_install` と一緒に、`prefix_in_zip = “python”` とするとLambda Layerとして以下のように定

元記事を表示

完全未経験が半年で個人サービスをリリースした話

## はじめに
この度、転職とスキル向上を目的に個人サービス([Football League](https://football-league-sports.com))をリリースしました。

まだまだ修正箇所はあるものの、ひとまず形にはなったのでサービスの使用技術や開発過程を共有したいと思います。

## 自己紹介
商業高校卒(サッカー部⚽️)
25歳
青森住み🍏
職業はトマト農家です🍅

## どのようなサービスか
本サービスは、欧州5大リーグのサッカーの試合結果やチーム情報などを閲覧することができるWebサイトです。

ただ情報を閲覧できるだけでは面白みがないので、お気に入りのチームやリーグを追加することもできます。

### なぜ作ろうと思ったか
私自身、小学生の頃から社会人になった現在までサッカーをやっています。

サッカーだけではなく、スポーツをやっている人であればなにかしらの情報サイトやアプリは使ったことがあると思います。

しかし、意外と自分が興味のあるチームや試合などの情報に特化したサービスは少ないと感じました。膨大な情報からすぐに興味のある情報へ辿り着けるようなサー

元記事を表示

【AWS】Lambda関数のレイヤー作成と利用【Lambda】

## はじめに
AWS Lambda Layers(レイヤー)を使用すると複数のLambda関数で共通のコードやライブラリを共有できます。これによりコードの再利用性を向上させ、Lambda関数間で共通の機能やライブラリを簡単に管理できます。
今回の記事ではこのAWSLambdaLayerの作成、設定方法、レイヤーを使うメリットについて記載しています。

## レイヤーの作成/設定手順(ローカル環境で作成する場合)
### 1. Lambda Layer用のプログラムの作成:
#### ①Pythonコードの作成
・ここでは文字列を返すだけのコードを実装しています
![2_Code作成.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/8fa74653-7d1e-93f1-029f-4a66d382befc.png)

#### ②依存関係を取得:
・コードが依存している外部パッケージがあれば、これらを取得します。通常、pipを使用して仮想環境で必要なパッケージをインストールします。
・pyt

元記事を表示

AL2 ベースの Lambda 上で Selenium4 を使う CDK Stack

# 概要

Amazon Linux2 ベースイメージの AWS Lambda で、Seleniumを利用したWebクローリング処理をCDKでデプロイするサンプルコードを書いたので紹介します。本記事のタグの技術要素を普段から利用されている方は、特に本記事の解説を読んで頂く必要はありません。コードを覗いてみてください。

https://github.com/coleyon/amazonlinux2-py310-selenium4x-cdk-example

参考にさせて頂いたコードはこちらです。ありがとうございます。

https://github.com/umihico/docker-selenium-lambda

# 背景

APIの開発がすぐにはできない社内のWebアプリでページを表示し、内容に応じて複数ある内の一つのボタンをポチっとしたいケースがありましたので、Seleniumを利用する事にしました。

特に大規模な処理に使うわけではないのですが、将来的に Stepfunctions や APIGateway 経由で叩けるように拡張できるようにしたかったので、Lambdaで動

元記事を表示

ハッカソン参加時の備忘録 ~ 第3回:AWS LambdaとAWS RDS(MySQL)を連携させてみよう ~(1)

こんにちは。ITエンジニアのきゅうです。
第3回目は業務アプリケーションでは必ずと言っていいほど使うデータベースに接続させてみたいと思います。

そもそもAWSには様々なデータベース(以降DB)が用意されており、
特にNonSQLをAWSはプッシュしている様に思いますが、
今回は使い慣れたRDSの中でもMySQLを使用していきたいと思います。
以下、今回作成するアーキテクチャイメージになります。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/8b73423b-f55c-73be-cd20-c430198e107f.png)

# VPCの作成
“`
使用するサービス:VPC
使用する機能:VPC
“`
### 1.VPCの作成
RDSはVPCを設定する必要があるので、事前にVPCを作成しておきます。
AWSにログインしたら、まずは検索ボックスより「VPC」と入力し、開かれた『VPC』のダッシュボードより「VPCを作成」ボタンをクリックします。

### 2.VPCの設定をす

元記事を表示

Amplifyで作ったAppSyncへLambdaからmutateするとSubscribeに失敗する

# 事象
掲題のとおり。
さらにWebSocketをデバッグツールで見ると、4エラーがサブスクリプションイベントとして受信されていた。
“`json
[
{
“message”: “Cannot return null for non-nullable type: ‘AWSDateTime’ within parent ‘Hoge’ (/onCreateHoge/createdAt)”,
“path”: [
“onCreateHoge”,
“createdAt”
]
},
{
“message”: “Cannot return null for non-nullable type: ‘AWSDateTime’ within parent ‘Hoge’ (/onCreateHoge/updatedAt)”,
“path”: [
“onCreateHoge”,
“updatedAt”
]
},
{
“message”: “Cannot return null for

元記事を表示

boto3でAWS Batchジョブ定義の最新リビジョンを取得するときにハマった

# はじめに
Lambda経由でBatchを実行しようとしたら古いリビジョンのジョブ定義が呼ばれてしまった。
困ったのは**同条件でも最新リビジョンが取れてしまうことがあった**という点。
同じコードを実行しているのに挙動が変わるので、原因がコードにあるのか、それとも他にあるのか、という段階から当たりをつけていくことになり、迷走しました。

# 目次
1. [原因](#原因)
1. [コード](#コード)
1. [解決方法](#解決方法)
1. [最大100件の制限を忘れない](#最大100件の制限を忘れない)


# 原因

原因はコードにありました。
“`python
client.describe_job_definitions()
“`
このdescribe_job_definitions()は
アカウントの同一リージョンに存在するすべてのジョブ定義から最大 100 件のジョブ定義のみを取得するメソッドでした。
一方アカウントに存在するジョブは200件を超えていました。
同じコードでも最新リビジョンが取れてしまうことがあったのは最大100

元記事を表示

サクっとchaliceでlambdaをデプロイするまで

# はじめに
サブシステムの開発などでスピード感をもって **lambda** をリリースしたい時がよくあります。
割と「あれ、どうやって環境構築したっけ?」ってなることが多いので、まとめることにしました。

**sam**でもいいですし、何を使ってデプロイするかはその組織や案件によって様々考えられると思いますが、私の場合は **chalice** でデプロイすることが多いので、今回は **chalice** でデプロイするまでの流れを記述します。

# 技術
– python 3.12.1
– chalice 1.30.0

# 前提
AWSアカウントを所有していること

# 環境構築
1\. direnvインストール
goコンパイラが入っている場合
“`bash
~/ $ git clone https://github.com/direnv/direnv
~/ $ cd direnv
direnv $ sudo make install
“`

macの場合
“`zsh
~/ $ brew install direnv
~/ $ brew install openssl r

元記事を表示

【AWS】LambdaからSSM Parameter Storeの値を取得する (Lambda Extensions)

## 概要
Lambda Extensionsを使用することで、LambdaからParameter Storeの値を取得できるので、備忘録として残します。

## 権限
LambdaからParameter Storeの値を取得するためには、Lambdaに適切な実行ロールを設定する必要があります。以下は必要な権限です。

– ssm:GetParameter

– kms:Decrypt

kms:Decryptは、KMS (Key Management Service) でSecureStringとして暗号化されたパラメータを復号化するために必要です。

KMSを使用して暗号化していない場合(String)、ssm:GetParameterだけで十分です。

### ポリシー設定の例
“` json
{
“Version”: “2012-10-17”,
“Statement”: [
{
“Sid”: “getParameterSSM”,
“Effect”: “Allow”,
“Ac

元記事を表示

Python3.9系でSelenium4を使ったスクレイピングアプリをlambdaで動かそうと試みたが、その結果は・・・

## はじめに
定期的な情報収集をしたかったため、スクレイピングのアプリを作ったのだが、今回はクラウド上(AWS の lambda)への移植を試みた。
結局 Selenium の起動が上手くいかず完成できていないのだが、これまでの備忘としてメモを残しておく。

## 使ったサービス & 主要ソフト
– s3
– lambda (lambda layer も利用)
– Cloud9 (lambda layer に登録するための、パッケージやドライバーの取得に使用)

– pytho3.9系
– seleium 4.16.0

# メモ内容

## ⓪ まずは前提
今回は `Selenium` を使うアプリだったので、ブラウザ挙動を確認する必要があった。
そのため、開発はローカルPC(Python3.9系)で行っている。
ちゃんと問題なく動くコードである事ができた上で、AWS上のサービスで作り直しする方法を検討(コードは基本的にそのまま移行の予定)

## ① 必要パッケージやドライバーの準備
Python自体のバージョンについては、lambdaのランタイムの設定を行うときに適切なバー

元記事を表示

[Lambda] アカウント内の versioned artifact と layer の総量は75GB以下に保とう

アカウント内の Lambda の artifact version と layer の総量は75GB以下に保つ必要がある。

## 理由

> The Lambda service stores your function code in an internal S3 bucket that’s private to your account. Each AWS account is allocated 75 GB of storage in each Region. Code storage includes the total storage used by both Lambda functions and layers.
> **If you reach the quota, you receive a CodeStorageExceededException when you attempt to deploy new functions.**

しかしながら、これはソフトリミット。上限を上げることは可能。😅

![image.png](https://qiita-imag

元記事を表示

NestJS on AWS Lambda via API Gateway で ZIP バイナリを返却 

### はじめに
NestJSで実装したAPIを通じてZIPファイルのダウンロード機能を実装した後、Lamda上にデプロイし、API Gateway経由でそのファイルを適切にダウンロード可能にする方法について記述します。

### APIの実装

– NestJSのAPIをlambdaで動かすために [serverless-express](https://github.com/CodeGenieApp/serverless-express)を利用

以下のようにbootstrapを実装し、API Gateway経由でLambdaからZIPをダウンロードできるようにします。

“`
async function bootstrap(): Promise {
const app = await NestFactory.create(AppModule);
 // …
await app.init();
const expressApp = app.getHttpAdapter().getInstance();
return serverlessEx

元記事を表示

CloudWatchアラームの状態変化でLambdaアクションが実行できるようになりました

# ■概要

CloudWatchアラームのステータス変更が起きた際の地味アプデを見かけたので書いてみます。
アラームの状態が変移した際にAWS Lambdaを指定できるというものです。

Amazon CloudWatch alarms adds AWS Lambda as an alarm state change action
https://aws.amazon.com/about-aws/whats-new/2023/12/amazon-cloudwatch-alarms-lambda-change-action/

# ■CloudWatchアラームのアクションについて

cloudWatchアラームを設定する際、閾値に引っかかった時の動作を決定できます。
アクションとして、例えばよく使いそうなものだと、前もってSNSトピックにメールアドレスのリストを設定していて、そのリストにメールを送付する等です。

# ■コンソールからアクションを確認する

実際にコンソールから見てみましょう。
今回は現在設定済みのCPUアラートを編集する形で調べてみます。
アラーム編集の画面にてア

元記事を表示

Lambdaの実行速度を各言語で計測してみた

## はじめに
Javaはコールドスタート時の実行速度が遅いと言うのはよく見聞きしていましたが実際に計測したことはなかったのでやってみました。

## 環境
計測に使うサンプルプログラムを作成するのにAWS SAMを使用しています。
* Windows 10 Pro
* AWS CLI:2.6.2
* AWS SAM CLI:1.105.0

## 準備
計測は次の言語で行いました。
| 言語 | ランタイム | メモリ | コードサイズ | リージョン |
|:-:|:-:|:-:|:-:|:-:|
| Go | provided.al2023 | 128MB | 4.6 MB | ap-northeast-1 |
| Java | java21 | 128MB | 854.6 KB | ap-northeast-1 |
| JavaScript | nodejs20.x | 128MB | 1.3 KB | ap-northeast-1 |
| Python | python3.10 | 128MB | 521.1 KB | ap-northeast-1 |

計測に使用するサン

元記事を表示

【AWS】Lambdaで署名付きURLを作成する実装例【署名付きURL】

## はじめに
以前APIGatewayとLambdaの連携についての記事を投稿しましたが、この構成の使用例として、Lambda関数でのS3ファイルの署名付きURLを生成して返す実装について投稿します。

[APIGateWayとLambdaの連携についての記事]
https://qiita.com/Nana_777/items/0ce03f59045aa04401bc

## 署名付きURLを利用するメリット
### 一時的なアクセス制御
署名付きURLは有効期限を持ち、期限が切れるとアクセスが拒否されます。これにより、一時的にアクセスが必要な場合に、不要にアクセス権を与え続けることを避けることができます。

### 簡単なアクセス管理
署名付きURLを使用することで、AWS Identity and Access Management (IAM) ポリシーの設定が簡略化されます。特定のS3オブジェクトに対するアクセス許可を一時的に発行でき、必要がなくなれば署名付きURLを無効にできます。

### 安全なデータ転送
署名付きURLはHTTPSプロトコルを使用して生成され、データの転

元記事を表示

AWS Lambda

AWS Lambda では、Amazon EventBridgeによってイベントスケジュールに沿ったLambda関数を設定する。

デフォルトのタイムアウトは3秒で、AWS Lambdaのリクエストあたりの最大実行時間は900秒である。

外部の画像識別APIを利用して構成され、処理するデータ容量も大きくないアプリケーションを構築する場合は、画像識別APIを呼び出して解析を実行するLambda関数を作成することで、EC2インスタンスなどのサーバーを用いることなく、コスト効率が良いアプリケーションを構築することが可能である。

## IAMロール

他のAWSリソースと連携するLambda関数を作成する際は、IAMによる実行ロールをLambda関数に設定してアクセス権限を付与することが必要である。

## S3との組み合わせ
Amazon S3 イベント通知機能を使用して、S3 バケットで特定のイベントが発生したときに通知を受け取ることができる。S3イベント通知からLambda を起動して、ファイルを処理することができる。Amazon S3 は、オブジェクトを作成または削除すると

元記事を表示

Rust・AxumのDockerイメージをAWS Lambdaにサクッとデプロイする(Lambda Web Adapter)

先日こんな記事を書きました!

https://qiita.com/nokonoko_1203/items/57fbbdddbf7975a1d803

Rustの「Axum」というWebAPI用のフレームワークを利用して、レイヤードアーキテクチャでTodoアプリを作る記事になります。

その過程でちょっとこだわってDockerfileを作成したので、せっかくなのでこれをAWSのLambdaを使ってサクッとデプロイしてみようと思います!

Lambda Web Adapterという比較的最近リリースされた機能を利用すると、Dockerイメージをほんの数分でデプロイできるので、今回はこちらを利用していきます!

– 参考記事
– [Lambda Web Adapter でウェブアプリを (ほぼ) そのままサーバーレス化する](https://aws.amazon.com/jp/builders-flash/202301/lambda-web-adapter/)

## Dockerfileを作成

僕の書いた記事でも紹介していますが、今回はこちらのリポジトリを使っていきます。

h

元記事を表示

AWS SAMを使ってローカルでLambdaを実装、AWSにデプロイしてみた

## 概要
AWS SAMを使用することでサーバーレスアプリケーションを簡単に実装〜デプロイまですることができたので共有したいと思います。

## 対象者
– AWS SAMに興味がある方
– サーバーレスアプリケーションに興味がある方
– Lambda関数を簡単に実装〜デプロイしたい方

## 環境
– M1 Mac
– VScode
– Docker Desktop

## 目次
– 前提
– やってみた
– 最後に

## 前提
– awsアカウントの発行
– aws cliをインストール
– aws configureでアクセスキーとシークレットキーを設定

## やってみた
簡単なLambda関数を作成し、`sam build`して`sam deploy`していきます。

### AWS SAMの準備
SAMをインストールしていきます

[AWS SAM CLI のインストール – AWS Serverless Application Model ](https://docs.aws.amazon.com/ja_jp/serverless-application-

元記事を表示

[Lambda][FCM]LambdaからFlutterアプリに向けたPush通知を実行する

FCM経由でFlutterアプリにPush通知を送るにあたり、Lambda(それもPython)を使った記事が少ないと感じたので投稿します。

## はじめに

FCMコンソール側の設定・Flutterアプリ側の実装は世の中にHowToが溢れているので割愛します。

https://firebase.google.com/docs/cloud-messaging?hl=ja

https://firebase.google.com/docs/cloud-messaging/flutter/client?hl=ja

LambdaでFirebase Admin SDKを使用した、Push通知送信リクエスト実行方法のみ記載したいと思います。
なんでわざわざLambdaなのかと言われると、単にAWSで他のサービスを利用しているため選択肢に挙がったまでです。

![スクリーンショット 2024-01-05 16.55.26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3661825/d7be1d85-b85

元記事を表示

EventBridge スケジュールでLambdaを定期実行する

# 目次
1. はじめに
1. CloudWatch ロググループ作成
1. Lambdaを用意する
1. ポリシー、ロールの作成
1. Lambdaの作成
1. EventBridge スケジュールの設定
1. ポリシー、ロールの作成
1. スケジュールの作成
1. 動作確認
1. 最後に

# はじめに
最近、知識をアウトプットできていなかったので、今年からちょこちょこやっていきます!
手始めに簡単なところからということで、最近触れているAWS関連の記事です。
ほかに同じような内容の記事があるかもしれませんが、できるだけ差別化できるように努力しますので、ご容赦ください。

# CloudWatch ロググループ作成
ではでは、早速やっていきましょう。
まずは、Lambdaの動作確認のために、CloudWatch ロググループを作成していきます。
設定は以下です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209767/92d1aafe-7daf

元記事を表示

OTHERカテゴリの最新記事