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

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

LambdaをVPCに配置するかの検討ポイントを調べた

# VPC内リソースへのアクセス要件
LambdaがRDSやElastiCache、Amazon Redshift、Neptune DB clusterなど、VPC内部に配置されたリソースにアクセスする必要がある場合、Lambdaも同じVPCに配置する必要があります。(RDS Proxyなどほかの手段を取らない前提)

これにより、Lambdaはプライベートなサブネットにアクセスできるようになります。

# セキュリティ要件
セキュリティが重視されるシステムや、外部からのアクセスを防ぎたい場合には、LambdaをVPC内に配置することが推奨されます。

これにより、Lambdaの実行環境はパブリックインターネットから隔離され、アクセスコントロールが強化されます。

# インターネットへのアクセス要件
LambdaをVPCに配置すると、インターネットアクセスがデフォルトで無効になります。

VPCに配置されていないLambda関数は、インターネットに直接アクセスできるため、外部APIやWebサービスへの接続が容易です。

もしLambdaがインターネット経由で外部APIなどにアクセスする

元記事を表示

[Amazon Web Services]クロスアカウントロールで複数のLambdaランタイムを一括更新

Python3.9のサポート期限が迫り、Lambdaランタイムを更新する必要があります。
自分の環境では複数のAWSアカウントを所有しており、マネジメントコンソールによる各Lambdaランタイムの更新は非常に手間がかかると感じました。

そこで今回は、IAMRole,Lambda,StepFunctios,という要素を使い、
クロスアカウントロールで複数のLambdaランタイムを一括更新してみました。

## システム構成図
今回のシステム構成図は以下になります。
基本は下記記事を参考にさせていただいており、IAM権限設定やlambdaRunTimeUpdate関数処理内容をカスタマイズし、クロスアカウントでのLambdaランタイム更新をしていきます。
https://qiita.com/hirosys-biz/items/58465b5221e3e60b576a

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3822026/f7788470-a24e-e299-c974-8fbb66

元記事を表示

【リスト内包表記】ラムダ式と組み合わせたら困った話

## 目次
– [はじめに](#はじめに)
– [問題について](#問題について)
– [解決方法](#解決方法)
– [考察](#考察)
– [結論](#結論)
– [最後に](#最後に)
## はじめに
 リスト内包表記でのラムダ式の使用中に、期待と違う動作をされて困ったので、備忘録として解決策を置いておこうと思います。考察もしていますが、厳密な説明ではなく、あくまで筆者の解釈です。

## 問題について
“`python
l = [‘apple’, ‘grape’, ‘lemon’]
l2 = [lambda:[i, id(i)] for i in l]
for j in l2:
print(j())

>>>
[‘lemon’, 2409481603056]
[‘lemon’, 2409481603056]
[‘lemon’, 2409481603056]
“`
 このように、リスト内包表記の中でラムダ式を使うと、リストの要素が全て最後の要素と同じになってしまうので、これを解消する方法を紹介したいと思います。

## 解決方法
先に結論を言っておくと、以下のコードを

元記事を表示

【AWS】AWS Lambda Function URLsを検証!

## はじめに

この記事では「この前リリースされた機能って実際に動かすとどんな感じなんだろう」とか「もしかしたら内容次第では使えるかも」などAWSサービスの中でも特定の機能にフォーカスして検証していく記事です。主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど)
誤りなどがあれば書き直していく予定です。

今回はAWS Lambdaの機能として提供されたAWS Lambda Function URLs(以下、Function URLs)を検証してみます。

## この記事で伝えたいこと(Point)

– AWS Lambda Function URLsを使うとAPI Gatewayを使わずにLambdaの機能だけでAPIエンドポイントURLを作成できるよ
– AWS Lambda Function URLsの特色はどこかについて説明しているよ

## LambdaがURLを発行するようになったね

[AWS Lambda Function URLs の提供開始: 単一機能のマイクロサービス向けの組み込み HTTPS エンドポイント – Amazon Web

元記事を表示

NestJSによるLambdaとRDS Proxyのピン留め回避とプロキシ分割

## 問題
Lambda + RDS Proxy + Aurora構成のアプリケーションで、Lambdaの同時接続数がたびたび上限(1000)を突破することがありました。サービスクォータで同時接続数の上限を引き上げてみたものの、Auroraの接続上限(`db.r6g.xlarge`で2000)を超える設定をしても意味がないので、根本的な解決にはなりませんでした。

https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.Performance.html

RDS Proxyのメトリクスをみたところ、DB接続上限の80 %(= 1600)に設定しているはずなのに4000を超えるほどの`DatabaseConnections`がありました。あきらかにおかしい挙動だったので、ピン留めを疑いました。

### ピン留めによる接続数増加の原因
RDS Proxyのドキュメントをみたら以下の記載がありました。
> ステートメントのテキストサイズが 16 KB を超える場合、プロキ

元記事を表示

Next.jsをLambda Web Adapterでサーバレスに動かしてみた[AWS SAM]

# はじめに
こんにちは。elephantnodeと申します。

普段は都内で社内情シス+Web系エンジニアとして業務しています。

勤め先で**Next.js**を使ったWebサイトを**AWS Lambda**と**Lambda Web Adapter**を使ってサーバレスに動かしてみたので、構築した手順についてご紹介します。

AWSへのデプロイには**AWS SAM**を利用します。

またデプロイしたあとに**CloudFront**で**OAC(オリジンアクセスコントロール)**と**WAF**を利用して、Lambdaを保護しながら公開する方法もやってみましたのでそちらもご紹介します。

# AWS Lambda Web Adapterとは

**LambdaでWEBアプリを実行するためのオープンソースソフトウェアツール**です。

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

AWS Lambda Web Adapterは、「Webフレームワークで作ったアプリ」を入れたコンテナを、

元記事を表示

AWS Lambda+SNSのメール配信におけるエラーハンドリングを実装する

# はじめに
本記事ではAWSのLambdaとSNSを使用したメール送信において、エラーハンドリングを実装していきます。

# ゴール
下記の2点を確認することをゴールとします。

1. Lambda→SNS段階のエラーを検知し、エラーメールを送信できてる事
2. SNS→メール配信段階のエラー検知し、エラーメールを送信できてる事

# 処理フロー

“`
【正常系】
Lambda → SNS → メール配信

【エラー系1: Lambda→SNS段階】
Lambda → エラー発生 → エラーメール送信

【エラー系2: SNS→メール配信段階】
SNS → エラー発生 → CloudWatchメトリクスで検知 → アラーム状態 → エラーメール送信
“`

# 作るもの
– AWS Lambda:1つ
– Amazon SNS:1つ
– Amazon CloudWatch:1つ

# 1. SNSトピックの作成

## トピック・サブスクリプションの作成

トピックとサブスクリプションの作成手順については、次の記事に記載されてる方法を参照ください。

https://qii

元記事を表示

シェルスクリプトで AWS Lambda 用 docker イメージ の動作チェックと ECR にプッシュする

以下の内容で、ドッカーイメージを構築し、ローカルで動作確認後、ECRのリポジトリにイメージをプッシュする。

### 変更履歴
2024/10/31: シンプルな処理内容に修正
2024/11/03: ログイン認証する行を追記

### こんな感じの内容
作成するイメージ名: simple_lambda_function
コンテナ名: simple_container
タグ名: 今日の日付+イメージ名
Lamda関数名: simple_function
テストに用いるデータ: json形式

前準備:
・ECRにsimple_lambda_functionのリポジトリを作成する。

テストデータ:
“`json
{“input”: “Are you Okay”}
“`

### Windows上のWSLで実行可能なシェルスクリプトの用意
“`bash
#/bin/bash

# あなたのAWSアカウントID
export AWS_ACCOUNT_ID=’012345678910′

# リポジトリ名
export REPOGITORY_NAME=’simple_lambda_f

元記事を表示

Amazon Connectのフローで呼び出したLambdaのレスポンスを使用する方法

# はじめに
Amazon Connectのフローには、`Invoke Lambda Functionブロック` があります。
このブロックからLambdaを呼び出し、そのレスポンスをConnectのフロー内の属性に保存する事で、フロー内でLambdaのレスポンス値を使用することができます。
本記事では、Lambda関数からのレスポンスを `Play Promptブロック` に設定してテストチャットからフロー内で表示されるところまで実装していきます。

# 対象の方
– ConnectのフローからLambdaを呼び出す方法を知りたい方
– Connectのフローから呼び出したLambdaのレスポンスをフロー内で使用したい方

# ゴール
`Invoke Lambda Functionブロック` で呼び出したLambdaから下記のレスポンスを返します。Connectのフローを使用してテストチャットした際に、`おはよう`、`こんにちは`、`こんばんは` が順番に表示されることを確認します。

“`:Lambdaの返り値
{
‘test1’: ‘おはよう’,
‘test2

元記事を表示

LambdaをVPC内に作成する際、IAMロールに対するポリシーが足りずにエラーになった

# 開発環境

– Lambda
– VPC

# 前提

VPC内にLambdaを作成しようとしたところ、IAMロールに対してポリシーが不十分だよと指摘された。

# 発生したエラー

“`basic
The provided execution role does not have permissions to call CreateNetworkInterface on EC2
“`

# 内容
このエラーメッセージは、AWS Lambdaや他のサービスがEC2インスタンス上にあるネットワークインターフェース(ENI:Elastic Network Interface)を作成しようとしているが、アタッチされているIAMロールにその操作を行うための適切な権限がないことを示している。

この場合は、IAMロールに適切なポリシーが付与されていないことによるエラーメッセージとなる。Lambda関数がVPC内のリソース(例えば、RDSやEC2)にアクセス または作成される際、ネットワークインターフェースを作成するためにこの権限が必要。

VPC内で動作するLambdaはネットワークイン

元記事を表示

EventBridgeからLambdaに起動日時を連携する

# はじめに
EventBridgeからLambdaを起動する場合、EventBridge⇒Lambdaに日時情報を連携できないか 気になったので実際にリソースを作って調べてみました。

# 結論
EventBridgeから起動されたLambdaでは、`event` パラメータにEventBridgeのイベントの起動時刻(time)が含まれるためこれを利用できそうです。

“`:event
{
~~~
‘time’: ‘2024-10-29T15:30:00Z’,
~~~
}
“`

# ゴール
EventBridgeから起動したLambdaで、イベントの起動時刻を取得できることを確認します。

# Lambdaの作成

簡単なLambdaを準備します。

“`python:lambda_function.py
def lambda_handler(event, context):
event_time = event[‘time’]
print(event_time)
“`

# EventBrige

下記の手順でEventBrig

元記事を表示

別アカウントのLamdbaをinvokeする際の注意点

## やりたいこと
今回はECSから別アカウントのLambdaをinvokeする際に少し沼ったので注意点を挙げたと思います!

## やり方
### 権限の設定

#### 1. 呼び出し先のLambdaでの設定

**Lambdaのアクセス許可ポリシーの追加**
– Lambda関数に対して呼び出し元のアカウントから呼び出しを許可するためのリソースベースのポリシーを設定します。(Lambdaの実行ロールなどはいじる必要はありません!)
– AWS CLIでする場合は以下のコマンドを参考にしてください!

“`bash
aws lambda add-permission \
–function-name my-function \
–statement-id AllowInvokeFromAccount \
–action lambda:InvokeFunction \
–principal arn:aws:iam:::root
“`

– `my-func

元記事を表示

LambdaからRDSにアクセスができない理由

初めまして!CREとしてエンジニアをやってますkazuです🦌
業務では、社内システム自動化プロジェクトに携わってましてその中でLambdaから RDSへのアクセスがなぜできないのかという疑問が湧いてきたので、それぞれの役割と関係性について調べました。

# そもそも、LambdaからRDSに接続することになったワケ

本プロジェクトは、要件定義から開発まで一貫して担当しているプロジェクトであり、これまで社内において手動でやっていたのものを自動化する事が目的です。最終的にはLambdaからRDSにアクセスをし、本番DBの値を更新する事でその結果をSlackに通知する事を目指しています。

正直なところAWSに関する知識は乏しく、「Lambdaを呼び出して実行すれば、本番DBを更新できるだろう」と考えていました。

しかし、インフラ構成図をもとにフィードバックを受ける中で、LambdaからRDSへのアクセスが簡単ではないことを知り、その理由について疑問が湧いてきたので調べることにしました。

# なぜ、LambdaからRDSへ接続ができないのか

– “`RDSの作成場所がVPC内である

元記事を表示

GAS + API Gateway + Lambda 連携させてスプシの値をPOSTする

# はじめに
本記事ではGASからAPI GatewayのREST APIをコールする処理を実装していきます。

https://developers.google.com/apps-script?hl=ja

# ゴール
1. GASのスクリプトを実行して、スプレッドシートから取得した値をAPIにPOSTする
2. APIからステータス200でレスポンスが返ってくることを確認する

“`:GASのログイメージ
Response: {“statusCode”: 200, “body”: “test1 を受け取りました。”}
“`

# 作るもの
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/25bae9e1-43b9-bfe9-acb3-145f04bc23c1.png)

– 処理フロー:スプレッドシート→GAS→API Gateway→Lambda

# 1. Lambdaの準備
簡単なLambda のソースとして、本記事では下記のものを使用します。

“`p

元記事を表示

Lambda関数でMySQLに接続する(セルフホスト)

他社が公開しているパプリックなARNではなく、自前でレイヤーを用意するやり方。
https://qiita.com/drafts/2c74e5712d841a66a7ee

## ファイル準備
任意のディレクトリに、以下2ファイルを配置

“`yml:Dockerfile
FROM –platform=linux/x86_64 amazonlinux:2

ARG PYTHON_VERSION=3.11.1

RUN yum update -y && yum install -y tar gzip make gcc epel-release openssl11 openssl11-devel bzip2-devel libffi-devel \
&& curl https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz | tar xz \
&& export CFLAGS=$(pkg-config –cflags openssl11) && export LDFLAG

元記事を表示

ターゲットグループ障害発生時:Lambda関数でALBルールを制御し、障害時にメンテナンスページを表示する方法

## はじめに
この記事では、AWSのApplication Load Balancer (ALB) を使用し、ターゲットグループに紐づくすべてのEC2インスタンスが正常でない場合に、Lambda関数を利用して動的にメンテナンスページ(固定レスポンスページ)を表示させる手順を紹介します。

この設定により、アプリケーションの可用性を高めつつ、ユーザーに適切なメンテナンス情報を提供することが可能になります。

本記事が、誰かの技術の支えとなることを願っています!

## 前提:本記事は前回の検証の続きになります。

今回の内容は、以下の記事に続く検証内容です。

前回は、Application Load Balancer (ALB) を使用して複数のEC2インスタンスへの負荷分散を行い、CloudWatchの「**HealthyHostCount**」とEventBridgeを組み合わせてEC2障害を検知するシステムを構築しました。

**ALBで複数EC2インスタンスを負荷分散する手順**

https://qiita.com/free-honda/items/d8fbcd649a71

元記事を表示

クラウド運用の強化:CloudWatchの「HealthyHostCount」とEventBridgeを使ったEC2障害検知システムの作り方

## はじめに
AWSインフラストラクチャを運用する上で、EC2インスタンスの状態を継続的に監視することは非常に重要です。

特に、ターゲットグループ内に複数のEC2インスタンスが存在する場合、すべてのインスタンスが正常に動作していることを確認する必要があります。

本記事では、ターゲットグループ内の2台のEC2インスタンスでApacheサービスが停止したことを検知し、EventBridgeをトリガーする方法について解説します。

## 知識整理
ターゲットグループ内のEC2インスタンスの状態を監視するためには、以下のAWSサービスを活用します。

:::note
**CloudWatch アラーム:**
EC2インスタンスのヘルス状態を監視し、特定のメトリクスが閾値を下回った際にアラームを発報します。**具体的には、ALB (Application Load Balancer) のターゲットグループに関連するメトリクスである HealthyHostCountを使用します。**

**EventBridge:**
CloudWatchアラームの状態変更を監視し、アラームが発火したと

元記事を表示

Infrastructure Composer + SAM で簡単にインフラ構築してみた

## はじめに
 今回は、Infrastructure Composerを使用して、サーバーレスアーキテクチャを構築し、ChatGPTのレスポンスを受け取る仕組みを作ります。
使用する主なAWSサービスは以下です。

**Infrastructure Composer**:AWSのインフラを可視化し、設計や他のAWSサービスとの連携、リソース管理を簡単にするツール。
**Lambda関数**:サーバーレス環境で関数を実行できるサービス。
**SAM**:サーバーレスアプリケーションを簡単にデプロイ・管理するためのフレームワーク。

## ◾️前提条件:必要なツールを準備する
### **1.AWS アカウント作成**
まず、AWSアカウントが必要です。
まだ作成されていない場合は、[AWSの公式サイト](https://aws.amazon.com/jp/free/)でアカウントから作成をお願いします。

### **2.AWS CLIのインストール**
ローカル環境からAWSと連携するために、AWS CLIをインストールします。
[AWS CLI インストールガイド](https:/

元記事を表示

AWS LambdaでOpenAIのライブラリを使おうとして「No module named ‘jiter.jiter’」のエラー

## 環境
– AWS Lambda
– Python 3.12

## 先に解決策
openaiのバージョンを下げる(1.39.0にしたらエラーにならなかった)

## 何が起こったか
案件でAWS Lambdaを使ってChatGPTに投げたいということがあった。それこそchatGPTやQiitaを見ながら環境構築していきました。
– [AWS Lambda(Python)からOpenAIのGPT4のAPIを呼び出してみた](https://qiita.com/nabata/items/903a2ebff8e44516598e)

そこではじめは`Unable to import module ‘lambda_function’: No module named ‘pydantic_core._pydantic_core`というエラーになったのですが、これは解決策が載っていたので特に問題なく。
– [AWS Lambda Layers + OpenAI でつまづいた件](https://zenn.dev/galapagos/articles/a222e38a32f4ba)

次にタイ

元記事を表示

LambdaとS3間の再帰ループ検出の検証

# はじめに
株式会社ジールの @oreo_tです。
2024/10/9のアップデートで、AWSのLambdaとS3間の再起ループの検出と自動停止ができるようになりましたので紹介しようと思います。

今回の更新情報

https://aws.amazon.com/about-aws/whats-new/2024/10/aws-lambda-detects-stops-recursive-loops-lambda-s3/

Lambdaの再起ループ検出について

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

この機能は、Lambda関数が再帰的に呼び出されることで意図せず延々と動作し、莫大なコストがかかってしまうという事故を防ぐための措置で、デフォルトで有効化されています。
Lambda関数の設定で機能のオンオフの切り替えができますが、ループ処理を16回検知したら停止する、という閾値は変更できず固定になります。
SQS、Lambda、SNS間での再起ループ検出、自動停止は去年の7

元記事を表示

OTHERカテゴリの最新記事