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

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

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に関する知識を読み込ませたナレッジベースを作成して

元記事を表示

Go(guregu)+lambda+dynamoDBでデータのやりとりをしよう

## はじめに
この記事では、Go(guregu)を用いてLambdaを介し、DynamoDBとのデータのやりとりを紹介します。

## lambdaを動かしてみよう
2023/12/31にLambdaのGoランタイムがサポート終了となりますが、buildしてLambdaへ渡すため、ランタイムは必要ありません。

まずは簡単なコードから実行してみましょう。任意のディレクトリで以下のコマンドを実行して、プロジェクトを作成します。

まずは簡単なコードから実行していきましょう。
任意のディレクトリで
“`sh
$ mkdir go-lambda-test
$ cd go-lambda-test
$ go mod init test
“`
上から順に実行し、プロジェクトを作成していきます。
ディレクトリ直下にmain.goを作成し、以下のコードを記述します。
“`main.go
package main

import (
“context”
“github.com/aws/aws-lambda-go/lambda”
)

// ハンドラ関数を定義
func handler() (

元記事を表示

LambdaでSQS発行&受取り

`Lambda`->`SQS`->`Lambda`をした。
SDK for JavaScript (v3)で構築。Web上にはv2の情報など多くあったので、探すのに時間かかったん。。
これしてたら半日終わった…orz

## やりたかったこと
`Lambda1`から大量のキューを発行して`Lambda2`がキューを受け取って順序関係なく処理をする。

## 前提
– Lambdaが使える
– SQSキューが作成されている
– Lambdaに実行ロール,アクセス権限が設定されている(SQSとか..)

## 実際のコード
### `Lambda`から`SQSMessage`を発行
“`javascript:SQSMessage発行する側
import { SendMessageCommand, SQSClient } from “@aws-sdk/client-sqs”;

// SQSキューを作成すると発行されるよ
const SQSQueueUrl = “https://sqs.ap-northeast-1.amazonaws.com/00002222244

元記事を表示

Slack上で投稿された内容を集計

# 今回やりたかったこと
slack上で下記を実現したい
1. スラッシュコマンドでlambda呼び出し
1. 呼び出されたチャンネルで全ての投稿を取得
1. 投稿された内容をエクセルで出力し、コマンド実行ユーザに送付

※この後別でやりたいこともあるので、まだ作成中。。できたら追記

# slack側での設定
設定詳細については省略。
特殊なことは実施しておらず、アプリケーションの作成とスコープの設定のみ実施。
スコープについては下記を設定した。
– channels:history
– chat:write
– commands
– files:write
– im:write
– users:read
# lambdaの設定
関数URLを設定。slack側のスラッシュコマンドで呼び出すURLに設定した。

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

layerにはexcelJsとslackのAPIをzip化したもの登録した。

また、スラッシュコマンドで呼び出したものについ

元記事を表示

DiscordアプリをAWS SAMで作った話(概要・システム構成編)

## はじめに

作成したのは、マップ上をボタンコンポーネントで移動し、宝石を探すゲームです。

![play.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3781648/f295ca1e-3c36-fd04-16a6-bdf8ab0d16ab.gif)

※ [ゲームインストールリンク](https://discord.com/oauth2/authorize?client_id=1229496306360123392)

最近[IEOなどで話題](https://gamebiz.jp/news/387484)になった[ブリリアントクリプト(Brilliantcrypto)](https://discord.gg/brilliantcrypto)というゲームのDiscordコミュニティに、発表当初から参加しています。

2023年末のβテスト後、リリースや各種情報解禁までの間、コミュニティが閑散とした時があったのですが、その時にネタ的に作り始めたファンゲームです。

Brilliantcryptoは

元記事を表示

GoのLambdaをGithub Actions + Terraformでデプロイする

# はじめに
Terrformを使ってインフラ管理しているのですが、Lambdaのデプロイにちょっと手間取ったので、記録を残しておきます。

# 実現したいこと
– Github Actions + TerraformでLambdaをデプロイしたい
– LambdaコードはTerraformコードとは別ディレクトリで管理(同じリポジトリではある)
– 言語はGo
– Lambdaのコードに変更があった場合と、Terraform側のコードに変更があった場合のみデプロイが実行されるようにしたい

# Github ActionsでTerraformを扱えるようにする

OIDCを使って、Github ActionsでTerraformを扱えるようにする記事は色々ありますので、細かい説明は割愛させていただきます。

# Terraform
terraformの階層と違う階層にLambdaのファイルを保存したいと思いますので、その前提で以下のようなコードになります。

“`terraform
resource “terraform_data” “build_lambda” {
    //

元記事を表示

OTHERカテゴリの最新記事