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

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

【個人開発】草生えてないと怒ってくれるBOTを作った

明けましておめでとうございます。

新年早々少し個人で開発したのでそのアウトプットとして投稿させていただきます。

全てのツールを無料枠で抑えて作ることができるので、個人で開発してデプロイまでしてみたいと思っている人に参考になれば良いなと思います。

## 作ったもの

草(commit)がされていない場合にはその日の夕方に通知を送ってくれるLineのBOTを作りました。

**Githubリンク**

https://github.com/yuta-2001/go-no-commit-notify

## 作成動機

– 新たな年が始まって、より成長できる年にしたく継続を促せるようなものを作りたかった。
– これまで触れていないものを使って何か作ろう、自分の技術の幅を広げようと思ったから。(Goも含めて全て開発で使ったことはなかったです。)

## 使用技術・構成

– AWS Event Bridge (cron)
– AWS Lambda
– Line Notify
– Github GraphQL
– Golang

(コンテナ化(Docker)は図に乗っていますが、現在進行

元記事を表示

AWS SAMでPrismaを使ったAWS Lambdaを動かす

## AWS SAMでLambdaを作成する
まずは、AWS SAM CLIを用いてテンプレート環境を作成します。事前に、AWS SAM CLIのインストールを[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/install-sam-cli.html)に従って行なってください。
準備が完了したら、テンプレートを作成します。
“`sh
sam init
“`
質問には以下のように答えます。
![スクリーンショット 2023-12-26 16.30.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/591069/9a528524-63f0-1fd4-374f-f5478d718feb.png)
以下のようにアプリケーションが生成されたら準備完了です。
![スクリーンショット 2023-12-26 16.30.36.png](https://qiita-image

元記事を表示

SQSにLambdaトリガーを設定してみた

## はじめに
SQSにLambdaトリガーを設定して、SQSがメッセージを受信した時、自動でLambda関数が発火する仕組みを試してみました。

見なくていいですが、気分は前回記事の続き?です。

https://qiita.com/suiwave/items/149822a70b02daa25bd3

## 挙動まとめ
こんな感じの挙動が確認できました。

#### ①正常系
![cap_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3654730/4db3e7f2-f025-635a-815e-344f7917eb6d.png)

キューはメッセージ受信後、メッセージをeventに含めながらlambdaを実行します。
可視性タイムアウト時間内にlambdaが正常終了すると、キューからメッセージが削除されます。

#### ②異常系
![cap_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3654730/

元記事を表示

Lambda環境でのJavaのstaticについて

## 前提
pythonのコードでは関数外のコードは一度しか実行されないという記事を目にしたのでJavaのStaticについても同じ挙動なのか気になり検証した

## 検証
“` java
public class Cache {
private static Integer number = null;

public Cache(){}

public int get(){
if(number != null){
number++;
return number;
} else {
number = 0;
return number;
}
}
}

var cache = new Cache();
logger.info(“1回目の呼び出し cacheの番号: ” + cache.get());
logger.info(“2回目の呼び出し cacheの番号: ” + cache.get());
“`
上記の

元記事を表示

Terraformでlambdaプロキシ統合のAPIを作成する際の注意点

# はじめに
Terraform初心者のため、間違いなどあればコメントで指摘していただけると助かります。

# 結論
API Gatewayとlambdaを組み合わせたAPIを作成するときは、GET APiの場合でもaws_api_gateway_integrationのintegration_http_methodをPOSTとしよう。

“` api.tf
resource “aws_api_gateway_integration” “get_section” {
rest_api_id = aws_api_gateway_rest_api.main.id
resource_id = aws_api_gateway_resource.get_section.id
http_method = aws_api_gateway_method.get_section.http_method
#Lambdaプロキシ統合を使用する場合は、GETメソッド作成時もaws_api_gateway_integration中のintegration_http_methodをPOSTにする必要がある。
i

元記事を表示

LambdaからのLambda呼び出し、Instanaでどう見える?

# はじめに

以前、こちらの記事を投稿しましたが、その後さらにLambdaから別のLambdaを呼び出した際、どの様にInstana側で見えるのか?ちゃんとトレースは追えるのか?を検証する機会があったので記事に起こしました。

https://qiita.com/LgmQue/items/a1e847b9198ffe33846f

:::note warn
前回はPythonでしたが、今回はNode.js(14.x)で試しています。
:::

では早速いきましょう

# 子となるLambdaの準備

## Lambdaの作成

関数名を任意のもの、ランタイムを `Node.js 14.x` に設定し、[関数の作成]をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118463/0b8a1ba2-0d3e-ae55-5d57-e3d5340fde9c.png)

このLambdaが呼び出されるたびランダムに正常/異常のレスポンスおよびログ出力を行うように上書きします。

元記事を表示

DynamoDBをグローバルテーブル構成にしたうえで、DynamoDB StreamsによるLambdaトリガーを実行してみた

# 疑問と検証結果
__疑問:グローバルテーブル構成かつ、DynamoDBトリガーを有効にした場合、更新が同期・伝搬されるリージョン側でもトリガーが作動するのか?__

__結果:更新が同期・伝搬されるリージョン側でもトリガーが作動した。__

# 検証環境の構成
![構成図①.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/429161/08a95c12-ac4f-9f26-6c9e-0f6e5c1819a3.png)

__構成概要__
* DynamoDBを更新するためにAPI Gateway + LambdaでAPIを作成
* DynamoDBはグローバルテーブル構成にして、東京リージョンとバージニア北部リージョンで同期
* それぞれのリージョンのDynamoDBの更新をトリガーに実行されるLambda関数を作成

__確認観点__
* 片方のリージョンからのAPI実行(データ更新)で複数のリージョンのDynamoDBトリガーが実行されるか
* 複数リージョンに作成したAPIからのデータ更新が、そ

元記事を表示

ソラカメを使ったデモアプリを作ってみた②後編 Rekognitionによる魚検知

やったこと

環境や全体アーキテクチャについては[前編](“https://qiita.com/ys-betis/items/ad56ae5a5560877fd38c”)を参照。
ソラカメを使ったお魚検知デモアプリにおける、魚の検知部分について記載する。

![スクリーンショット 2023-12-30 14.17.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/68086/32727262-ba79-00da-b72d-c60d6b5a9bc9.png)

画像からAWS Rekognitionのラベル検知にて魚を検知させる

S3に保存したソラカメの画像に魚が何匹いるかを数えるため、以下のようなフローを当初検討した。
ただRekognitionのカスタムラベルを使うためにモデルを作る時間もリソースもなかったので、とりあえずRekognitionのデフォルトのラベル検知機能に水槽画像を食わせてみたところ、割といい感じに魚(Fishラベル)が出てきていたので、そのまま使うことにした。

元記事を表示

LambdaでExcelファイルをエクスポートすると文字化けしてしまう

## はじめに
バックエンドにLambdaを使用しているのですが、Excelファイルをそのまま返却しようとすると文字化けしてしまうエラーが発生しましたので、解消方法を記載しておきます。

## 対象者
この記事は下記のような人を対象にしています。

– PythonのopenpyxlでExcelファイルを作成している
– Lambdaを使用している

## 結論
Base64エンコードを使用します。

【サーバー側】
“`python:excel.py
import openpyxl
import base64
import tempfile
import json

def export_excel():
wb = openpyxl.Workbook()
# ここでシートにデータを書き込む

with tempfile.NamedTemporaryFile(delete=False, suffix=”.xlsx”) as tmpfile:
wb.save(tmpfile.name)
with open(tmpfile.name, “

元記事を表示

SAMでAPI Gateway AuthorizerをプリフライトリクエストのOPTIONSメソッド時に除外する方法

## はじめに
LambdaのトリガーとしてAPI Gatewayを指定し、すべてのリソースに一括でAuthorizerを設定したところ、OPTIONSリクエストにもAuthorizerが設定されてしまい、通信に失敗してしまいました。日本語で解説記事がなかったため執筆することにしました。

## 対象者
この記事は下記のような人を対象にしています。

– APIをSAMを使ってLambdaにデプロイしようとしている人
– Lambda Authorizerを使用してAPI Gatewayに認証をかけたい人

## 前提知識
– [SAM](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/what-is-sam.html)
– [Preflight request](https://developer.mozilla.org/ja/docs/Glossary/Preflight_request)

## 結論
下記の通り、 `AddDefaultAuthorizerT

元記事を表示

[Golang]Lambda+APIGatewayでミドルウェアを作るには?

ここ最近はあまりAPIGateway+LambdaのRestAPIを作ることはありませんでしたが昨年からGolangに仕事の言語が切り替わったこともあり、改めて作ってみることにしました。

そこで今回はミドルウェアを作ります。

ECSなどでやるのであればGinなどのWebフレームワークのミドルウェアを作れば良いのですが今回はそうはいかないので自分で作って見ます。

## なぜミドルウェアを作るのか?

Lamdbaに限らず、Webアプリではほぼ全てのAPIに使う共通的な処理があります。

例えばハンドラーのところの実行前に認証をしたり、入口と出口のロギングなどですね。

他の開発同様に共通処理の部分を作れるように2つのミドルウェアを用意します。

## 固定の共通処理の場合

速度測定のロギングなどやエラーハンドリング、認証で使うことが多いです。

“`golang
func middleware(next func(context.Context, events.APIGatewayProxyRequest) (events.APIGatewayProxyResponse, er

元記事を表示

Amazon Bedrockに画像生成のプロンプトを作ってもらうPythonコードを書く

## はじめに

Amazon Bedrock(以下Bedrock)使って画像生成するアプリを作ろうとしてます。(画像生成AI好きなので趣味として)

以前「Stable Diffusion XL 1.0のAPIを叩く->作成された画像をS3に格納する」部分をAWS Lambda(以下Lambda)で作ったので、今回は与えたキーワードをもとにプロンプトを生成する部分のコードを書きたいと思います。

前回の記事はこちら
[Amazon Bedrockで画像生成&S3保存するPythonコードを書く](https://qiita.com/Pretzelisa/items/61c4d3838bb6ac7ff561)

## 1. 構成
今回はキーワードからTitan Text G1 – Expressに画像生成用のプロンプトを作ってもらいます。返却されたプロンプトを引数に、Stable Diffusion XL 1.0のAPIを叩くLambdaを呼び出します。

今Amazon API Gateway – Lambda間の連携はしていませんが、イメージとしてはこんな感じです。
![Bedr

元記事を表示

Alexa × ChatGPT で楽しくおしゃべりしてみる

# 目次
* きっかけ
* 導入
* 詰まった点
* コード
* 使ってみる
* 最後に

# 1. きっかけ

#### 念願の!!
某インターシップに参加した際に、コンペの景品としてAmazon Echo Popをいただきました!!
実はずっと欲しかった!!!!!

どうやら[Alexa developer console](https://developer.amazon.com/ja-JP/alexa)を使ってAlexaで遊べちゃうらしい…

でも既にある程度の会話は出来るし….

そうだ!ChatGPTモードを勝手に作っちゃおう!!!

# 2. 構成図

構成図は以下のようになっています。

![Alexa構成図.png](https://qiita-image-store.s3.ap-northea

元記事を表示

Alexa-hostedで lambdaからS3にファイルアップロードをする方法

# 目次
* きっかけ
* 事前準備
* コード

# 1. きっかけ
Alexa-hostedは独自のAWS環境を用意することなく、スキル開発を進めることが可能です。
また、テンプレートやVScodeの拡張機能も用意されているみたいです。
エンドポイント等も設定せずとも使えるため、複雑なスキル作成には向いていませんが、
簡単なスキル作成にはもってこいですね!!!

lambdaだけでなく、S3,Dynamodbも利用できるみたいです。

AlexaSkillsKitで用意されたS3環境にlambdaがアップロードするやり方が全然乗っていなかったので、
**lambdaからS3に対してアップロードする** 方法、コードを提供します。

今回は、Alexaと会話終了と共にS3に会話内容を保存するコードを共有します。

# 2. 事前準備
以下のS3 Storageを押します。

![スクリーンショット 2023-12-29 午後7.09.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/193673

元記事を表示

[AWS] Lambda@Edgeでレスポンスボディの一部分を書き換える(付け足す)

Lambda,CloudFrontの細かい説明は省きます。

## Lambda@Edgeとは
Lambda\@Edgeについてまず簡単に。
公式↓
https://aws.amazon.com/jp/lambda/edge/

CloudFrontのエッジロケーションからコードを実行するLambda関数のことで、
ユーザに近い場所でコードが実行されるので高速なコンテンツ配信が可能になる仕組み。
コードをLambdaにアップロードするだけで自動的にコードの実行やスケーリングが行われる。

最大のメリットは**コンテンツがオリジンから返されたときにキャッシュされる可能性を高めたり、既にキャッシュされたコンテンツの利便性を高め、キャッシュヒット率を向上させること。**
らしい。

## トリガーとレスポンスボディ

本記事ではこのLambda@Edgeで受け取ったレスポンスボディの一部を書き換えてクライアントに返すことをやる。

まず、Lambda@Edgeは上述した通り、CloudFrontとセットで使用する。具体的には、CloudFrontのイベントをトリガーとして
1. ビ

元記事を表示

LINEからのBedrockエージェント呼び出し② 音声で答えてもらう

前回作った以下のAgentアプリケーションについて、せっかくなので回答内容を音声でしゃべってもらい、偽クサっぽくしてみます。

https://qiita.com/cyberBOSE/items/4a09d4593b44bb5ac49f

乗換案内だけをしゃべらせるのもアレなので、今日のニュースも読み上げられるようにしてみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/e304b63f-383e-0129-4763-a268246a84fe.png)

Agentにニュースを取得するAction groupを追加します。
Agentの生成結果をPollyに渡し音声を生成してmp3ファイルを生成、S3 Express One Zoneに書き込んで署名付きURLを発行してLINEに返却します。

以下のテキストを音声に変更する感じです。

これが
serverless frameworkで作ったLambda Function についてnodejs16.x以下のバージョンをnodejs18.xに上げるためのメモ書き

# 概要

AWS Lambdaのruntime `nodejs16.x` のサポートが来年6月で切れまーす!
みなさまのお手元にはこの震えるようなAWS(またはクラスメソッドさん)からのメールは届いていますか?

つまりそれは、nodejs12.x,14.xから16.xと逃げ回って遂に18.xへの対応をやらなければならないときが来ましたということです、年貢の納めどきです。

具体的にはライブラリのバージョンを上げたり、過去の互換を捨てたものは変更したり、ソースコードをなおしたりとやることはめんどくさく、作業は泥臭いものになります。

それでも先に進むというみなさま、覚悟はいいですか?

・・・では進みましょう。

# ざっくりやることのリスト

これが全てではないと思いますが、移行を主眼として必ずやらないといけないことを列挙します。

## 1. serverless.{yml|ts} の変更
runtimeを変更しました。
16から20…
これで2年+αくらいは追い回されずにすむはずです。

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

元記事を表示

(axiosで)叩いて(corsで)弾いてボタンクリック!!

# はじめに
フロントからaxiosでバックエンドの処理を実行させたかったが、何度クリックしてもcorsエラーでふせがれてしまった

# システム構成
Lambda × serverless構成
フロントからaxiosを叩くことでバックエンドのハンドラーが実行される仕組み

# 原因と解決

“`
Provisional headers are shown
“`

開発者ツールのネットワークタブを確認すると見たことない表示が…

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2889192/ae6e6428-2c22-a7aa-81db-dcebc24cb99f.png)

結論として、serverless.ymlに記載しているパス名が間違っており、Request URLが間違っていることが原因でした。

“`yml
get_hoge:
handler: get_hoge.handler.main
layers:
– Ref: PythonRequi

元記事を表示

LINEからのBedrockエージェント呼び出し①

Agents for Amazon Bedrockの振る舞いがなんとなく分かってきたのでLINEから呼び出してみます。まずは基本形として(?)LINEから自然言語で乗換検索を行えるようにします。

 

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3573242/fc1aa428-583b-34dc-b0b4-f818e3395724.png)

過去に作ったもの

元記事を表示

ハッカソン参加時の備忘録 ~ 第2回:1番お手軽なGUIであるLINEとAWS(Lambda)の連携をしてみよう ~

こんにちは。
ITエンジニアのきゅうと申します。

# 概要
さて、第2回は早速ちょっとしたアプリ開発を基に、ハッカソンで必要なIT技術に触れていきましょう。
ということで、今回はLINEのMessageAPIとAWSのLambdaを使った、オウム返しアプリを作っていきます。

何故これが最初なのか?
何度も言っておりますが、ハッカソンはとにかく時間がありません。
その中で動くものを作るとなると、UI(ユーザインタフェース)にかける時間は限りなく少なくしたい!!
だけど、UIを疎かにするとバック処理で凄いアプリを作ったとしても、見た目がショボい為、アプリ全体もショボい評価となってしまいます。

このジレンマを解消してくれる1つの手段が、LINE Bot(MessageAPI)になります。

LINE BotはLINE DeveloperとLINE Official Accountを登録することで、
簡単にLINEのMessageAPIを呼び出し、意図した処理を行って返答するBotアプリを作成することができるのです!!

# テクニカル
* Python3.11
* AWS lambd

元記事を表示

OTHERカテゴリの最新記事