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

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

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関数を起動可能。
料金体系: 実行回数と処理時間に基づいてのみ料金が発生。コードが実行されていない時の料金はかかりません。
### 利点と制約
メリット: トランザクション量に応じて自動スケーリング、高可用性、起動時のみの課金など。

元記事を表示

API Gateway Lambdaプロキシ統合を有効にしてエイリアスごとに通信する方法

## はじめに
Lambdaプロキシ統合が以下の資料だとオフの状態の資料しかないので、Lambdaプロキシ統合をオンにした状態でもうまくいくのかについて確認します。
> c. [Lambda プロキシ統合] はオフのままにしておきます。
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/amazon-api-gateway-using-stage-variables.html

## アーキテクチャ

今回のシナリオとして、あるAPIを公開中であり、Version2のbeta版の検証も実施するという想定になります。
バージョンについては、
– v1というAPIバージョンを現行版として公開中。
– v2betaを現在開発中でプレリリース版として公開中。

というシナリオで開発をすすめるという想定とします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/872532/e769e979-f700-5b

元記事を表示

Lambda Layer上でインポートするパッケージをローカルでインストール〜アップロードまで

## これは何?
今までインフラエンジニアで開発経験など無かったのですが, 趣味やサーバレスの検証も兼ねてLambda Layerを初めて自分で作成し実装した際にライブラリが異なることで`invalid ELF header`エラーが発生した際の対処法になります.

## 調査

Pythonで、momentoライブラリを導入してLambda Layerにアップロードした際に、 `invalid ELF header` エラーが発生しました.
(momentoについて詳しくは[こちら](https://docs.momentohq.com/ja/cache))

> https://docs.momentohq.com/ja/cache

これは、ローカルで実行しているPythonライブラリとLambdaで実行しているPythonライブラリが異なるため、ELF(Executable and Linking Format)ヘッダーの規定が異なりインポートエラーが発生しているものとなります.

“`toml
{
“errorMessage”: “Unable to impor

元記事を表示

【初心者】AWS Lambdaとサーバレス

# 目的
AWS Lambdaについての基本を知るため。
AWSを触る上で重要な概念であるサーバレスにも触れる。

# Lambdaとは
開発した関数をサーバレスに実行できるサービス。

## サーバレスとは

アプリケーション実行環境をマネージドサービスとして提供されたもの。

サービス使用者(私)は、サーバの構築やOSのバージョンアップなどの管理をする必要がない。
Lambdaでは関数さえあれば、サーバを意識することなく実行環境が構築できる。

## マネージドとは

サービス提供者(AWS)がインフラの管理や運用を含めてサービスとして提供する形態のこと。

## Lambdaの仕組み(簡素)

Lambdaは同時実行リクエストごとに、実行環境の個別のインスタンスをプロビジョニングします。

### LambdaをVPCにアタッチしていない場合
実行可能なAZで起動する。

### VPCにアタッチする場合
複数のAZでサブネットを指定することで高可用性を担保する。

## Lambdaにおける2つの実行方式(非同期・同期)

### 非同期実行
呼び出し元が処理結果を待機し

元記事を表示

最近 Hono で外部連携用の AWS Lambda 書いています

## AWS Lambda のハンドラは辛い

こんにちは!AWS Lambda初心者です!

[AWS Lambda](https://aws.amazon.com/jp/lambda/) と言えば、サーバレスかつ非常に安い価格で無限にスケールアウトできる処理を書けることで有名ですが[^1]、 [2022年04月の Function URL アップデート](https://aws.amazon.com/jp/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/) でAPI Gatewayなど用いなくてもラムダ単体かつ無料でHTTPリクエストを処理できるURLを持てるようになり、かなりの神サービスになりました。

[^1]: 正直AWS内での広範な扱いを見ていると、AWSの便利なマクロ拡張関数といったほうが適切な気はします

弊社でも [Function URL](https://docs.aws.amazon.com/ja_jp

元記事を表示

デプロイ後にCloudFrontのキャッシュ削除をLambda関数で自動化する

## はじめに

S3+CloudFrontでホスティングされているプロジェクトでCodePipelineでS3へのデプロイ後にCloudFrontのキャッシュを自動で削除するLambda関数を作成しました。

備忘録として残します。あくまでも簡易的な実装例の1つとして参照してください。

## 概要

HTML/CSS/JavaScriptで構成されている静的サイト。
S3でホスティングしCloudFrontから配信している。
CI/CDがCodePipelineで自動化されている。
CloudFrontのキャッシュの削除を手動でマネジメントコンソールから行っていた。

## 実装
### 1. キャッシュ削除を行うLambda関数を実装
今回、Lambda関数はPythonで実装する。

“`bash
import boto3
import time
import os

# Lambdaのエントリーポイント
# HP本番環境のCloudFrontディストリビューションに対してキャッシュ削除を行う
def lambda_handler(event, context):
c

元記事を表示

【API Gateway】IPアドレスによるアクセス制限を実装・設定する方法

API Gatewayで実装したAPIにおいてIPアドレスによるアクセス制限をする必要が出てきたため、その方法を調査・実装した。

# 結論
API GatewayのLambdaタイプオーソライザーを作成し、特定のIPアドレスにのみ認可を与えることでアクセス制限をかけることができる。

# 実装内容
まず、オーソライザーの本体となるLamnda関数を実装する。

“`javascript
exports.handler = async (event) => {
if(event.authorizationToken){
// X-forwarded-forの内容がトークンに設定されるので、
// カンマで区切りで取得したIPアドレスの一番最初の要素がアクセス元のIPアドレスになる
ip = event.authorizationToken.split(‘,’)[0].trim();
}
else{
return generatePolicy(‘user’, ‘Deny’, event.method

元記事を表示

Lambdaのランタイムを更新する

# はじめに

ずいぶん前に作って放置したままだったLambda関数を久々に見たら、Lambdaのランタイムが古いもの(Ruby-2.7)でした。
そこでランタイムをGUI(管理コンソール)で更新するついでに、その手順を記事としてまとめてみました。

# 更新手順

* Lambda関数の詳細ページに入り、画面を下の方にスクロールさせると[ランタイム設定]という項目があります。
* ここで[編集]を押してランタイム設定の編集画面に入ります。

![lambda_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/f00255bd-fe31-d2c0-72d9-cad8c5055ecd.png)

* [ランタイム設定を編集]画面では、現在サポート対象のランタイムがリスト表示されるため、その中から所望のランタイムを選択します。
* ランタイムを選択したら、画面下部の[保存]を押します。

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

元記事を表示

OTHERカテゴリの最新記事