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

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

CloudFrontがLambda Functions URLへのOACに対応! の何がすごいか

# はじめに

CloudFrontのOrigin Access Control(OAC)がLambda Functions URLに対応しました。
つまり、Functions URLとCloudFrontのインテグレーションが実現できるようになりました!うおおおお!

https://aws.amazon.com/jp/about-aws/whats-new/2024/04/amazon-cloudfront-oac-lambda-function-url-origins/

と、このアプデの何がすごいの? という点がいまいち伝わってない人向けに、この記事ではもろもろの経緯とユースケースを紹介します。

## 経緯

### Functions URLs、その課題

2022/4にLambdaの組み込みエンドポイントとしてLambda Functions URLが利用できるようになりました。

https://aws.amazon.com/jp/blogs/news/announcing-aws-lambda-function-urls-built-in-https-endpoint

元記事を表示

AWS Lambda Function URLs(関数URL)がCloudfrontのOACに対応したので試す

# はじめに

AWS LambdaのFunction URLs(関数URL)は、Lambda単体でHTTPSのURLを発行し、HTTPリクエストをトリガーにLambdaを実行出来るようになる、非常に便利な機能です。
API Gatewayと統合せずともLambdaのみでWebAPIを構築出来るようになり、プロトタイピングやマイクロサービスに有用です。

## 関数URLの制限

ところで、関数URLの実行の認可は、IAMを用いた方法しかありませんでした(IAMロールベースの認可か、認可なししか無かった)。

Cloudfrontをリバースプロキシ的に前段に配置し、関数URLと繋ぐことで、ドメインを当てたりキャッシュを活用したり、便利な訳ですが、その際に上記が問題となります。というのは、CloudfrontからIAMベースのリクエストを行うには、Lambda@Edgeを利用するしかありませんでした(オリジンリクエストをIAMロールを付与したLambda@Edgeに任せる)。全てのリクエストでLambda@Edgeが実行されるとコストがかかりますし、せっかく関数URLはシンプルなのに、無

元記事を表示

#AWS アラーム通知実装パターンについて

# AWSアラーム実装パターンについて:
AWS環境内に各種リソースを監視するためにアラームを実装する必要があります。

監視リソース種類に応じてアラームの実装パターンもいくつか存在していて、リソース種類は大きく以下のように分類できるかと思います。
 A. メトリクス系(CPU使用率、メモリ使用率、コンテナ台数など)
 B. ログ系(エラーログ、ヘルスチェックログなど)

下図のように実際AWSコンソールも非常にわかりやすく、それぞれのグループに分けられています。
スクリーンショット 2024-04-09 17.09.15.png

メトリクス系は基本CPUやメモリなど使用率が想定値より超えたことを通知するだけなので、煩雑な設定をしないでCloudWatch Alarmをそのまま使用したほうが便利です。

ログ系は

元記事を表示

#AWS EC2、Fargate、RDS指定時間帯稼働用Lambda

# EC2、Fargate、RDS指定時間帯稼働について:
下記コスト削減、セキュリティ保護などの理由で、AWS環境に稼働しているEC2、Fargate、およびRDSなどのリソースを特定の時間帯のみ稼働させる必要があります。

・ コスト削減:
特定の時間帯にのみリソースを利用することで、クラウドサービスのコストを削減できます。例えば、夜間や週末には利用者が少ない場合、サーバーの稼働を停止したり、リソースをダウンスケールすることで、不要なコストを抑えることができます。
・ セキュリティ保護:
特定の時間帯にのみシステムを稼働させることで、潜在的なセキュリティリスクを最小限に抑えることができます。また、リソースの不正利用を防ぐために、特定の時間帯にのみアクセスを許可することもあります。
・ リソース最適化:
特定の時間帯に高い負荷が予想される場合、それに応じてリソースをスケールアップすることができます。たとえば、特定の時間帯にWebサイトへのアクセスが急増す

元記事を表示

サーバごとかつ日ごとに不定の時刻でEC2インスタンスを自動起動停止するLambda関数

# 作成経緯
まず筆者が下記のLambda関数を作成するに至った経緯を記す。

対象となっているサーバはベンダーが作業時に使う踏み台サーバである。
踏み台用のAWSアカウントを切り出し、SSMセッションマネージャーのポートフォワードで
ベンダーには踏み台サーバへアクセスしてもらっている。

この踏み台サーバの稼働時間は、ベンダーの作業によって変わるため一定ではない。
そのため、EventBridgeでサーバごとにルールを作成し、都度実行時間を更新するのは
手間がかかりすぎるため、EC2インスタンスの起動停止時間を可変にする仕組みを考えた。
折角作ったので備忘としてここに残す。

(正直EC2インスタンスに起動用タグ・停止用タグを付与し、
 タグを対象に月〜金の9時〜18時といった固定時間でEventBridgeルールを作成。
 ベンダーにはこの運用ルールを伝え、人間をルールに合わせて作業させればいいと思う。
 これができるなら本記事を読む必要はない)

# 概要
EC2インスタンスの起動停止を行うLambda関数を作成し、
この関数をEventBridgeで毎日毎時実行する。
対象とな

元記事を表示

LINEメッセージをAWS Lambdaで送受信してみたお話

## はじめに
業務にてLINE MessagingAPIを利用したLINEでのコミュニケーションツールを作成したので、技術共有と自分の備忘録もかねて書いていきます。
流れとしては、[公式LINEアカウントへのログイン処理をAWS Lambda経由で実装してみた](https://qiita.com/inacyc_k/items/8337489e3e148db1f9e5)の続きの実装になります。あわせてぜひ読んでいただければと思います。

## LINE MessagingAPI ってなに
みなさん、LINEの公式アカウント利用していますか?(私はよく佐川急便とかUNIQLOの公式アカウントをよく利用しています)LINEの公式アカウントをユーザーに友だち登録いただくことでメッセージが届いたり、チャット上で会話形式の質問に回答したりとWebサイトやメルマガよりも気軽に情報発信することができます。

このようにMessagingAPIは、
・さまざまなメッセージをユーザーへ送信
・ユーザーが送ったメッセージを受信
そして
・ユーザープロフィールの取得(アイコン画像やユーザー名)
・アカウ

元記事を表示

Slack連携による生産性向上の施策(その1)〜Workflow Builder編〜

# はじめに
こちらの記事は三部構成になっております。
– Slack連携による生産性向上の施策(その1)〜Workflow Builder編〜
– Slack連携による生産性向上の施策(その2)〜Slack App編〜
– Slack連携による生産性向上の施策(その3)〜AWS Lambda編〜

また、全ての記事の内容を含んだ動画も用意しております。
動画で確認したい方は[コチラ](https://www.youtube.com/watch?v=JE7ZVJ9yE9Q)まで。
※動画開始50分頃からの内容になります。

# 事の経緯
![スクリーンショット 2024-04-04 16.45.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763114/66db9017-f5c8-4045-9040-0dd90bebbb12.png)
![スクリーンショット 2024-04-04 16.47.23.png](https://qiita-image-store.s3.ap-northeast-1.

元記事を表示

AWS Lambda LayersでError importing numpy: you should not try to import numpy from its source directory

# AWS Lambda LayersでError importing numpy
AWS Lambda Layersでlangchainを使おうとして以下のエラーが発生しました。

“`
[ERROR] Runtime.ImportModuleError: Unable to import module ‘lambda_function’: Error importing numpy: you should not try to import numpy from
its source directory; please exit the numpy source tree, and relaunch
your python interpreter from there.
Traceback (most recent call last):
“`

Keith’s Layers (Klayers) のnumpyをレイヤーに追加して解決する。

## numpyのARNを確認

### Klayersへ遷移

https://github.com/k

元記事を表示

GitHub Actions + SQS + Lambda で main ブランチへ merge してから15分後に cloudfront キャッシュを削除する

# 処理の概要
1. GiHub Actions から、AWS SQS にメッセージを送信
2. SQS がメッセージ受け取ったら、15分後に Lambda を呼び出す
3. Lambda が aws create-invalidation コマンドを利用し、CloudFront キャッシュ削除を行う

# 何故そんな回りくどい事をするのか?

普通に GitHub Actions から create-invalidation を利用していましたが、AWS ECS を利用しているため古いタスクが終了し新しいタスクに切り替わる前に再度ユーザーがアクセスし、古いタスクのキャッシュが生成されるという状態になっていました

main ブランチへの merge から10分程度で ECS のタスクが切り替わっているので、余裕を持って15分後くらいにはキャッシュを削除させたかった

# 全体図

![AWS.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/76272/5a8525d9-6137-d502-

元記事を表示

Slack API の url_verification に Lambda + Python で応える

URL Verification Challenge の値を返せばOK

“`python
import json

def lambda_handler(event, context):
# Slack API からのリクエストボディを取得
body = json.loads(event[‘body’])

# URL Verification Challenge か?
if “challenge” in body:
# challenge の値を取得
challenge = body[‘challenge’]

# レスポンスを作成
response = {
“statusCode”: 200,
“body”: json.dumps({“challenge”: challenge})
}

# レスポンスを返す
return response

# レ

元記事を表示

API GatewayでLambdaと接続したREST APIを作成する(Bedrockの呼び出し結果の取得)

[Supership](https://supership.jp/)の名畑です。2024春アニメ開幕の季節がやってきましたが、[うる星やつらの最終クールのPV](https://www.youtube.com/watch?v=4hMO9mkM7Ac)ですでに涙腺が。

## はじめに

以下2つの過去記事では[Lambda](https://qiita.com/nabata/items/36a642597a92f0ece9d8)を経由して[Bedrock](https://aws.amazon.com/jp/bedrock/)の**Claude 3**を叩きました。

– [LambdaでBedrockのClaude 3を呼び出してみた](https://qiita.com/nabata/items/5bcc3beb76182f626040)
– [BedrockのナレッジベースでRAGを実装し、資料を元にした回答をClaude 3にLambda経由でしてもらった(ベクトルストアはAurora)](https://qiita.com/nabata/items/36a642597a92f

元記事を表示

AWS Lambdaがデプロイ後必ず一回失敗する原因がわかったけど解決できなかった

## 背景
趣味で、DiscordだけでTRPGができるbotを作っています。
(元々はslackの内輪向けbotだったのですが)
構成は、AWS Lambda+API Gateway+Dockerコンテナ内Pythonです。
元々はLambdaのPythonのWebテキストエディターで書いていたのですが
色々問題があったら変えて行くうちにDockerで管理するのが一番楽になってしまいました。

そんなLambdaで作ったアプリがデプロイ後、一回だけ失敗する状況に悩まされていたのですが
結局解決できなかった事を記載します。

## 問題の発生
手製のスクリプトでLambdaのコンテナイメージの更新していました。
それまで色々なデプロイパッケージを使っていてlambrollがとても使いやすかったのですが
コンテナ環境になった時に手製のスクリプトに変えました。

“`:sh
aws ecr get-login-password –region ap-northeast-1 | docker login –username AWS –password-stdin ${accound

元記事を表示

Lambda Web Adapterでplumberを動かす

# はじめに
Lambda Web Adapterという、HTTPで動くコンテナに対して仲介してLambdaで動くようにしてくれるツールがあります。

https://aws.amazon.com/jp/builders-flash/202301/lambda-web-adapter/

これを使って、Rのplumberをコンテナにして動かしてみました。

以前Lambdaで、plumberのようなRのREST APIを作りましたが、Lambda Web Adapterを使えば、plumberを使えるのでかなり楽です。

https://qiita.com/a_b_/items/1afde637201fb70592ce

# 概要

– Lambda非サポートのRを、Lambda Web Adapterを用いて実行
– Webアプリを対象としているので、plumberを使用

# 参考

https://zenn.dev/junnuj/articles/c2ba888670bc8e

# やってみた

環境はCloud9のm5.largeを使いました。t3.smallでもできま

元記事を表示

【aws-cdk-examples】API GatewayからLambda経由でDynamoDBを参照/更新する

# これは何をしたくて書いたもの?
私個人として、現在業務でアプリ開発に利用しているReact NativeをAWSと連携させたいと考えているため、そのための学習の一環としてReact Nativeの通信先のREST APIを提供できるAPI Gatewayを構築して、その挙動を確認してみることにしました。
CDKには[aws-cdk-examples](https://github.com/aws-samples/aws-cdk-examples/)というサンプルプロジェクトをまとめたリポジトリがあります。今回はその中の[api-cors-lambda-crud-dynamodb](https://github.com/aws-samples/aws-cdk-examples/tree/main/typescript/api-cors-lambda-crud-dynamodb/)というサンプルを実際にデプロイして動かしてみます。

# 構成
`cdk deploy`で構築できるリソースは、大まかには以下の画像の通りです。構築されるリソースの詳細は、[index.ts](https:/

元記事を表示

【AWS】APIGatewayでLambdaのアプリ側で発生した例外処理を500エラーで返したい。

## 背景

JavaアプリをLambdaでホストしているが、API Gateway経由でビジネスロジック側のエラー処理した際、ステータス上200で返ってきてしまい、困ったので調べた

## TL;DR

Javaだと例外処理の返却値が標準エラーの形式と合ってないので、レスポンス内容にステータスコード(5XX系)を埋め込む
200系のレスポンスマッピングテンプレート側でステータスコードを条件分岐させてマッチすればオーバーライドするように処理させると500エラーにできる。

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-override-request-response-parameters.html#apigateway-override-request-response-parameters-override-response

サンプルコード(Github)

https://github.com/tukapai/simple-lambda-java/tree/main

元記事を表示

サーバーレスアーキテクチャで翻訳 Web API を構築

## 本記事の概要
AWS Lambda、Amazon API Gateway、Amazon DynamoDB のうち、DynamoDB及びAWS Lambdaについて概要を理解したい思いから記事にしました。

参考サイト:

https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Serverless-1-2022-confirmation_422.html

## 作成する構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3518951/6eab7b47-d088-fa68-0c29-270dd24ac8c9.png)
API Gatewayがリクエストを受け付け、Lambdaを呼出し、Lambdaが翻訳機能であるTranslateを呼出してAPI GatewayからResponseを返します。最後にヒストリーテーブルとしてDynamoDBに保存します。

## ハンズオン開始
まずLambdaについて公式

元記事を表示

Slackで独自カスタマイズしたAIと会話してみた〜Lambda(AWS)とPython使用編〜

# はじめに
LLMの進歩著しい昨今、AIを使ってキャラクターとの会話ができるサービスも数多く出てきました。
今回の記事では、Spiral.AI株式会社のTwinRoomというサービスを使い、Slackで独自カスタマイズしたAIと簡単に会話してみます。

この記事で紹介する機能を活用すれば、開発者・企業独自のアプリケーションやサービスに独自カスタマイズしたAIキャラクターを簡単に組み込むことができます。

一例として、今回は自分たちで作ったAIキャラをTwinRoomのAPI経由でSlackに登場させて、会話させてみます。

**記事監修:** [わいけい(@yk_llm_gpt)](https://twitter.com/yk_llm_gpt)

https://zenn.dev/spiralai/articles/8af7cbf526c2e1

# 全体構成
最初に、ユーザーがAIに対するメッセージをSlackに投稿してから最終的にSlack上で返信が返ってくるまでの仕組みについて説明します。

まず、Slackにメッセージが投稿されてからのデータの流れについてです。

今回作

元記事を表示

【Python】Spotifyのプレイリスト作成をAWS Lambdaで自動化する

## TL;DR

– この記事では、PythonからSpotify Web APIを操作できるライブラリである**Spotipy**を使用して、プレイリスト作成を自動化する方法を紹介します。スクリプトの自動実行には**AWS Lambda**を使用します。

– プレイリストに入れるトラックの選定は、Spotify Web APIで提供されているレコメンド機能に基づき行っている(=使用するのみ)ので、推薦アルゴリズムの実装や工夫は特にありません。

– 自分の音楽好みに合わせたプレイリストを効率的に作成したい方や、SpotifyのAPIを使ったプロジェクトに興味がある方の一助となれば幸いです。

– 使用ツール、サービスは、以下の通りです。

– Python
– Python依存パッケージ (pandasなど)
– Spotify Web API (APIキーの発行に必要)
– Spotipy
– AWS Lambda、その他AWSのサービス (無料枠で対応できる範囲だと思います)

全体の処理のイメージは以下の通りです。

![aws-lambda-spoti

元記事を表示

Lamdaレイヤーを作成する(python3.8)

## Lambdaにレイヤーを追加する
Lamdbaでサードパーティライブラリを使用する場合には「レイヤー」を作成して、関数に追加する必要があります。
今回はレイヤーの作成方法をメモ

## Amazon Linux2環境の起動(作成)

LambdaはAmazonLinux環境なので、同一の環境で作成します

“`bash
docker run -it –rm amazonlinux:2 bash
“`

## Python3.8をインストール
“`
yum update -y
yum install -y amazon-linux-extras
amazon-linux-extras enable python3.8
yum install -y python3.8 zip
“`

※Python3.8にしている理由はAmazonLinux2(amazon-linux-extras)でインストール可能なバージョンが3.8だからです。
これ以上のバージョンにするには別な方法でインストールする必要がありますが、今回は割愛(一番簡単な方法のため)

インストール可能なバージョン

元記事を表示

Lambda ってなんですか〜SkillBuildersってのがある話

## はじめに

ちょっと執筆中です LTなどで使ったパワポを記事にしていこうと思います。
アプリケーション(まわりにJava アプリケーションエンジニアがおおかったのもあり、JAVA+Tomcatあたりのアプリケーション書いてる人を前提に進めます)エンジニア向けに書いていきます。

## 経緯

後輩や同僚から、「AWS始めたい」「アプリケーションエンジニアもそろそろサーバレスをしたい」「ラムだって何?」と、いろんなレベル感のメンバから聞かれるので書いたLT資料です。
行間が読めなくなるのでちょこちょこ説明を追記していこうと思います。

目標は「AWS Lambda を使い始める皆様へ」の第一歩目を作る。

## はじまり,はじまり〜

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8216/d0d8ddee-d8bf-2c83-db94-aef4f40fc978.png)

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

元記事を表示

OTHERカテゴリの最新記事