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

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

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

元記事を表示

【裏技】Lambda の固定IP化にまだ NatGateway 使ってるの?

2023/12/25 … 【追記】アリ

# 背景
顔のイボやイボ痔を治療中で、年内に X のフォロワー1000人を目指している [@\_\_\_nix___](https://twitter.com/___nix___) です。

以前から大人気の Lambda ですが、APIのコンピューティング部分で使うことも一般的になっています。
例えば外部決済システムとやり取りをするような場合に決済システム側から「接続元IPを制限しているのでGWのIPをご連絡ください」と言われるケースが少なくありません。

こんな時に今までは当たり前のようにやってきたやり方、実はそれ以外にも方法があったのでご紹介したいと思います。

# 現状
はい、この構成が Lambda を固定IP化する最も有名な方法です。
Lambda を VPC 内に配置し、(お高い)NatGateway 経由でアクセスすることで接続元IPを固定にする方法です。
![](https://storage.googleapis.com/zenn-user-upload/b1c821cb2474-20231222.png)

ただ、

元記事を表示

M5StickのボタンでLINE WORKSにスタンプする

LINE WORKS Advent Calendar 2023 の記事です。

https://qiita.com/advent-calendar/2023/lineworks

今年は物理なおもちゃと組み合わせて何か作ろうと思いたち、マイ道具箱に転がっていた M5StickC PLUS 連携してみました!

## M5StickC PLUS とは?

手のりサイズでコンパクトボディなIoTデバイスです。

WiFiやBluetoothを始め、液晶ディスプレイ、赤外線、ジャイロセンサー(IMU)、マイク、スピーカーも付いています。小型バッテリーを搭載していて、USB Type-C で充電して持ち運んで使えるのが特徴です。

更に拡張端子(GPIO)を使って、追加で拡張センサーやボタン、リレー、モーター等の駆動系など夢広がリングなおもちゃです。

M5Stack UIFlow という独自の制御ブロックを組み合わせて開発できるWebアプリがあり、プログラミングに馴染みが無くても始める事ができるのも特徴です。MicroPython や Arduino で開発することもできるので本格的に組み込

元記事を表示

AWS Lambdaでpython-gnupgでPGP暗号化を実装するサンプルコード

# はじめに
PGP暗号化をLambdaで実装する際に、少しだけコードで苦戦したのでメモしておく。
あくまでもサンプルコード(参考)としてみてください。

# 使用したAWSサービス
– Lambda
– SecretsManager
– S3

# 前提
– 以下リンクの「AWS Lambdaでpython-gnupgのライブラリ実装方法」が完了していること。

https://qiita.com/komata/items/57cfd21efa1fad496d92

– ランタイムpython3.9で実装
– S3にファイルがputされたらLambdaが起動する(別途設定が必要)
– SecretsManagerにテキスト形式で鍵を登録しておく
– SecretsManagerのReginonとLambdaのRegionは同一Regionであること
– Lambdaのロールには使用するサービスが許可されていること(とりあえずフルアクセス付与)

# アーキ図
![pgp3.png](https://qiita-image-store.s3.ap-northeast-1.amazon

元記事を表示

AWS LambdaとDynamoDBを使ってWordPressの表示を切り替える方法

## AWS LambdaとDynamoDBを使ってWordPressの表示を切り替える方法

AWS Lambdaを活用して、WordPressの表示を定期的に切り替える方法を紹介します。これにより、簡単かつ効果的にバッチ処理を実行し、DynamoDBのデータに基づいてWordPressのブラウザ表示を管理できます。
例えばメンテナンス中などに切り替えるときなどに使うケースかと思います。

### 準備作業

1. **Lambda関数の作成**: AWS LambdaでPython 3を使用して、DynamoDBのデータを更新するカスタム関数を作成します。

“`python
# Lambda関数のコード例
def lambda_handler(event, context):
# DynamoDBのデータを更新するロジックを実装
# WordPressの表示を切り替える処理
pass
“`

2. **CloudWatch Eventsのルール設定**: CloudWatch Eventsを使用してLambda関数を定期的にトリガーするためのルールを設

元記事を表示

custom-resource-existing-s3 という Lambda 関数と対応例

## はじめに
– 謎の Lambda 関数 *-custom-resource-existing-s3 というのが作られていた
– 調査した内容を備忘の為記載します
– 「S3 イベント通知による Lambda 実行」の設定手順も含みます
– PowerShell による AWS CLI 操作を想定

## 調査
– 先述のとおり、作った覚えのない Lambda が存在していました

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/436115/7c8fb5a4-c7ff-9bac-808f-35c28a2cda7e.png)

– 画面上の「こちらをクリックしてください」のリンクを辿ると、Serverless Framework で作成したアプリケーションに含まれていました

## 原因
– Serverless Framework にて、既存 S3 の Event を設定した際に自動で作成される関数
– https://forum.serverless.com/t/funct

元記事を表示

TerraformでAWS LambdaをNode.js 20へアップグレードする方法

先日AWSから **『[アクションが必要です] AWS Lambda での Node.js 16 のサポート終了について』** というタイトルのメールを受け取ったので、早速アップグレードを試みたのですが、Terraform初心者としてハマるところが多かったので、備忘録としての投稿です。

# 前提
今回の例は、以前Terraformで構築したNode.js 16のAWS Lambdaを、Node.js 20に更新するものです。
またTerraformは当初、1.4.4を使用していました。

# LambdaのNode.js Runtimeが更新できない!
AWSからのメールにあった`2024 年 6 月 12 日までに、既存の Node.js 16 の関数を Node.js 20 にアップグレードすることをお勧めします。`の指示に従い、aws_lambda_functionのruntimeを`nodejs16.x`から`nodejs20.x`に変更し、terraformのコマンドを実行したところ…

![Upgradeエラー1.png](https://qiita-image-st

元記事を表示

EventBridge Schedulerを用いてLambdaを定期実行するCloudFormationテンプレート

# はじめに
:::note info
この記事は [ZOZO Advent Calendar 2023](https://qiita.com/advent-calendar/2023/zozo) カレンダーVol.2の24日目の記事です。
:::

Lambdaを定期実行を行いたい場合のCloudFormationのサンプルの紹介です。
EC2の定期起動・停止のサンプル[^1]はあったのですが、Lambdaの定期実行のCloudFormationサンプルが意外となかったので紹介します。

# EventBridge Scheduler vs Event Bridge Rule
AWSの何らかのサービスを定期実行する場合、以前ではよくEvent Bridge Ruleが使われていました。
しかし、2022年11月にEventBridgeからスケジュールに特化したEventBridge Schedulerがリリースされ、こちらの機能を用いてもスケジュール実行が可能になりました。

それぞれの違いについては下記の記事が分かりやすかったです。

https://dev.classmethod

元記事を表示

aws APIGateway, lambda, sesでメール送信機能実装

# AWSを使って簡単にメール送信機能を作成しよう
メール送信機能って、自前で作るのめっちゃだるくない?
プロトコル、サーバー、セキュリティ、色々考えること多い,,,,,.
そこで、簡単に作れるAWSのやり方を書きます

## 使用するサービス
– apigateway
– lambda
– ses

## 手順
### 1. APIGatewayの設定
![スクリーンショット 2023-12-23 7.23.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712534/7a413c77-3800-4b42-c197-38bb6ee596d4.png)
REST APIを選択
![スクリーンショット 2023-12-23 7.23.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/712534/7c63074d-160e-e87e-84b7-3ccd0bdc9de2.png)
新しいAPIを選択し、任意のAPI名を

元記事を表示

OTHERカテゴリの最新記事