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

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

EventBridgeを使用しS3へのファイルアップロードをトリガーにLambdaを動かす

# はじめに
本記事ではAmazon EevntBrige使用し、S3バケットへファイルをアップロードしたことをトリガーにしてLambdaを実行させてみます。

# EevntBrige とは?

AWSのサービスやSaaSで発生するイベントをトリガーとしてワークフローを動かすことができるサービス。
EevntBrigeを使用すればイベント駆動型アーキテクチャを簡単に構築する事ができる。

https://aws.amazon.com/jp/eventbridge/

# ゴール

S3へのファイルアップロードをトリガーとしLambdaを実行させる。

# 環境
python 3.12

# S3

対象のバケットのプロパティを選択。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/d1e7eb73-9e07-ed11-0283-22492bcd9158.png)

イベントの通知からAmazon EventBridgeの「編集」を選択し、通知をオンに変更。

![i

元記事を表示

LambdaのトリガーにS3を設定した際に発生したエラーと対処法

# 背景
新規で作成したLambda関数のトリガーにS3バケットを指定しようとしたところ下記のエラーが発生。エラー対処の備忘録も兼ねて本記事を作成しました。

# 発生したエラー

下記のエラーが発生。

“`
trigger の作成中にエラー が発生しました: Configuration is ambiguously defined. Cannot have overlapping suffixes in two rules if the prefixes are overlapping for the same event type.
“`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/7dee6883-8440-984a-508c-80181fe88eae.png)

# 原因
既存のLambda関数のトリガーに同じS3バケットを同様の条件でトリガーとしているものがあったため。

# 結論
EventBridge か Step Functionsを使用す

元記事を表示

【自由研究】Python × AWS Lambda で、コールドスタートでもキャッシュを使う

## TL;DR

たいして速くならないし、速くしたいならコールドスタートを避けるようなプラクティスを採用しましょう

:::note warn
「みなさんぜひやってみてね」というよりは自由研究シリーズです。
実運用には使わない方がいいかもしれません。
:::

## はじめに

[AWS Lambda](https://aws.amazon.com/jp/lambda/) はサーバーレスでバックエンドサービスのコードを簡単に実行できるサービスです。

AWS Lambda でプログラムを実行した環境は、一定時間経つと破棄されてしまうため、次の実行時にまたソースの取り込みと環境作成分の時間がかかります(コールドスタート)。

定期的に実行したり Provisioned Concurrency を使って環境を保つようにすれば、いざ実行するときに時間があまりかからないし Python のコンパイルキャッシュも効くのですが、私はなぜか「コールドスタートでもキャッシュを効かせてみたい」と思いました。
キャッシュをためるファイルシステムの分だけお金がかかるんですが、やってみようと思います

元記事を表示

S3とLambda、SESを用いてお問合せフォームを作成した話

前回はS3とRoute 53、CloudFrontで静的なHPの作成を行いました。
今回は前回のものによくあるお問い合わせフォームを組み合わせ、お問い合わせフォームからメールが送られるようにします。
2回に分けて記事を書かせていただきます。
前回時点でS3より左側の設定までは完了している部分です。
今回はS3から右側の設定を行い、次回S3と今回の部分をつなげます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/42f486e3-0bd8-4fab-cd2a-903e27b33f94.png)

## Amazon Simple Email Service
SESはクラウドベースのメールサービスです。
無料枠もありますが今回はS3からのメール送信となりますので有料になります。1,000通あたり$0.10になります。

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

元記事を表示

lambdaまたはAPI GatewayのAWSリソース(プライベートサブネット)へのつなぎ方

## はじめに
LambdaとAPI Gatewayの勉強をしていて、パブリックサブネット内にあるLambdaまたはAPI Gatewayからプライベートサブネット内のAWSリソース(RDS等)へのアクセス方法が似ていて、どちらがどちらか迷いそうだったのでまとめます。

## Lambdaのプライベートサブネットへのアクセス方法
作成したLambdaはLambdaサービスが所有するVPC内で実行されます。
デフォルトでは、Lambda 関数はアカウントのVPCに接続されていません。インターネットや、インターネットを経由してパブリックサブネット内のAWSリソースにはアクセスできます。
なので、以下の方法でプライベートサブネット内のリソースに接続します。
– NATゲートウェイの設定をする(VPC-to-VPC NAT)
– Lambdaの実行の際にENI (Elastic Network Interface) が、LambdaのVPC のサブネット構成ごとに割り当てれる
– プライベートサブネット内のリソースにアクセス
上記を実行すると、プライベートサブネット内へのリソースにはアクセスで

元記事を表示

AWS LambdaとEventBridgeを使ってOrganization内のGitHub Actionsの使用状況をSlackで通知するには

## 概要
AWS LambdaとEventBridgeを使ってOrganization内のGitHub Actionsの使用状況をSlackで通知する方法について解説します
記事の後半ではCloudFormationを使ってLambdaとEventBridgeを構築する方法についても解説します

## 前提
– Pythonを使用
– GitHubのAPIを使用するため、GitHub Tokenを発行済み
– Incomming Webhookを作成済み

## Organization内のGitHub Actionsの使用状況を取得するAPI
今回は以下のAPIを使って毎月の無料枠(分)と当月使用したGitHub Actionsの使用時間(分)を取得します
orgにはOrganization名を指定します

“`
GET /orgs/{org}/settings/billing/actions
“`

“`json:response
{
“total_minutes_used”: 305,
“total_paid_minutes_used”: 0,
“includ

元記事を表示

Serverless Frameworkでデプロイパッケージサイズ削減

Serverless FrameworkでLambdaをいくつか定義してデプロイしていたら、パッケージサイズが`1.3GB`ほどになっていので、削減します。

# コード

“`yml
package:
excludeDevDependencies: false
patterns:
– “!.git/**”
– “!node_modules/**”
– “!aws/**”
– “!__pycache__/**”
– “!.venv/**”
“`
`Python`*`Lambda`の構成だったので、`__pycache__/`,`.venv/`が含まれています。
環境に合わせて`patterns`に追記する。文字列の先頭にある`!`が含めないという意味になる。
これによって`1.3G`->`24mb`に🥳

# 参考
https://www.serverless.com/framework/docs-providers-aws-guide-packaging

元記事を表示

FAQがAIの力でパワーアップ!誰でもナレッジ情報を自由自在に活用できる仕組みをAmazon Bedrock(RAG)+ LangChain + GASで構築 ~完成品編~

# はじめに
こんにちは!CBcloudのRyoです:grinning:

私の所属するCBcloudでは、物流ラストワンマイルの配送プラットフォーム「ピックゴー」を運用しており、荷物を送りたい方、荷物を届けてくれる方を24時間365日、サービスを通してつなげています!

https://pickgo.town/?utm_source=google&utm_medium=cpc&utm_campaign=brand&utm_id=749340152&utm_term=pickgo&af_pid=google&af_c=brand&gad_source=1&gclid=CjwKCAjwyJqzBhBaEiwAWDRJVBRiSmk6aRJqjngMWLKe1uuwT-EGw6Ktv9Vu7EG8o7545efU0FJaeBoCKuMQAvD_BwE

弊社では24時間365日サービスをつなげていると同時に、もちろん荷物を送りたい方、荷物を届けてくれる方をサポートするサポートチームが存在します

今回はそのサポートチームに新たにAIの力を導入…だけではなく**AIが使う知識をサポートチ

元記事を表示

[AWS SAM] Selenium4をAWS lambda Python3.12で動かす

# はじめに

AWS SAMを使ってAWS LAMDA上でselenium3を使う方法をご紹介いたしましたが、当初目的が別にありました。

きっかけはこちらの方の記事でした。

selenium4の最新版を利用すれば、新しく追加されたselenium-managerという機能があり、簡易的なChromeブラウザと、そのバージョンにあったChromDriverを自動でインストールしてくれます。

また古いHeadless-Chromiumはselenium4に対応していないため、最新のchromeに対応させたかったのですが、なぜか手元のマシン(M2 Macbookpro)で動かず、手詰まりになっていました。

この記事は動作するようになったコードの紹介と、その解決方法についてのまとめです。

## こんな方におすすめ

* AWS Lambda python3.8以上でselenium4を使いたい方
* AWS SAMを使っている方
* Apple Silicon製のMac(M

元記事を表示

Lexで作ったbotをLambdaを使用してフリーインプット形式に対応させる

# やりたい事
インテントのサンプル発話に登録されたワード以外の文言が入力されても、LambdaからのレスポンスをLexのチャットに表示させたい。

# 課題
Lexのサンプル発話に登録した内容が入力されると指定したLambdaを呼ぶようにできるが、これだけでは特定のワードが入力された際にしかLambdaを呼ぶことができない。

# 結論
FallbackIntent に落ちてもLambdaを呼ぶように設定すると、LambdaからのレスポンスをLexのチャットボットのレスポンスとして表示させる事ができる。

# 環境
– Python:3.12
– Lex:v2

# FallbackIntent の設定

FallbackIntent のコードフックにチェックを入れておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/f3c30926-c74f-cfc6-9b3c-af57dba43338.png)

# Lexの準備

次の記事と同様の構成でLexの

元記事を表示

Amazon LexとLambdaを連携させてチャットBotを作ってみる

# はじめに
本記事ではAmazon LexとAWS Lambdaを連携させて、入力に対してLambdaが応答を返すBotの構築方法について記載します。Lexのチャットテスト画面から入力された値をLambdaで受け取り、LambdaからLexへレスポンスを返すところまで確認します。

# ゴール
Lexのチャットテスト画面(テスト ドラフトバージョン)でテキストを入力後に、Lambdaから応答が返ってくる事を確認する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/6544e539-0a7e-fccb-dc5a-b42b85bd6ef8.png)

# 環境
– Python:3.12
– Lex:v2

# Lambda側の準備
Lexと連携させるLambda関数を作成します。
詳細はコメントアウトの通りです。

“`python:lambda_function.py
def lambda_handler(event, context):

# イン

元記事を表示

AWSが公開している「チュートリアル: WebSocket API、Lambda、DynamoDB を使用したサーバーレスチャットアプリケーションの構築」をAWS SAMで試す

## はじめに

[チュートリアル: WebSocket API、Lambda、DynamoDB を使用したサーバーレスチャットアプリケーションの構築](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/websocket-api-chat-app.html)

上記を使って、WebSocketを使ったシステムをAPI Gateway、SAM、DynamoDB、Lambdaで構築する基礎を学びたいと思います。

上記資料では、[CFnテンプレート](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/samples/ws-chat-app-starter.zip)が用意されているものの、API Gatewayはコンソールで作成されているので、以下の別サンプルコードも参照し、自分が理解しやすいテンプレートに作り替えます。

https://github.com/aws-samples/simple-websockets-ch

元記事を表示

Dockerを使用してAWS Lambda Layerを作成するシェルスクリプト作ったよ

Dockerを使用してAWS Lambda Layerを作成する方法
AWS Lambdaで使用するライブラリを簡単にLayerとして作成する方法をご紹介します。この手順では、Dockerを使用してPythonライブラリをインストールし、それをLayerとしてパッケージ化します。

## 前提条件
そもそも自作しなくてもlayerがAWS公式から準備されてないか確認します。
また有志の方がまとめてくれてる
https://github.com/keithrozario/Klayers/tree/master
このリポジトリで自分の環境にあったlayerがあればそれを使うのが手っ取り早いです。

上記でもないマイナーなライブラリなどをlayerにしたい時、以下の手順で簡単にできるように
シェルスクリプトを作りました。
※pythonにしか対応してません。

Dockerがインストールされていることが前提です!

## 手順

### 1. 必要なフォルダとファイルの準備

まず、任意のフォルダに移動し、Layerに含めたいライブラリ名を`requirements.txt`ファイルに記述し

元記事を表示

【AWS】S3バケットのファイル作成をトリガーにLambdaを実行する

# はじめに
AWSのS3バケットにファイルをアップロードすることをトリガーにしてLambda関数を実行する方法について勉強したので備忘録も兼ねて本記事にまとめています。本記事では、S3バケットとLambda関数の設定手順、およびトリガーの設定方法を記載する。

# 環境
python 3.12

# S3側の準備
Lambdaから指定するバケットを作成します。

2. Amazon S3 > バケット > バケットを作成 を選択。
2. 任意のバケット名を入力し、右下のバケットを作成をクリック。(本記事ではバケット名を`test-lambda-trigger1`とします。)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/1114e61d-a0a7-e475-bae8-e1572d123795.png)

# Lambda側の準備

## 関数の作成
1. Lambda > 関数 > 関数の作成 から新規でLambdaを作成します。
2. 任意の関数名を入力し

元記事を表示

EC2インスタンスの自動起動および停止システムを設定する方法

クラウドコンピューティングサービス(例えばAWS)を使用する場合、コストを管理してリソースを最適化することが重要です。予約インスタンスとは異なり、EC2インスタンスは使用した分だけ課金されるため、インスタンスがアクティブである時間はすべて課金されます。

EC2インスタンスは24時間365日稼働するため、積極的に管理しないとコストがすぐに高くなります。不要な費用を避けるためには、必要な時にのみこれらのインスタンスを起動し、使用が終了したらすぐに停止するシステムを導入することが推奨されます。

:::note info
これは特に開発サーバー、テストサーバー、ステージングサーバーに当てはまります。これらを24時間365日稼働させるのではなく、業務時間中のみ稼働させるべきです。そうしないと、無駄な費用がかかってしまいます!
:::

このプロセスを自動化することで、インスタンスが不要に稼働し続けないようにし、必要な時に確実に利用可能になるようにします。例えば、プロジェクト管理や会計などのサービスを管理するためにLaravelアプリケーションを使用している企業では、従業員が出社する際にこのア

元記事を表示

LambdaでSESが受信したメールを一括取得する

# 導入
こんにちは。エンジニアのYamaです。

特殊なパターンですが、Amazon Simple Email Service (SES)で受信したメールをLambdaで一括処理することがあったので、備忘録的に残しておきます。

# 実装内容

今回作成したLambdaは、CloudWatch Eventsで毎日23時に実行することを想定しています。
SESの取得範囲は、前日の23時から当日の23時までのものになります。
また、SESから取得したデータの加工に関しては、割愛しています。

## Lambdaソース

“`python
import boto3
from datetime import datetime, timedelta

def lambda_handler(event, context):
# SES クライアント
ses_client = boto3.client(‘ses’, region_name=’your-region’)

# 今日の日付を取得
today = datetime.utcnow().date()

元記事を表示

RDSがフェイルオーバーした際、ECSで動作しているRuby on Railsを再起動する仕組みを構築した

# 概要
`RDS`がフェイルオーバを行うと`Ruby on Rails`(以下、`Rails`)では、ダウンしたDBを参照する現象が発生します。この問題により、`DB`を参照出来ない為、`Rails`が動作しなくなります。今回は、`RDS`のフェイルオーバーが行われたら、`RDS`のイベントサブスクリプション、`SNS`、`Lambda`を使用して、`ECS`で起動している`Rails`の`puma`を再起動する処理を構築しました。今回は、その実装方法を記載します。

# 前提条件
– `ECS`で`Ruby on Rails`の環境が動作している
– `Amazon aurora`(postgres)を使用している (RDSでも今回の実施は可能)
– `Terraform`を使用している (webコンソールから設定する事も可能)

# Lambdaの処理を動かす為の技術選定
フェイルオーバーが行われた事を`Lambda`に通知する機能として、RDSの[イベントサブスクリプション](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/

元記事を表示

ついにAPI Gatewayの統合タイムアウトが29秒の壁を超えられるように!実際に延長リクエストしてみた

# はじめに

こちらでははじめまして!
SimSta(しむすた)と申します。
普段は個人ブログ「しまがじ!」で、AWSのアップデートを毎週まとめるなどしています。

**しまがじ! 〜ホワイトシマリス飼いのガジェットブログ〜**

https://alta-whitechip.name

※ガジェットブログなのにまだガジェット記事が1個しかありません

うちの子も見てってね。

![IMG_7908.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3815817/3393f80e-589a-4d27-a09e-5e299d2fab9f.jpeg)

# API Gatewayのアップデート

早速ですが、2024/6/5に以下のアップデートがありました。

https://aws.amazon.com/jp/about-aws/whats-new/2024/06/amazon-api-gateway-integration-timeout-limit-29-seconds/

## 概要

API G

元記事を表示

Selenium3をAWS lambda python3.8以上で動かす[AWS SAM]

# AWS LambdaでSelenium

webスクレイピングで便利なseleniumですが、サーバーレスと組み合わせると、APIやFTPが無くてもデータ連携させたりできるので、重宝しています。

ただLambdaでseleniumを動かすにはheadlessブラウザのchromiumと対応するchromedriverが必要で、バージョンによってはうまく(ほとんど)動かなかったりします。

とくにpython3.8以上ではLambdaのOSがAmazon Linux2で稼働するようになったため、seleniumがモジュール不足で動かなくなってしまい、従来のようにコード一式zipであげてといった方法が使えなくなりました。

私も業務で運用フローに組み込んでしまっているので、死活問題。python3.8だっていつまで使えるのか。(EOLを見よう)

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

python3.8廃止は2024年10月14日、うん、すぐだね。:fearful:

というこ

元記事を表示

【やってみた】Agents for Amazon BedrockでLambdaとKnowledge baseに振り分ける

# はじめに

こんにちは、もちもちMAXです。
先日、Agents for Amazon Bedrockを使って色々試す機会があったので、今回はその内容を記事にしていきたいと思います。

## 作ったもの

今回作ったのは、Agentsを使って雑談とAWSに関する質問とを振り分けるシステムで構成図は下記の通りです。
\
![AWS_structure.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463753/c176d89e-ba6b-4daf-3811-d3327677c87e.png)
\
現時点では、Agents for Amazon Bedrockはアクションベースとナレッジベースが登録できます。アクションベースはLambda関数を呼び出すことで目的に応じた処理をおこなえます。
今回は、Lambda関数からBedrockの基盤モデルを呼び出して雑談の返答をおこないます。
ナレッジベースはいわゆるRAGシステムです。今回はAWSに関する知識を読み込ませたナレッジベースを作成して

元記事を表示

OTHERカテゴリの最新記事