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

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

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)

## 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`ファイルに記述し

元記事を表示

OTHERカテゴリの最新記事