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

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

【AWS】APIGatewayでLambdaのアプリ側で発生した例外処理を500エラーで返したい。

## 背景

JavaアプリをLambdaでホストしているが、API Gateway経由でビジネスロジック側のエラー処理した際、ステータス上200で返ってきてしまい、困ったので調べた

## TL;DR

Javaだと例外処理の返却値が標準エラーの形式と合ってないので、レスポンス内容にステータスコード(5XX系)を埋め込む
200系のレスポンスマッピングテンプレート側でステータスコードを条件分岐させてマッチすればオーバーライドするように処理させると500エラーにできる。

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html#apigateway-override-request-response-parameters-override-response

## 確認手順

以下は、検証のために確認した手順を記載しておく

### 前提条件

以下構成なっていることを前提とする。

![image.

元記事を表示

サーバーレスアーキテクチャで翻訳 Web API を構築

## 本記事の概要
AWS Lambda、Amazon API Gateway、Amazon DynamoDB のうち、DynamoDB及びAWS Lambdaについて概要を理解したい思いから記事にしました。

参考サイト:

https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Serverless-1-2022-confirmation_422.html

## 作成する構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/6eab7b47-d088-fa68-0c29-270dd24ac8c9.png)
API Gatewayがリクエストを受け付け、Lambdaを呼出し、Lambdaが翻訳機能であるTranslateを呼出してAPI GatewayからResponseを返します。最後にヒストリーテーブルとしてDynamoDBに保存します。

## ハンズオン開始
まずLambdaについて公式

元記事を表示

Slackで独自カスタマイズしたAIと会話してみた〜Lambda(AWS)とPython使用編〜

# はじめに
LLMの進歩著しい昨今、AIを使ってキャラクターとの会話ができるサービスも数多く出てきました。
今回の記事では、Spiral.AI株式会社のTwinRoomというサービスを使い、Slackで独自カスタマイズしたAIと簡単に会話してみます。

この記事で紹介する機能を活用すれば、開発者・企業独自のアプリケーションやサービスに独自カスタマイズしたAIキャラクターを簡単に組み込むことができます。

一例として、今回は自分たちで作ったAIキャラをTwinRoomのAPI経由でSlackに登場させて、会話させてみます。

**記事監修:** [わいけい(@yk_llm_gpt)](https://twitter.com/yk_llm_gpt)

https://zenn.dev/spiralai/articles/8af7cbf526c2e1

# 全体構成
最初に、ユーザーがAIに対するメッセージをSlackに投稿してから最終的にSlack上で返信が返ってくるまでの仕組みについて説明します。

まず、Slackにメッセージが投稿されてからのデータの流れについてです。

今回作

元記事を表示

【Python】Spotifyのプレイリスト作成をAWS Lambdaで自動化する

## TL;DR

– この記事では、PythonからSpotify Web APIを操作できるライブラリである**Spotipy**を使用して、プレイリスト作成を自動化する方法を紹介します。スクリプトの自動実行には**AWS Lambda**を使用します。

– プレイリストに入れるトラックの選定は、Spotify Web APIで提供されているレコメンド機能に基づき行っている(=使用するのみ)ので、推薦アルゴリズムの実装や工夫は特にありません。

– 自分の音楽好みに合わせたプレイリストを効率的に作成したい方や、SpotifyのAPIを使ったプロジェクトに興味がある方の一助となれば幸いです。

– 使用ツール、サービスは、以下の通りです。

– Python
– Python依存パッケージ (pandasなど)
– Spotify Web API (APIキーの発行に必要)
– Spotipy
– AWS Lambda、その他AWSのサービス (無料枠で対応できる範囲だと思います)

全体の処理のイメージは以下の通りです。

![aws-lambda-spoti

元記事を表示

Lamdaレイヤーを作成する(python3.8)

## Lambdaにレイヤーを追加する
Lamdbaでサードパーティライブラリを使用する場合には「レイヤー」を作成して、関数に追加する必要があります。
今回はレイヤーの作成方法をメモ

## Amazon Linux2環境の起動(作成)

LambdaはAmazonLinux環境なので、同一の環境で作成します

“`bash
docker run -it –rm amazonlinux:2 bash
“`

## Python3.8をインストール
“`
yum update -y
yum install -y amazon-linux-extras
amazon-linux-extras enable python3.8
yum install -y python3.8 zip
“`

※Python3.8にしている理由はAmazonLinux2(amazon-linux-extras)でインストール可能なバージョンが3.8だからです。
これ以上のバージョンにするには別な方法でインストールする必要がありますが、今回は割愛(一番簡単な方法のため)

インストール可能なバージョン

元記事を表示

Lambda ってなんですか〜SkillBuildersってのがある話

## はじめに

ちょっと執筆中です LTなどで使ったパワポを記事にしていこうと思います。
アプリケーション(まわりにJava アプリケーションエンジニアがおおかったのもあり、JAVA+Tomcatあたりのアプリケーション書いてる人を前提に進めます)エンジニア向けに書いていきます。

## 経緯

後輩や同僚から、「AWS始めたい」「アプリケーションエンジニアもそろそろサーバレスをしたい」「ラムだって何?」と、いろんなレベル感のメンバから聞かれるので書いたLT資料です。
行間が読めなくなるのでちょこちょこ説明を追記していこうと思います。

目標は「AWS Lambda を使い始める皆様へ」の第一歩目を作る。

## はじまり,はじまり〜

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/d0d8ddee-d8bf-2c83-db94-aef4f40fc978.png)

![image.png](https://qiita-image-store.s3.ap-northeas

元記事を表示

拡張子がmjsとjsのファイルの違いについて

Nodeのバージョン18以上のLambdaでは、デフォルトファイルの拡張子が`mjs`に変更されています。LambdaのNodeのバージョンを更新するにあたり、`mjs`ファイルと`js`ファイルとの違いについて調査しました。結論として、拡張子の違いはJavaScriptのモジュールシステムの違いに由来しています。以下、詳細を解説します。

## 拡張子が.mjsと.jsのファイルの違い
### 前提
JavaScriptには2つの主要なモジュールシステムが存在します。
– CommonJs
– ECMAScript(ES Module, ES2015)

### モジュールシステムと拡張子
– CommonJs: cjs(あまり一般的ではありません)
– ES Module: mjs

拡張子が`js`の場合は、`package.json`内の`type`フィールドで指定されたモジュールシステムに従います。`type`は`”commonjs”`または`”module”`のいずれかを指定できます。指定がない場合、デフォルトはCommonJSとなります。

## 実験
### 拡張子が.

元記事を表示

StepFunctionsでいろいろ詰まったこともあったのでまとめておく

## 前提(困ったこと)
プロダクト開発でAWSのサービスを中心に組み上げていく中で、

・API Gateway
・StepFunctions
・Lambda

の3つを使うことになったが、

API Gateway + StepFunctions

API Gateway + Lambda
で微妙にcontextの内容が違ったので難儀したケースがあった。

## 使用サービス
・Lambda
・StepFunctions
・API Gateway
・Keycloak(AWS外)

## どうしてこうなった
最初はLambda中心に開発しており、StepFunctionsもいつかは使おうと考えてはいつつも後回しにしていた。
ある程度落ち着いたタイミングで、StepFunctionsを使ってこれまで作ったLambdaを組み合わせて実装を進めていたが、想定していた挙動にならない。

具体的にはAPI GatewayのAuthorizerにLambdaを使って、そのLambda内で外部のKeycloakを呼んでcontextのauthorizerに含めるという仕組みにしていたのだが、これ

元記事を表示

API Gatewayを単一Lambda関数と統合する際のハンドラーのルーティング方法

# はじめに

API GatewayとLambdaの統合には様々な実装パターンがあるせいか、下記の状況下でのルーティングの方法の情報が無かったので投稿します。

# 前提

– すべてのメソッドを単一のLambda関数とプロキシ統合する
– プロキシリソース(`{proxy+}`)は使わない(HTTPルーティングはAPI Gatewayで行う)
– [aws-lambda-web-adapter](https://github.com/awslabs/aws-lambda-web-adapter)や[aws-lambda-go-api-proxy](https://github.com/awslabs/aws-lambda-go-api-proxy)などは、使用しない

# 結論

Lambda関数が受け取るeventオブジェクトに含まれる`resource`と`httpMethod`を使用する。
`path`も使えそうですが、実際のパラメータが含まれる値のため、使用しない方が良いでしょう。

“` json:event
{
“resource”: “/todo/{id}”,

元記事を表示

Docker イメージからの Lambda 関数の「Runtime.InvalidEntrypoint」エラー

ローカルで動いていたのに、「Runtime.InvalidEntrypoint」が発生した時のメモ

### 起きたこと
DockerfileをECRにpushし、lambdaでイメージを選択して動かすと、Runtime.InvalidEntrypointとなる
“`
{“errorType”:”Runtime.InvalidEntrypoint”,”errorMessage”:”RequestId: ID Error: fork/exec /lambda-entrypoint.sh: exec format error”}
“`
OS:M2 mac
色々調べてみたがDockerイメージのアーキテクチャがarm64とx86_64で違うらしい。
“`bash
$docker build –platform linux/x86_64 -t docker-image:test .
“`
buildの時にplatformを変更しても、特に改善されない…

### 解決
lambdaのイメージを選択するところでpushした最新のイメージを選択していなかったことが原因でした。。。また

元記事を表示

AWS Lambda + Honoで外部REST APIサーバ用のプロキシサーバを書く

## プロキシサーバをHonoで作ろう

前回、[最近 Hono で外部連携用の AWS Lambda 書いています](https://qiita.com/ssc-ksaitou/items/4a1a1e437d4139b32d19)という記事を書きましたが、記事の中でユースケースとしてあげていた「**他のサービスへのデータ連携のためにAWS Lambda + Honoでプロキシサーバを書く**」という応用例は、そこそこ需要があると個人的に思っているので、今回改めて記事にしました。

https://qiita.com/ssc-ksaitou/items/4a1a1e437d4139b32d19

:::note info
本記事で書くプロキシサーバは [squid](https://www.squid-cache.org/) などの本格的なものではなく、HTTPリクエストを外部サービスに簡単に中継する程度のものです
:::

:::note info
本記事のソースコードは https://gitlab.com/ksaitou/2024-03-28_awslambdahonoprox

元記事を表示

BedrockのナレッジベースでRAGを実装し、資料を元にした回答をClaude 3にLambda経由でしてもらった(ベクトルストアはAurora)

[Supership](https://supership.jp/)の名畑です。たくさんの思い出を生み出してくれた中野のシンボルとも言える中野サンプラザとのお別れイベントである[中野サンプラザプロジェクションマッピング](https://www.city.tokyo-nakano.lg.jp/kanko/city-promotion/0686357420231212172102894.html)、とても素晴らしかったです。別れを惜しみながらも、再会を楽しみに待っております。

## はじめに

前に「[LambdaでBedrockのClaude 3を呼び出してみた](https://qiita.com/nabata/items/5bcc3beb76182f626040)」という記事を書きました。[Anthropic](https://www.anthropic.com/)による**LLM**である[Claude 3](https://www.anthropic.com/news/claude-3-family)を[AWS](https://aws.amazon.com/jp/)の[La

元記事を表示

momentoを利用してサーバレスキャッシングしてみた

## はじめに
最近インメモリキャッシュサービスを格安で利用することができないかと色々調べていました。
(Elasticacheなどのサービスは高いのでなるべく無料のものを利用したい。)

その結果、Momentoというサービスを発見しましたので、今回はそれについて触ってみてLambdaへの実装までを実施しました。

## Momentoとは ?
インメモリキャッシュのSaaSサービスです。正確には[Momento Cache](https://jp.gomomento.com/services/momento-cache/)にてインメモリキャッシュを行うことができます。
AWS上でキャッシュを利用するとなると、ElastiCacheやAppSync(正確にはElasticache)などを利用す

毎月5GBまでのデータの登録は無料で利用することができるため、。
その後は1GBあたり0.50ドル課金されます。
スタンダードプラン以降はCloudWatch メトリクスへエクスポートすることも可能になります。

## Momento設定内容
今回はMomento cache を作成して

元記事を表示

もう二度とlambda layer作成をミスりたくない!!【terraform】

# はじめに
Lambda Layerを何度か作成しているのですが、
毎回zipのディレクトリ構造を間違えて「Cannot find module XXX」エラーに遭遇します。

ディレクトリ構造を間違えないよう、Terraformで良い感じに工夫してみました。

## (参考)Lambda Layerとは
(引用)補助的なコードやデータを含む .zip ファイルアーカイブです。
複数のlambdaで共有したい関数や、
lambdaのデプロイパッケージに入れたくない依存ライブラリなどを別途用意できる機能です。

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

別途用意されたzipは、Lambda実行環境でlambda関数実行前に解凍されます。
lambda関数は解凍後の関数ソースやライブラリを使用することができます。

## (参考)Lambda Layer作成時の落とし穴
Lambda Layerの作成時にZIPファイルをアップロードできますが、
ZIPファイル内のディレクトリ構造が正しく

元記事を表示

AWS Lambda でカスタムレイヤーを追加する方法

# 概要
– Lambdaで何かしらの処理を行いたい時、デフォルトだとインストールされていないパッケージを使う場合は、レイヤーをアタッチする必要がある
– Lambdaを使うとき、基本的に必要になる作業なので、自分のやり方を備忘として残す

# 手順
## 1. ローカルで必要なパッケージをまとめる
– レイヤーに含めたいパッケージを仮想環境にインストール
“`shell-session
python3 -m venv venv
source venv/bin/activate
pip install package-name
“`

– 「__pythonという名前__」のディレクトリにパッケージを詰めてzipファイルにする
– __pythonという名前である必要がある__(任意ではないことに注意)
– 仮想環境の具体的なpathはそのときのローカルの状況次第
“`shell-session
mkdir -p layer/python
cp -r venv/lib/python3.10/site-packages/* layer/python/
cd laye

元記事を表示

【Provisioned Concurrency】IoT CoreからのLambda実行でエラーが出たので解消してみた

## 経緯
IoT CoreからIoTルールアクションでLambdaを実行していたが、コールドスタートが気になりSAMテンプレートでProvisioned Concurrencyを適用。

## Provisioned Concurrency適用時の設定
### IoTルールのSQLステートメントとSAMテンプレート
“`ruby:SQLステートメント
SELECT
aws_lambda(“arn:aws:lambda:ap-northeast-1:111111111111:function:hoge-func:Live”, {“payload”: *})
FROM
‘topic/subtopic’
“`
“`ruby:SAMテンプレート(Lambda部分)
hogeFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub hoge-func
CodeUri: src/handler
Role: !GetAtt LambdaH

元記事を表示

Qiitaの最新記事を教えてくれるアレクサスキルを作ろう Alexa X Lambda X Golang 

# 1.はじめに

## 1.1目的
golangと、lambdaを使ってアレクサスキルと作りたくなったのでやってみる。

## 1.2環境

Windows(GitBash)
Go Version 1.22.0

## 1.3前提条件
– Amazon 開発者アカウントの作成を事前に行う。下記リンクより、Amazon開発者アカウントの作成を元に準備してください

https://developer.amazon.com/en-US/blogs/alexa/post/31c9fd71-f34f-49fc-901f-d74f4f20e28d/alexatraining-firstskil.html
– 事前に[AWSアカウント](https://aws.amazon.com/jp/register-flow/)の作成を行ってください
– [AWSCLI](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html)が使える状態にする

# 2.Golangでソースを書き、La

元記事を表示

AWS_ALB+Lambda(Pyhton)でBasic認証+α

# 概要
AWSで何度かALBに対しBasic認証を行う機会があり、毎回調べながら試行錯誤して作っていたので備忘を目的に記載。
(個人的な感覚で、Node.jsの記事は良く見かけるが、Pythonの記事はあまり見かけないので、いつも一苦労・・・)

# なんでPython?
個人的に、Node.jsよりPythonの方がバージョンのサポート期間が長いイメージなので、Pythonを使いたい。
参考:
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html

# 構成
こんな感じ。
![basic認証.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505716/221af1a1-5455-f176-c5f1-88aba89425d5.png)

Basic認証未済のリクエストはLambdaへ、Basic認証済のリクエストはEC2へ。

# AWS設定
以下の順序
1.Lambda作成
2.EC2作成
3.ターゲットグルー

元記事を表示

aws-lambda-powertoolsを利用してLambdaでAPIを作る

## はじめに
私たちのチームでは、企業が利用している人事システムなどのデータを取り込み、集計して、人的資本にまつわる様々な指標を表示したり、業界平均などと比較することのできるWebアプリケーションを開発しています。

WebアプリケーションのAPI(サーバーサイド)を、API Gateway + Lambda(Python)で構成しています。
その際に、 [aws-lambda-powertools](https://docs.powertools.aws.dev/lambda/python/latest/) を使って、とても便利だと感じたので、紹介します。

なお、この記事で紹介する aws-lambda-powertools の機能は、バージョン2.15.0時点のものです。

## 便利な点の紹介

この記事では、実際にアプリケーションで利用しているLambdaのソースコードを用いて、 aws-lambda-powertools の便利な使い方を紹介していきます。

“`python
from http import HTTPStatus

from _types.errors

元記事を表示

AWS Lambda入門:1分で理解するサーバーレスコンピューティング

# Lambdaとは 

Lambdaは、サーバーの準備や管理なしにコードを実行できるAWSのサービスです。これにより、アプリ開発者はサーバー管理に関する負担から解放され、開発に集中できます。

### AWS Lambdaの特徴
サポート言語: Java、Go、PowerShell、Node.js、C#、Python、Rubyなど幅広いプログラミング言語に対応。
処理のトリガー: ファイル処理、ストリーム処理、ウェブアプリケーション、IoTバックエンドなど、多様なトリガーでLambda関数を起動可能。
料金体系: 実行回数と処理時間に基づいてのみ料金が発生。コードが実行されていない時の料金はかかりません。
### 利点と制約
メリット: トランザクション量に応じて自動スケーリング、高可用性、起動時のみの課金など。

元記事を表示

OTHERカテゴリの最新記事