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

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

AWS Lambdaを使用してGlueジョブをトリガーし、SNS通知を送信する方法

## はじめに
この記事では、AWS Lambdaを使用して、特定のS3イベントに応じてGlueジョブをトリガーし、その結果をSNSで通知する方法を紹介します。コード例には、すべてダミーの情報が含まれています。

## はじめに

AWS Lambdaは、イベントドリブンなサーバーレスコンピューティングサービスです。これにより、インフラストラクチャの管理を行わずにコードを実行できます。AWS Glueは、ETL(Extract, Transform, Load)ジョブを実行するためのマネージドサービスであり、AWS SNSは通知サービスです。

以下のコードでは、S3にファイルがアップロードされると、LambdaがトリガーされてGlueジョブを開始し、結果をSNSで通知します。

## コードの詳細

### 必要なライブラリのインポート

“`python
import boto3
from urllib.parse import unquote
import logging
import time
“`

– `boto3`: AWS SDK for Python。AWSサービ

元記事を表示

【AWS】terraformでSQSのメッセージをlambdaで処理してDynamoDBに保存する

## 概要
terraformでSQSのメッセージをlambdaで加工してDynamoDBに保存する
例として’deviceID’ と ‘createdAt’というカラムがあるデータの処理を実施する

## ポイント
– SQSのメッセージはエンコードされているので受け取るlambda側でデコードが必要
– lambdaのソースコードはS3に入れて管理する

## 構成
“`
.
│ backend.tf
│ data_transfer.tf
│ variables.tf

└─lambda_function
│ lambda_function.py

└─output
functions.zip
“`

## ファイルの中身

`backend.tf`
“`
terraform {
required_providers {
aws = {
source = “hashicorp/aws”
version = “~> 5.0”
}
}
cloud {
org

元記事を表示

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

前回の続きになります!
今回はHTMLの更新とAPIをたたくJSをS3にのせて実際にメールが送信されるか確認します。
前回記事はこちら

https://qiita.com/sakura11054/items/47bba94339cb62f037ef#api%E3%81%AE%E4%BD%9C%E6%88%90

S3でサーバーレスなHPを立てるお話はこちら

https://qiita.com/sakura11054/items/0b5e8603d6d4f92ac746

https://qiita.com/sakura11054/items/a29741cf124ba315d892

# S3のファイルを更新

## HTML
今あるindex.htmlを以下のものに変更します。
何の変哲もない、単純な入力フォームですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/4f3d8d9c-666f-1de6-d3ae-574f8aceaa7b.png)

“`html

元記事を表示

【AWS】Azure OpenAIをAWS Lambdaで呼び出そう!

### はじめに

Azure OpenAIをAWS Lambdaから呼び出したい!

マルチクラウドっぽく、AzureのサービスをAWSから呼び出したかった。
さらに、Azure OpenAIもAWSから呼び出せたらいいですよね。
しかしながら、呼び出しまでにいろいろつまずいたのでエラーメッセージとともに対応方法を共有します。

### 構成

構成はこんな感じ:point_down:です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/53c3f70f-4476-b9a5-3bb8-068104a8ce79.png)

### やること
 1. Azure OpenAIを作成、モデルをデプロイする。
 2. AWS Lambdaを作成する。
 3. AWS Lambdaレイヤーを作成、レイヤーの追加をする。
  3-1. AWS Lambdaレイヤーを作成する。
  3-2. レイヤーを追加する。
 **4. AWS LambdaでAzure OpenAIを呼び出す

元記事を表示

Lambda(Node.js)からDynamoDBに接続したときに502(getaddrinfo EBUSY dynamodb.ap-northeast-1.amazonaws.com)が出たときの対処法

# 事象
Lambda(Node.js) → DynamoDB に接続するがブラウザテストではうまくいく。
しかしJMeterでスレッド1~10で数分間負荷をかけると、最初のほうが良いが、しばらくすると 502エラー(getaddrinfo EBUSY dynamodb.ap-northeast-1.amazonaws.com)が断続的に発生する。

# 対策(AWSからの回答)
handler内でAWS SDKのサービスクライアントを生成すると発生するとのこと。

↓エラーになるコード
“`
import { DynamoDBClient } from “@aws-sdk/client-dynamodb”;

export const handler = async (event) => {
const client = new DynamoDBClient({}); <==== handler関数の中で new DynamoDBCLientしているのがダメっぽい // 処理 }; ``` ↓対策済コード ``` import { DynamoDBClient

元記事を表示

CloudWatchLogsのロググループをS3へエクスポートするLambdaの作成

# はじめに
EC2等からCloudWatchLogsへ格納されたログをS3へ格納する場合はGUIやCLIからCloudWatchLogsのcreate-export-taskを実行する必要がある。
シェルスクリプトを作成してサーバ上からcronで定期実行することで、
日次や月次でS3へのエクスポートが可能であるが、これをEventBridgeとLambdaを使ってサーバレスで実行できるようにPythonでLambdaの中身を作成した。

# 環境・事前準備
以下の言語・バージョンを使用する。
– Lambdaランタイム: Python 3.12

以下を前提とする。
– EC2からCloudWatchLogsへログが出力されていること
– CloudWatchLogsからエクスポート先となるS3バケットが作成済みであること

以下の仕様とする。
– エクスポートする範囲はLambda実行前日の12:30~当日12:30とする
– エクスポートする対象の定義はSystems Manager(SSM)のパラメータストアに定義する
– エクスポート先S3バケット内に”EC2/ホスト名/yy

元記事を表示

Bedrockの互換APIを作って、boto3のbedrock-runtimeからストリーミング形式で呼べるようにする

# この記事について

Bedrockのレスポンスストリーミングの応答は、データが壊れていても検知できるように工夫されています。この記事では、それと同じことをLambdaの関数URLで再現して、Bedrockの互換API(IAM認証あり)を作る方法を説明します。

また、作成した互換APIにオリジナルのモデルIDを増やします。

関数URLのレスポンスストリーミングについては説明を省いていますので、こちらの記事を参考にしてください。

https://qiita.com/moritalous/items/4e8a42cf00f23665eb5c

# この記事のレポジトリ

この記事のプロジェクトのレポジトリはこちらにあります
ソースコード全体はこちらで確認いただけます

https://github.com/ShotaOki/bedrock-custom-api

# 最終的にすること

boto3を使ったBedrockの呼び出しを、実装を変えずに、オリジナルのエンドポイントへ向くように変更します。

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

元記事を表示

【AWS CDK】Lambda in VPCからRDSにアクセスする

## TL;DR

とりあえずソース全文

lib/cdk-sample-stack.ts

“`typescript
import * as ec2 from “aws-cdk-lib/aws-ec2”;
import * as cdk from “aws-cdk-lib”;
import * as lambda from “aws-cdk-lib/aws-lambda”;
import * as secretmanager from “aws-cdk-lib/aws-secretsmanager”;
import * as rds from “aws-cdk-lib/aws-rds”;
import { Construct } from “constructs”;

const DB_NAME = “sampleDB”;
const DB_USER = “sampleUser”;
const DB_PORT = 3306;

export class CdkSampleStack extends cdk.Stack

元記事を表示

lambdaレイヤーを作成する(Python3.10 psycopg2)

## Python3.8 サポート終了
[こちらの記事](https://qiita.com/daiki7010/items/a2ad976b625be579a9c0)でlambda(python3.8)を使用したRDSの接続方法についての記事を書きましたが、2024年10月をもってPython3.8のサポートが終了するらしく、pythonのバージョンをあげた対応をしてみました。

## 作成するpythonのバージョン
今回は「Python3.10.14」で作成していきます。

## python3.10.14の理由
ランタイムを「Python3.12」、「Python3.11」それぞれ試しましたが、どちらも下記のエラーとなってしまいました。
“`
import module ‘lambda_function’: No module named ‘psycopg2._psycopg’
“`

[AWSドキュメント](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-

元記事を表示

cdkでECRのイメージがpushされずlambda関数がそれを読み込めないエラー

# Envs

“`
“dependencies”: {
“@aws-cdk/aws-lambda”: “^1.204.0”,
“@aws-cdk/aws-s3”: “^1.204.0”,
“@aws-cdk/aws-s3-deployment”: “^1.204.0”,
“@aws-cdk/core”: “^1.204.0”,
“aws-cdk-lib”: “2.126.0”,
“cdk-ecr-deployment”: “^3.0.68”,
“constructs”: “^10.0.0”,
“source-map-support”: “^0.5.21”
},
“`

# 問題点
awsのcdkを使用し、別stackで定義したECRリポジトリにイメージをプッシュ、そしてlambda関数を作成するコードが動かなかった。

“`ts
import * as cdk from ‘aws-cdk-lib’;
import { Construct } from ‘constructs’;
import * as la

元記事を表示

LambdaのFunction URLsを試してみた!

こんにちは、プログラミングが好きなブタさんです。
API Gatewayを使わずに Lambda のみで HTTPエンドポイントを作れるようになったので解説します。

マネジメントコンソールから Lambda関数を作成します。
言語は Python に設定します。

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

元記事を表示

Slackに絵文字が追加されたことを通知するチャンネルを作りました!

# はじめに

こんにちは。
今回は、Slack に新しい絵文字が追加された際に、自動で絵文字追加の通知を行うチャンネルを作成しました。

# 作成の経緯

最近人が増えてきたり、一緒に仕事する人が増えてきたりで、直接コミュニケーションをする機会が減ってきていると思っています。
なので、テキストコミュニケーションで気軽にリアクションが出来るようにしたいという思いで、今回通知チャンネルを作成するにいたりました。
加えて、便利な絵文字されたら自分も使いたいですからね。

# 今回やること

– 通知チャンネルを作る
– Slack App を作る
– AWS Lambda + API Gateway を作る

とっても簡単です。
最初 GAS で書けないかなぁと思っていたんですが、エンドポイントのアクセス制限を考えたときに、Slack が API をコール出来なさそうだったのでやめました。(Google WorkSpaceを使ってる場合ドメイン以外からのアクセスの選択肢がパブリックしかないため)→ 有識者いたら教えていただきたいです。。

もう少し詳しくフローを書くと
1. Slackに絵

元記事を表示

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)

※2024/6/25:Lambdaのコード修正しました。

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

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

元記事を表示

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が使う知識をサポートチ

元記事を表示

OTHERカテゴリの最新記事