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

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

別アカウントの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のバージョンを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/a222e38a

元記事を表示

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

元記事を表示

Ruby on Rails&EC2,RDS使いのエンジニアがLambda,APIGateWay,DynamoDBに挑む!!

# この記事の目的
rubyやPHPでの開発経験やAWSのEC2、RDSの知見を活かして、AWSのLambda,APIGateway,DynamoDBをざっくりと理解する(例ではRuby on Railsで解説)

# こんな方に読んでほしい
– RubyやPHPで開発を経験を積んでいるとインフラはAWSの「EC2,RDS」を使用するケースが多い
– 今回、初めてAWSの「Lambda,APIGateWay,DynamoDB」を活用する事になった
– まだエンジニアの経験が浅い為、新しい知識や技術を理解するまで時間がかかる

無駄な前置きはなしにして、結論から!

# 経験値はこう置き換る
– APIGateWay = Ruby on Railsで言う所のroute.rb
– Lambda = Ruby on Railsで言う所のController(〇〇controller.rb)
– DynamoDB = schema.rb

これだけだとちょっとざっくりしすぎているので、ちょっとだけ深堀りしてみます。

# ざっくり深堀
– APIGateWay = 読んで字のごとくAPI(

元記事を表示

【ほぼ自分用】RDSのAutoScallingをクラスターDBに紐づくリードレプリカのいづれか一つがCPU使用率の閾値を超えた場合に発動させるLambda

# 目次
[1.はじめに](#1-はじめに)
[2.前提条件](#2-前提条件)
[3.実装内容について](#3-実装内容について)
[4.Lambda関数の中身](#4-Lambda関数の中身)
[5.まとめ](#5-まとめ)

# 1. はじめに
AWSコンソール上ではクラスター全体のCPU使用率の平均値がトリガーのAutoScallingとなってしまうため、CLIで設定できるクラスターに紐づいたリードレプリカ各々のCPU使用率をトリガーとしてAutoScallingさせたい旨で開発しました。
この要件実装したいよって人が他にも現れたら役に立てばなと

# 2. 前提条件
前提条件として、Lambda関数実行用のIAMロールが必要です。
RDS制御系のポリシーとCloudwatchにログを出力するための許可ポリシーあたりをアタッチしておけば問題ありません。
今回は、手っ取り早く以下二つを使用しました。
・AmazonRDSFullAccess
・CloudWatchFullAccess

# 3. 実装内容について

Lambdaで実装します。
ランタイムはpython3.12を使

元記事を表示

Lambdaのファイルディスクリプタ上限って、少なくない?

# 背景

最近組織内の全アカウントのリソース情報を収集するタスクをやっていますが、一日多くて一回走らせるくらいの処理なのでとりあえずAWS Lambdaを採用しました。結果ファイルディスクリプタ(ファイル記述子、本文ではFDと略称する)上限というものを知るようになりました。

引用[WikiPedia](https://ja.wikipedia.org/wiki/%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E8%A8%98%E8%BF%B0%E5%AD%90):
>ファイル記述子(ファイルきじゅつし、英語: file descriptor)とは、コンピュータプログラミングにおいてファイルへの参照を抽象化したキーである。

Lambdaにおいては、tcpコネクト(ex. EC2のクライアント)を作ったり、S3からファイルを開いたりするとFDが消耗されますね。

本筋に戻ります。例えば、全組織には100個のAWSアカウントが存在するとしましょう。加えて15個のリージョンが使用可能です。
全アカウントの全リージョンにおいてEC2インスタンスの情報が欲しいという

元記事を表示

AWS Lambdaのコンソール画面が大きく変わったので試してみた。

AWSが代表するサーバレスサービスであるAWS Lambdaの画面が大きく変わり独自のエディタからVSAWSが代表するサーバレスサービスであるAWS Lambdaの画面が大きく変わり独自のエディタから慣れ親しんだVisual Studio Code(VScode)のようなUIに変わったようなので早速試してみました。

# Lambda作成
まずはLambdaの作成です。
![スクリーンショット 2024-10-23 230714.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616483/18422278-6e09-de4a-d13f-5785233c51d5.png)
「関数の作成」からリソースを作っていきます。
![スクリーンショット 2024-10-23 234208.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/616483/4db43cad-8d52-1e9c-6448-97f53e550386.png)
!

元記事を表示

AWS Lambda + SNS でメール通知機能を実装してみた

# はじめに
本記事ではAWSのLambdaとSNSを使用して、Lambdaが実行されたときにSNSのトピックに登録されてる宛先にメール通知をする処理を実装していきます。

# ゴール
Lambdaを実行してSNSのトピックに登録してる通知先にメール通知が来ることを確認する

# 1. SNSトピックの作成

トピックを作成していきます。
メッセージの処理順序は気にしないので `スタンダード` を選択し、任意の名前でトピックを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/fbf2c540-d4c2-6fd5-15ea-126a330b9d2f.png)

トピックを作成したら通知先のEメールを登録したサブスクリプションを作成していきます。
プロトコルとエンドポイントを入力出来たら `サブスクリプション` を押下します。

– プロトコル:Eメール
– エンドポイント:任意のメールアドレス(通知先)

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

元記事を表示

AWS EC2とLambda利用シナリオ「知識整理」

### AWS EC2とLambdaの比較について、どのシナリオでそれぞれを利用するかを以下に示します。

## AWS EC2の利用シナリオ
■長時間のプロセス:
継続的に稼働するアプリケーションや長時間実行されるバッチ処理。

・具体例: オンラインゲームのサーバー、データ分析ジョブ、長時間実行されるバックグラウンド処理など。
・理由: EC2は常時稼働できるため、長期的なタスクに適しています。サーバーの起動やシャットダウンの時間を考慮する必要がありません。

■カスタム環境が必要な場合:
特定のOSやソフトウェアスタックが必要な場合。例: 特定のライブラリやフレームワークが必要な場合。

・具体例: 特定のデータベースサーバーやアプリケーションサーバー(例: Oracle DBや特定のアプリケーションフレームワーク)。
・理由: EC2インスタンスでは、好きなOSやソフトウェアを自由にインストール・設定できるため、特定の要件に応じた環境を構築できます。

■状態管理:
セッション情報やユーザーデータを保持する必要がある場合。EC2インスタンス上でのデータベースやキャッシュの管理

元記事を表示

AWS LambdaをNew Relicで簡単にモニタリング!

New RelicのAWS Lambda 統合をLambda関数に導入することで、関数のパフォーマンスや、トレースを監視し、パフォーマンス劣化やエラーの原因を迅速に特定できるようになります。本記事で導入手順を紹介します!

# New Relic Lambda 統合 とは
New RelicのAWS Lambdaの統合は、Lambda レイヤーでエージェントが提供されており、関数のコードを変更することなく、関数の内部動作を詳細に可視化します。 関数にレイヤーでNew Relicのエージェントを追加すると、関数が呼び出されるたびにDuration、スループット、トレースなどの主要なパフォーマンス メトリックを取得できます。

レイヤーを使わない計装方法やコンテナ化されたLambda関数への計装方法もありますので、手順の詳細は以下公式ドキュメントをご確認ください。

https://docs.newrelic.com/jp/docs/serverless-function-monitoring/aws-lambda-monitoring/instrument-lambda-function

元記事を表示

EventBrigeでスケジューラを作成して日次でLambdaを実行する

# はじめに
本記事ではAWSのEventBridgeを使用して、日次で特定の時間にLambdaを動かすスケジューラを実装していきます。

# ゴール
日次で21時にLambdaが実行されるようにEventBrigeでスケジューラを作成する

# 1. Lambdaの作成

EventBrigeから実行する簡単なLambdaを作成しておきます。

“`python:lambda_function.py
def lambda_handler(event, context):
print(“スケジューラにより処理を実行”)
return {
‘statusCode’: 200,
‘body’: ‘test’
}
“`

# 2. EventBridgeの作成

– **ルールの作成**

Amazon EventBridge > ルール > ルールの作成から定義を作成していきます。
任意のルール名、説明 を記載しルールタイプは `スケジュール` を選択します。

![image.png](https://qiita-im

元記事を表示

Lambdaを使ってS3にアップロードしたjsファイルのcontent-typeを変える

# 概要
S3にアップロードしたJSファイルのContent-Typeを変更するスクリプトを、Lambdaを使って実装しました。
この記事では、その方法を共有します。

# 動機
静的サイトをAWS S3でホスティングしようとした際、
フロントエンジニアにIAMのアクセスキーを渡してS3にサイトのソースコード(HTML, CSS, JSファイルなど)をアップロードしてもらいましたが、
JSファイルのContent-Typeが“`binary/octet-stream“`に設定されてしまい、サイトが正常に動作しないという問題が発生しました。

# 原因

コマンドラインからS3にファイルをアップロードする際に、Content-Type を明示的に指定しないと、AWSがファイルの拡張子に基づいて自動的にContent-Typeを推測します。
この推測が正しく行われない場合があり、特にJSファイルでこの問題が発生するようです。

# 対応
本来であれば、S3にファイルをアップロードする際に正しいContent-Typeを指定すべきですが、フロントエンジニア側の設定変更ができない状況だった

元記事を表示

【初学者】AWS Lambdaについて

Lambdaについて全く知らなかったので、学んだことの概要をアウトプットしたく記事にしました。

## AWS Lambdaとは?
Lambdaは、「サーバーレスコンピューティングサービス」です。
サーバーレスとは、ユーザーがサーバーの管理や運用を意識せずに運用することができるサービスで、Lambdaの実行環境はAWSが提供してくれます。

### どんなときに使う?

Lambdaは、次のような状況で便利です。

1. **アクセスが予測できない時**:Lambdaはイベント駆動型なので、特定のイベント(トリガー)が発生したときに自動的にコードを実行します。そのため、EC2のように1日中仮想サーバーのインスタンスを立ち上げて置く必要がなく、アクセスした回数分だけのコストで済みます。
2. **短時間で完了するバックエンド処理**:Webサービスのバックエンドとして使用できます。Lambdaは必要なときにコードを実行し、リクエスト数に応じて自動でスケールするので、インフラ管理を気にせずアプリケーションロジックに集中できます。

### メリットとデメリット

– **メリット**

元記事を表示

Lambda関数を使用してECRの最新イメージをECSにデプロイする手順

# 手順

1. Lambda関数の作成:

“`python
import boto3 # AWS SDKをインポート
import os # 環境変数にアクセスするためのモジュール

def lambda_handler(event, context):
# boto3を使用してECSクライアントを初期化
ecs = boto3.client(‘ecs’)

# 環境変数からECSクラスター名とサービス名を取得
cluster_name = os.environ[‘ECS_CLUSTER_NAME’]
service_name = os.environ[‘ECS_SERVICE_NAME’]

# ECSサービスを更新
response = ecs.update_service(
cluster=cluster_name, # 更新するECSクラスターを指定
service=service_name, # 更新するECSサービスを指定
forceNewD

元記事を表示

OTHERカテゴリの最新記事