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

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

Misskeyに定期投稿するbotをAWS LabmdaとEventBridgeで作る

# はじめに
サクッと作れます。
「イベント開催時までのカウントダウンをしてMisskeyを盛り上げたい」などにお役立てください。

## 技術
Python
AWS lambda
AWS EventBridge
## 作業手順

1. misskeyでAPIキーを取得する
1. Lambdaにアップロードするファイルを作る
1. Lambdaの実行環境を整える
1. EventBridgeで定期実行設定
1. Lambdaにファイルをアップロードして動作確認

# 制作
## 1. misskeyでAPIキーを取得

1. 設定 > API >アクセストークンの発行を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505609/6280c2db-292b-7e68-f3c9-fc3ce45f2fe2.png)

2. 全部許可しちゃう(適宜必要なものを許可すれば良い)
![image.png](https://qiita-image-store.s3.ap-northeas

元記事を表示

未来のレジ:AWS Rekognitionと画像分析の力

# はじめに

日本の人口減少とAIの進化が目まぐるしい昨今ですが、単純作業は無人化されていくだろうという推論のもと、未来レジについて考察してみた!

# やりたいこと

Amazon Rekognitionを用いて、画像認識した商品を、データベースにある価格表と照らし合わせて商品の価格を表示する。
これを構成図で書くとこんな感じ。

![構成図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2840619/a4cc4730-7f4d-af56-249b-a591886fc8a6.jpeg)

# やってみた

さて、数々の困難を乗り越えほぼ完成したのですが
膨大な構築作業となるので需要がありそうでしたら続きをまた書きます。

続きが気になる方は、いいね、コメントいただけますと幸いです

元記事を表示

ネットに繋がっていないはずのVPC Lambdaをどうして呼び出せちゃうんですか

# はじめに
VPC Lambdaをプライベートサブネットに配置し、手元のPCのターミナルからaws lambda invokeコマンドを実行すると呼び出すことができます。Lambdaがネットに繋がってないのになんで叩けるんや…と思ったので少し調べて見ました。

# VPC Lambdaの構造

VPC Lambdaとは言いつつ、Lambdaが実行されるのは**ユーザーが作成したVPC内ではありません**。
AWS Lambda Service VPC というLambda Service管理のVPCがあり、そこにLambdaが配置されています。かわりにユーザーが作成したVPCにはENIが作成されます。LambdaはENIを経由して、ユーザーが用意したVPC内のリソースにアクセスします。
このENIのことをHyperplane ENIと言うそうです(なんかかっこいいですね)。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2703223/51eb67a6-0a13-0379-1184

元記事を表示

災害ボランティア情報クローラーを作ってLambdaで更新差分チェックをした

今後も似たようなことをやりたくなることはありそうなので、備忘録的にもここに記載
クローラーや差分チェックの話ではなくLambdaの定期実行の話

# やったこと

災害ボランティアの更新情報があると良いなぁと思ったため、その情報を取得するための定期的な情報取得で更新があるかを確認しようというものです。

https://docs.google.com/spreadsheets/d/1ToG7uRymeSZbEJbecd-wvBb3XtXP6t2iXsBAfrwhtd4/

こちらにあるリンク集のURLで、更新があったかどうかを確認を行います。
更新があったか、なので更新前の状態を取っておく必要があります。
更新前の状態と結果のファイルが生成されます。

結果のファイルから見られるようにしたサイトが下記になります。

https://miyawa-tarou.com/lab/volunteer_links.php

# コード

https://github.com/miyawa-tarou/volunteer_crawler

言語はPython
URLリストは公開しているSprea

元記事を表示

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として以下のように定

元記事を表示

【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インスタンスなどの**サーバーを用いることなく**、コスト効率が良いアプリケーションを構築することが可能である。

リクエストに応じてLambda関数は並列起動されるため、アプリケーション処理負荷に耐えることができる。

## IAMロール

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

## S3との組み合わせ
Amazon S3 イベント通知機能を使用して、S3 バケットで特定のイベントが発生したときに通知を受け取ることができる。S3イベント通知からL

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事