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

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

AWS Lambdaで、LINE Botにローディングアニメーションを表示

# ローディングアニメーション
Messaging APIに、ローディングアニメーション表示機能が追加されました。

https://developers.line.biz/ja/news/2024/04/17/loading-indicator/

メッセージを送信してから返答が来るまでの間、指定した秒数だけローディングアニメーションが表示されます。また、表示中に返答が来ると自動的に消えます。

loading_animation.gif

# 実装
既にGASで実装した記事は出ているため、今回は、AWS Lambdaで実装しました。
ローディングアニメーションの部分だけ抜き出すと下記のようになります。

UserIDは環境変数から取得しています。

“`lambda.py
# LINE Botの設定
li

元記事を表示

X-RayはpytestとFlameGraphを組み合わせると便利

## この記事を3行で

– AWS X-Rayをpytestで使うと便利
– 関数の通過や例外の発生をassertでテストできる
– X-Rayの可視化にFlameGraphを使えば、各関数の実行時間が分かりやすい

## この記事を書く理由

AWS X-Rayが便利なので、AWS環境へのデプロイの前でも使える使い方を紹介したい。

## 完成後の挙動

この記事で作成する単体テストを、Pytestで実行すると、

![execute.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233180/f3d309e4-2737-8b2a-f4b3-ff0cbd87fa3b.png)

単体テストが吐き出したX-Rayのデータをもとに、下のようなグラフがローカルのPC上に作成されます。

![flamegraph.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233180/009b688e-09db-f109-40ee-b4

元記事を表示

インターホンとLINEを連携するためにFlashAirをひっぱりだしてみた

## はじめに

先日、家に私一人の時に部屋で籠って仕事をしていたところ、インターホンが鳴ったことに気づかずAmazonからの荷物を受け取り損ねてしまいました。
私の仕事部屋にはリビングで鳴っているインターホンの音が届かないため、どうにかして仕事部屋に居ながらインターホンに気づくことができないかということで今回の仕組みを作ってみました。

## 使ったもの

– FlashAir W-03
– Amazon API Gateway
– AWS Lambda
– LINE Messaging API
– LINE BOT SDK
– TypeScript

### FlashAirについて

今回の仕組みの要ともいえるデバイスで、無線LAN通信機能を搭載したSDカードというニッチな製品です。
[初代FlashAirは2012年2月にリリース](https://www.global.toshiba/jp/news/corporate/2011/09/pr0101.html)とのこと。TOSHIBA(現在のKIOXIA)からの発売でした。
残念なことに既に生産が終わっているとのことですが、こ

元記事を表示

AWSでLlama3を使えるようにする

# 1. 初めに
誰しもLlama3を使ってAWSでChatbotを作りたいなと三日に一回は思っているはず。
**Llama3**を**Groq API**経由で使えるようにしてみたので備忘録も兼ねて書く。

**Chat GPTでいいやんと思ったそこのあなた**
LLama 3はChatGPTよりも数倍早く返ってくるかつ、Llama3の400bモデルが来た時にすぐ乗り換えられるように備えておくことは大切!なので、やっておいて損はないかなと思います。

# 2. 参考にしたもの
[AWS Lambda(Python)からOpenAIのGPT4のAPIを呼び出してみた](https://qiita.com/nabata/items/903a2ebff8e44516598e)
とりあえず類似なものとして、ChatGPTをAWS Lambdaから呼び出すものを参考にした。感謝!
GroqのAPI Documentを見てもわかるが大体ChatGPT構造と同じなので、参考にしやすいかなと思った。

# 3. レイヤーの設定
まず、AWSのLambdaにgroqのパッケージを入れる必要があるため、

元記事を表示

AWS APIGateway(HTTP API)とCognitoを統合

# やりたいこと
フロントエンド(ここではReactアプリ)から、APIGateway経由でLambda関数を実行するときにCognitoで認証されたユーザーからのリクエストのみをAPIGatewayで受け付けるようにしたい
※備忘録に近い内容です

# 作成手順
###### ①Lambda関数を作成
何でも良いのでLambda関数を作成
とりあえず作成したときに出来上がるHelloLambdaのままとした
(ここでやりたいことはLambdaの中身は関係ないので)
“`
export const handler = async (event) => {
// TODO implement
const response = {
statusCode: 200,
body: JSON.stringify(‘Hello from Lambda!’),
};
return response;
};
“`

###### ②APIGateway作成
・HTTP APIを作成
・Authorization設定
 オーソライザーのタイプ:JWT
 IDソース:$

元記事を表示

インフラエンジニアさんに手引してもらいながらlambdaのIP固定化をやってみたときのメモ(NATゲートウェイ不使用)

## 概要

LambdaのIPをElastic IPを使って固定化した話をメモ的にまとめる

## 前提

下記の記事を参考に、インフラエンジニアさんに手引してもらいながらlambdaのIP固定化をしてみた

https://zenn.dev/nix/articles/7dd29a1e9edc55

## 内容

### lambdaに紐づくネットワークインターフェースを探す

どうやらパブリックなVPCにlambdaが設置されている場合、「ネットワークインターフェイス」が自動的に作られるらしい。下記の手順でネットワークインターフェースを探した。(パブリックなVPCにlambdaが設置されていないとネットワークインターフェイスはつくられないと思う)

1. マネジメントコンソールでEC2を開く
1. サイドバーで「ネットワークインターフェイス」を開く
1. 「lambda」で検索をかける
1. ヒットした内容の「説明」にlambda名が記載されているはずなので見つける
1. lambdaに紐づくネットワークインターフェイスの「ネットワークインターフェイス ID」と「プライベートIPv

元記事を表示

S3へアップロードされたことをトリガーにzipファイルをLambdaを使って解凍しよう!

## 概要
S3へzipファイルがアップロードされたことをトリガーにzipファイルを解凍するLambdaを作成する方法について解説していきたいと思います

## 前提
– Pythonで解凍処理を作成します

## Lambdaの作成
zipファイルを解凍するLambdaを新規作成します
![スクリーンショット 2024-04-22 15.45.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625980/79bf32d3-5dd4-6a2e-9427-396037764f1e.png)

今回は基本的なLambdaアクセス権限で新しいロールを作成します
![スクリーンショット 2024-05-10 13.46.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625980/0a239a10-2092-415c-06d0-a55d9687c233.png)

## zipファイルを解凍する処理の作成
まず、S3へz

元記事を表示

Lambdaのセッション管理、ElastiCacheとDynamoDBの比較

# ElastiCacheを使用したセッション管理
## ユースケース
・高速なデータアクセスが必要な場合。
・データが頻繁に変更されるが、一時的なもので永続性が必要ない場合。
・キャッシュのようにデータをキャッシュする場合。

## メリット:
・インメモリデータストアであるため、高速なデータアクセスが可能。
・データが永続的に保存されるため、再起動後もデータが保持される。
・キャッシュとしての利用が容易で、既存のアプリケーションに簡単に統合できる。

## デメリット
・インメモリデータストアであるため、データがメモリにのみ保存され、データのサイズに制限がある。
・コストが高くなる可能性があり、大量のデータを保存する場合は注意が必要。

# DynamoDBを使用したセッション管理
## ユースケース
・データの永続性が必要な場合。
・データの大規模な保存が必要な場合。
・セッションデータを他のデータと一緒に格納したい場合。

## メリット
・データが永続的に保存され、大規模なデータを扱うことができる。
・スケーラビリティが高く、大量のリクエストを処理できる。
・サーバーレスアプ

元記事を表示

Lambda関数の古いバージョンを一括削除するスクリプト

# 背景
 AWSのSAMテンプレートを利用しており、AutoPublishAliasプロパティを使い、Lambda関数にエイリアスとバージョンを設定しています。この場合、関数を更新するたびに新しいバージョンが作られるため、これを何度も繰り返した場合、気づかないうちにLambdaのストレージの制限である75GBを超えてしまう恐れがあります。
 現状、SAMのプロパティに古いバージョンのLambdaを削除するような設定は無く、[Issues](https://github.com/aws/serverless-application-model/issues/2719)を見る限り今後も実装されなさそうであるため、独自で古いバージョンのLambdaの削除を行う必要があります。
 今回は、問題が発生した場合にすぐに戻せるよう、最新から数バージョンは残しておきつつ、それ以前の古いバージョンは削除するようなスクリプトを作成しました。

# スクリプト

“`bash:delete-lambda-old-version.sh
#! /bin/bash
# 古いバージョンのLambdaを削除

元記事を表示

Lambdaを使うときのセッション管理方法

# LambdaはStatelessアーキテクチャ
Lambda関数は通常、ステートレスなアーキテクチャで実装されます。これは、各リクエストが独立しており、Lambda関数間で状態を共有しないことを意味します。この場合、セッション管理はクライアント側で行われることが一般的です。クライアントは、認証トークンやセッションIDを使用して状態を管理し、必要に応じてそれらをリクエストに含めます。

# 外部のセッション管理サービスを使用する
外部のセッション管理サービス(例えば、Amazon CognitoやAuth0など)を使用して、ユーザーの認証とセッション管理を行うことができます。これらのサービスは、ユーザーの認証情報やセッション情報を安全に管理し、Lambda関数からそれらの情報にアクセスすることができます。

# ステートフルなLambda関数
一部のユースケースでは、ステートフルなLambda関数が必要な場合があります。この場合、Lambda関数内でセッション状態を保持する必要があります。例えば、DynamoDBやElastiCacheなどのデータストアを使用して、セッション情報を保

元記事を表示

CloudWatch アラームを Redmine のチケットに起票する

# やりたいこと

CloudWatch アラームが ALARM 状態になったら Redmine のチケットに起票したい。

なお、Redmine チケットは次のようにしたい。

– プロジェクト: **test_project**
– トラッカー: **Alarm**
– チケットの優先度
– CloudWatch アラーム名に Critical が含まれる場合は、優先度 **Urgent** とする
– CloudWatch アラーム名に Error が含まれる場合は、優先度 **High** とする

# どうやるか?

Redmine API が提供されているので、これを参考に行う。

https://www.redmine.org/projects/redmine/wiki/Rest_api

# 構成図

実際は、CloudWatch metrics のアクションとして、Lambda を指定しますが、今回は Lamda からテストイベントを作成し実行させるので、CloudWatch metrics の作成は手順から省いています。
![redmine.png](h

元記事を表示

AWS Cloud9(Django)+S3+SQS+Lambda+SNS環境構築_目次

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

この記事は自分が連載(?)している『AWS Cloud9(Django)+S3+SQS+Lambda+SNS環境を作ってS3にアップロードされた時、メール通知をする』という記事をまとめた記事となります。

# 構築する環境

以下の環境を右から順番に連携させていきます。

![aws-django01-ページ6.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/426843a2-5d28-7283-96dc-22fb1cbe3e34.png)

最終的にCloud9に構築した以下のWebアプリからS3にデータをアップロードすることを可能にし、その際に自動でメール通知が飛んでくるような環境を作っていきます。

![2024050811.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/42fe1f99-36d

元記事を表示

AWS S3/SQS/Lambda/SNSにCloud9を連携し、メール通知を行ってみる[04]

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

今回はAWS S3,SQS,Lambda,SNS環境にCloud9をベースとしたDjango環境を追加して、Django経由でS3に何らかのデータがアップロードされた際にメールが通知される環境を構築していきたいと思います。
今回が想定では最後となります。

前回の記事は以下となります。

https://qiita.com/ohtsuka-shota/items/59821498db47ecbeed7d

また、DjangoからS3にデータを送るために以前私が作った以下の記事も軽く見てます。

https://qiita.com/ohtsuka-shota/items/cdb365fe164fbc48b528

全体の流れは以下にまとめています。

https://qiita.com/ohtsuka-shota/items/db74a418dabc261d9126

# 最終的な構築イメージ
以下環境を作っていきます。今回はCloud9/Djangoを実装していきます。
![aws-django01-ページ6

元記事を表示

暇つぶし2

## AWSWAFで検知したエラーをZabbixのダッシュボードに出力しつつ、Slackで通知を受け取りたい

### 1.ざっくりした仕組み
WAF→Lambda→Zabbix→slack

### 2.構築/設定が必要なもの
・環境構築
・WAFとトリガーの設定(WAFの料金高いので、設定方法だけ調べてトリガーだけ作成します。)
・Lambdaの作成
・Zabbixサーバーの構築と設定
・slack(前回使った自前のやつ)

### 3.手順

※日曜やります。

### 4.テスト
WAF高いので、トリガーを手動実行してテストします。

※日曜やります。

### 5.感想

元記事を表示

Cloud Watch AlarmをトリガーにOUでアクセス制御してSNS Topic経由でLambda起動させる

タイトルの通り、Cloud Watch Alarm -> SNS Topic -> Lambdaという構成のAWSリソースを構築しました。

当初の構成ではCloud Watch AlarmからLambdaをOUで絞って呼び出して実行させる予定でしたが、諸々問題があってSNS Topicを追加して対応した流れになります。

自身の振り返りも含めて、類似構成をプライベートのAWSアカウントで作成してみましたので、動作検証の様子も含めて記事にまとめてみたいと思います。

注:私が担当したのは要件や全体的な構成図が出来上がった状態から、必要なAWSリソースの構築や不具合の対応等です。前提となるアプリケーション設計や背景などの詳細は記載しません。

## 要件

### 実現したい事

* Cloud Watchでアプリケーション用ロードバランサー(NLB)の死活監視をする
* ステータス変更をアラーム条件として検知した際にLambdaを起動して通知をさせる
* アクセス制限方法としてOU(組織単位)による権限制御をする

### サービス概要

<登場人物>

*

元記事を表示

全自動生成AIメディアを作ってみた

# はじめに
自分で読む用に、AIが海外の生成AI関連のニュースやブログを自動で収集してきて翻訳してくれるスクリプトを書いたら、思いのほか使える感じだったので翻訳記事をブログとして公開することにしました。こちらです。

https://prompthub.info/

この記事では、やり方や記事を紹介します。部分的にでもマネすれば生成AIに限らず自分の興味のある分野のメディアが作れると思います。

# 全体的な流れ

全体的な流れとしては以下のようになります。
1. Google Alert
記事を収集します。
1. Email parser by Zapier
届いたメールをパースしてZapierに渡します。
1. AWS Lambda
記事のタイトルや本文を和訳してWordpressにポストします。

# Google Alert

https://www.google.co.jp/alerts?hl=ja

Google Alertは以下のような感じで自分の興味があるワードを設定すると、関連する記事を収集してくれてメールで届けてくれる無料のサービスです。
![google-ale

元記事を表示

API Gateway + Lambda + Puppeteer で任意の Web ページのスクリーンショットを撮って S3 に保存する

## 背景
Lambda で Puppeteer 経由で Chromium を起動して任意の Web ページのスクリーンショットを撮り、画像として S3 に保存する処理を作りたい。

## 環境
– M1 MacOS Sonoma 14.4.1
– node v20.10.0
– typescript v5.4.5
– [@aws-sdk/client-s3](https://www.npmjs.com/package/@aws-sdk/client-s3) v3.569.0
– [@sparticuz/chromium](https://github.com/Sparticuz/chromium) v123.0.1
– [puppeteer-core](https://www.npmjs.com/package/puppeteer-core) v22.7.1

## 手順
– ローカル開発環境の構築
– handler を実装
– Lambda にデプロイ
– API Gateway の設定
– S3, CloudFront の設定

## ローカル開発環境の構築
### プロジェク

元記事を表示

AWS Lambdaでrequestsを使うためのセットアップ

こんにちは。
株式会社クラスアクト インフラストラクチャ事業部の大塚です。

Python環境のAWS Lambdaを使うにあたってrequestsを使いたかったのですが、デフォルトのLambdaでは外部モジュールとなるrequestsは使えないようで。
これに気が付く前に、Lambdaを実行した結果が以下です。
“errorMessage”: “Unable to import module ‘lambda_function’: No module named ‘requests'”,と出ていますね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3219385/f775b7c7-2d24-a18c-d0de-2bc7fc29af2c.png)

これを解消するために、レイヤーというものを作ってLambdaに追加する必要があるようで、その手順の備忘録です。
※Cloud9で用意するのが簡単という記事を拝見したのですが、私はうまくいかずでした・・・

# 手順
レイヤーを作るにあたり必

元記事を表示

コンテナから作成したLambdaで、「Phase: init Status: timeout」になったことと解決方法

# 0. はじめに
こんにちは、yuzu_juiceです🥂
最近、Lambdaをコンテナで動かせることを知り、いろいろ遊んでいました。

# 1. 発生した事象
コンテナからデプロイしたLambdaを実行したところ、CloudWatchのログに以下のエラーが出ました。
“`
INIT_REPORT Init Duration: 10028.26 ms Phase: init Status: timeout
“`
# 2. 正しかった対応方法
Lambdaのコンソールから、環境変数を設定しました。
ローカルでテストしていた際はコードがDockerfileに設定した環境変数を参照していたため、Lambdaにデプロイ後もDockerfileに書いた環境変数が参照されるだろう、と思っていました。
実際は、コンテナからデプロイされたLambda関数は、Dockerfileの環境変数を読まず、Lambda側の環境変数を読み込むようです。

# 3. 試したけどうまくいかなかったこと
## Lambdaタイムアウト値の変更
Lambdaがタイムアウトしているのだと思い、「Lambda関数→設定→

元記事を表示

REST APIを作成してみる

# 概要

本記事は [AWSでWebアプリを構築してみる](https://qiita.com/ti_and6id/items/9670ee60965a4d10bec7) シリーズの5回目の記事です。
前回の記事は [こちら](https://qiita.com/ti_and6id/items/d329ce5e9dc838563d7f)。

# REST APIを作成してみる

## 1. Lambda 関数の作成

1. マネジメントコンソールからLambdaを開き、「関数の作成」をクリック

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630916/f4702244-d306-223c-c187-e1469e992aac.png)

1. 「一から作成」を選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3630916/ebbab1b5-1cab-6815-

元記事を表示

OTHERカテゴリの最新記事