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

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

AWS LambdaでECRのコンテナイメージを指定したら、エラーが出た。

こんにちは、ユーゴです。今回は、私がコンテナイメージからLambdaを作ろうとした時に遭遇したエラーと解決策を紹介します。
難易度は、初歩レベルです。

# 問題
以下のようなエラーが出る
![スクリーンショット 2024-01-21 15.44.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/9f3108ea-4f10-fccc-bd2c-22b0f44d2666.png)

> Source image xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/xxxxxxxx is not valid. Provide a valid source image.

# 原因
リポジトリ自体のURIを指定してた
![スクリーンショット 2024-01-21 15.45.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/8349e5bc-a

元記事を表示

LangChainをAPI化するLangServeをLambda上で動作させるのはめちゃ簡単デス

少し前にLangChain開発元から新しいツールとしてLangServeというものがリリースされています。

https://blog.langchain.dev/introducing-langserve/

> LangServe is the easiest and best way to deploy any any LangChain chain/agent/runnable.

生成系AIを使ったAPIを簡単に作成し利用できる仕組みで、プロダクション環境でどんどんLangChainを使ってねというメッセージと捉えました。

イメージとしてはこんな仕組みです。

![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/63dc3abd-a710-3717-b6b0-ffc45585644e.png)

FastAPI上で動作し、API仕様が定められている感じです。

* Invoke API
単一の入力で処理を実行する
* Batch API
複数の入力で処理を実行する
*

元記事を表示

【Ruby】Procの基礎を理解する

# Procクラス
https://docs.ruby-lang.org/ja/latest/class/Proc.html

– ブロックをオブジェクトとして扱いたい時に使用するクラス
– ブロック
– メソッドの引数として渡すことが出来る処理のまとまり
– `do .. end`, `{ .. }`
– Procは、クロージャに相当する

“`rb
i = 100
pr = Proc.new { i += 1000 } # proc { i += 1000 } も同様

p pr.call #=> 1100
p i #=> 1100

p pr.call #=> 2100
p i #=> 2100
“`

# クロージャとは

>[手続きをオブジェクトとして扱う機能があります。このオブジェクト化された手続きのことをクロージャと呼びます。](https://docs.ruby-lang.org/ja/latest/doc/spec=2fintro.html#:~:text=%E5%88%B6%E5%BE%A1%E6%A7%8B%E9%80%A0%E3%81%

元記事を表示

Lambda Node.js 16 EOL 対応とは / AWS

# Node.js よりも前に自分が EOL

気が付けば2024年になりました。

昨年は途中で気持ちが折れたものの現役ビジネスマンとして
有効期限が切れないように今年もよろしくお願いいたします。

# Lambda のランタイムを探る

今更次郎さんではありますが
現在新規に作成する Node.js は v20 が初期設定になっているみたい

かつて環境構築時に最新であった Node.js 16 は
気持ちに含まれる OpenSSL1.1.1 が 2023年9月11日にEOL で完了。

ただやさしい AWSでは気にせずサポートを継続してくれておりました
ただ気が付けば 2024年6月12日が廃止日。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/f7038555-3dca-97bc-b28f-75ff53fa834f.png)
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.ht

元記事を表示

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アラートを編集する形で調べてみます。
アラーム編集の画面にてア

元記事を表示

OTHERカテゴリの最新記事