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

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

AMIの登録解除と連動してスナップショットを削除する2024夏(~北の国から~)

北の国ではないですが(関東民)。
不要なイメージを削除したいがために、AMI登録解除をしても、スナップショット(EBS)は消えないという事を最近思い出した。思い出したそのころには大量のAMIがあり、もはやこんなの全部やってれんない、、、という状態に。

以下のリンクを見るも、どうも2024年はこの形だとなかなかうまくいかず。

https://dev.classmethod.jp/articles/ami-and-snapshot-delete/

[AWS] AMIの登録解除と連動してスナップショットを削除する2021

https://www.seeds-std.co.jp/blog/creators/2022-10-18-191421/

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229539/2564a9d3-8273-eeb7-c141-cedb2

元記事を表示

関数化しIAM認証をかけたLambda関数をPostmanから呼び出してみる

# やりたい事
IAM認証をかけたLambdaに対してPostmanからPOSTリクエストを出してレスポンスが返ってくることを確認する。

# 環境
– python:3.12

# Lambdaの作成
bodyの中身を返しているだけの簡単なLambdaを作成。

“`python:lambda_function.py
import json

def lambda_handler(event, context):
body = event.get(‘body’)
if body:
data = json.loads(body)
else:
data = {}

response = {
‘statusCode’: 200,
‘headers’: {
‘Content-Type’: ‘application/json’
},
‘body’: json.dumps({
‘message’: ‘Hello from

元記事を表示

急に “Lambda security notification” って何ですか!?

# はじめに
もう半年以上、バーストし続けてメンタルクレジットが枯渇気味の [@\_\_\_nix___](https://twitter.com/___nix___) です。

さて、AWS Health Dashboard の通知を Chatbot 経由で Slack に送信していたり、或いはメールで次のような案内があったと思います。(AWSアカウントを多く持っているとスパムのように大量に届くのですよね…)

AWS Health – AWS_LAMBDA_SECURITY_NOTIFICATION

> Lambda GetFunction API の認証に変更に際し、お客様のアクションが必要になる可能性があるため、ご連絡しております。 これまで、ListTags API を明示的に使用する場合にのみ、ListTags への権限が必要でした。しかし、GetFunction API 権限を持つプリンシパルにおいても、GetFunction 呼び出しにより出力されたタグ情報にはアクセスできました。2024 年 7 月 27

元記事を表示

【AWS Lambda】Responseの返し方一覧

※Node.jsのSyntax、Naming Conventionで記載します。

1. Return(シンプルで読みやすく、分かりやすいので推奨)

シンプルに`return`で呼び元に値を返します。

処理をキャンセルする場合は、`throw new Error()`を使います。

非同期処理の場合も、`async/await`を使い、`return`や`throw new Error()`で処理を続行、キャンセルする方法が[推奨](https://docs.aws.amazon.com/lambda/latest/dg/nodejs-handler.html#nodejs-handler-async)されています。

“`javascript:index.mjs
export const handler = async (event, context, callback) => {
if(event.request.something === ‘error value’) throw new Error(‘Error’)

元記事を表示

Lambdaでストリーミングレスポンスに対応する

# 背景

* Lambdaの関数URLを使用している。

* ストリーミングレスポンスを扱いたい。

# 方法

1. 関数URLの呼び出しモードを`RESPONSE_STREAM`に変更
![Screenshot 2024-06-14 at 12.12.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679785/ceb6d49d-85b4-79c3-75dc-e065f9fcded4.png)

2. 以下の環境変数を指定する。
“`text
AWS_LWA_INVOKE_MODE: RESPONSE_STREAM
“`

以上です。めっちゃ簡単!

# 詳細な状況

LangChainを使用しており、ストリーミングでレスポンスを返したかった。ローカルでは正常にストリーミングでレスポンスを返すが、Lambdaにデプロイすると、意図した挙動になりませんでした😭

補足:Lambdaには、[Lambda Web Adapter](https://aws.amazon.com/jp/build

元記事を表示

[初心者向け] SlackとChatbotとLambdaを使ってChatOpsを実現しよう!

## 概要
Slack(Chatbot)経由でLambdaを使ってChatOpsを実現できるのでその方法について解説します

## 前提
– SlackのワークスペースとChatbotとの連携が完了していること

## ChatOpsとは
Chatツール(Slack、Teamsなど)を通じてシステム開発・運用から一般業務などさまざまな業務の効率化を行う手法のことです
ChatOpsでできることは色々あり、Slackにメッセージを送ることで

– SSOユーザの発行
– SGへIPアドレスを登録
– デプロイ

などさまざまなことを行うことができます
また、Slackのワークフローを組み合わせることでより汎用性が高くなります

## Chatbotの設定
Chatbotの設定を行います
設定名とチャネルIDを設定します

![スクリーンショット 2024-06-29 17.47.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/625980/d07ae4f1-c4d9-eb1a-6bcb-c117a7b

元記事を表示

Lambda関数でDockerコンテナ化されたPythonのFastAPIサービスを動かす

# Lambda関数でDockerコンテナ化されたPythonのFastAPIサービスを動かす
* 参考にさせていただいたブログ : https://reffect.co.jp/aws/lambda-docker-fastapi
## ディレクトリを作成する
“`bash
docker -v
mkdir lambda_fastapi
cd lambda_fastapi
“`
## fastAPIサービスを実装する
“`bash
touch app.py
“`
* ~/aws/lambda_fastapi/app.py
“`python
from fastapi import FastAPI
from pydantic import BaseModel
from mangum import Mangum

class Item(BaseModel):
name: str
price: float

app = FastAPI()

@app.get(‘/’)
async def root():
return {“message”: “Hello from l

元記事を表示

サーバーレスベストプラクティスで初めて知ったこと

# はじめに
サーバーレス大好きなエンジニアです!
AWS SUMMIT 2024に行ってきて、たくさんのことを学んできました!
特に「サーバーレス開発のベストプラクティス」の内容が面白かったのでシェアしたいと思います。

# サーバーレスとは
サーバーやインフラの管理を気にすることなくアプリケーションを実行することができる最高の技術です。細かい設定を気にすることなく、すぐに価値を提供できることが魅力です。

# Lambdaのベストプラクティス
ここからAWS SUMMIT 2024の内容に触れていきます。

## TransportではなくTransform
まず、ハッとさせられたのは以下のことです。
>Transport (転送)ではなくTransform(変換)に使⽤する。

今までLambdaをどれだけ転送機能として使ってきたかを考えさせられました。
何でもかんでもLambdaに任せるのではなく、特定の変換処理を行うことに専念させると、より効果的に使うことができます。

## 繋げるLambdaを減らす
複数のLambdaを繋げるのではなく、できるだけシンプルに、独自の処理を

元記事を表示

LocalStack On Docker

以前からLocalStackのPro版を使っていたのですが、忘れっぽいので記事にしたいと思います。今回はDocker上にLocalstack(pro)を立てて、Lambda・SNSを作成し外部端末からLocalstackのSNSトピック宛てメッセージを送ってみたいと思います。Lambda関数は外部メールを送信するようセットしておきます。

<<イメージ図>>
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2335933/d888c9d8-a3ba-ed65-41c5-3be6698a47ec.png)

# 前提
ホストOS:Ubuntu 22.04.1 LTS
Docker version: 27.0.3, build 7d4bcd8
Docker Compose version: v2.28.1

# 1. Dockerコンテナ構築
まずは任意のディレクトリを作成し、そこにdocker-compose.ymlを準備します。
※マニュアル記載の内容からアドレスのみ変更(ホストOSのIP

元記事を表示

【Node.js】Lambdaから社内環境のSQL Serverに接続する方法

## はじめに
AWS Lambdaから社内環境のSQL Serverへの接続方法について紹介していきます:point_up_tone1:
SQLServerへの接続部分で具体的な値の例が無く、苦戦したのでより具体的に値を記載しようと思います!

## 開発内容
### パッケージのインストール
Node.jsでSQLServerへアクセスするために必要なパッケージをインストールします

“`
npm install mssql
“`
https://github.com/tediousjs/node-mssql

### Lambdaの設定
特定の環境からのみアクセス可とするため、VPCの設定を行います。
Lambdaの設定タブのVPC からVPC、サブネット、セキュリティグループを設定します。

### ソースコード

“`javascript
// パッケージの読み込み
const sql = require(‘mssql’)

// SQL Serverの設定
const config = {
user: ‘sa’,
password: ‘XXXXXXX’, //

元記事を表示

LangServeをAWS Lambdaにデプロイすると、アクセス時にファイルダウンロードになる

# 現象
AWS LambdaにLangServeをデプロイし、アクセスするとなぜかファイルダウンロードになる

![スクリーンショット 2024-07-02 19.43.45.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58745/9d8be00e-561f-6b3f-08ed-08af423d4b43.png)

# 原因
## ライブラリのインストール漏れ

## CloudWatchでエラーを追う
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58745/db8516f0-876a-d6bc-5935-fef857bfb085.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/58745/a19df5d8-8886-bdd1-3142-e37cb347bb87.png)

## requ

元記事を表示

Vue3(S3)とSupabase(AWS Lambda)で作るGoogleアカウント認証サイト

# はじめに

AWS Lambda(node.js)でSupabaseのクライアントを作成し、S3にデプロイしたVue3から使う方法を解説していきます。

また前回の記事でも行ったGoogleをプロバイダーとしてOAuth認証もAWS Lambda越しに操作します。

## この記事について

自分の理解度向上のために作成してますので、だいぶ長いです。Supabaseをサーバーレスで使う一例としてご参考になれば幸いです。

:::note warn
Supabaseに関する記事ですが、公式に則った利用方法ではありません。
実際の利用に関してはしっかりと`Row Level Security`を設定し、アクセスポリシーも設定しセキュリティ対策をしたうえで使うのが正攻法です。
:::

さもないと、怒られます!:flushed:

![caution.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38388/09b567f7-6f55-d827-4382-1b01ae784f1c.png)

こういうとこ

元記事を表示

LambdaでAppStoreの最新レビューを取得してSlackチャンネルに通知する

# はじめに

こんにちは、Gakken LEAP のエンジニアの okamotoです。

AppStoreのレビューを自動で定期的に確認し、新規で投稿されたものがあれば通知を行う仕組みを作成しました。

本記事ではAWS Lambdaでアプリケーションを実行し、Slackのチャンネルに通知するための手順を紹介します。

# 準備するもの

## アプリのレビューを取得するためのURL

`
https://itunes.apple.com/jp/rss/customerreviews/id=[Apple ID]/sortBy=mostRecent/xml
`

※[Apple ID]はレビューを取得したいアプリのAppStoreのURLに「idxxxxxxxx」で記載されています。

## 通知先のSlackチャンネルのURL

### 手順

* 以下のURLにアクセス

1. 「Create an APP」をクリック
![図1.png](https://qiita-image-store.s3.ap-nort

元記事を表示

WSLへのServerlessFrameworkの導入

# 自己紹介

乙井です……。(ヒロシです風)
Gakken LEAPという EdTech の会社で丁稚エンジニアをやっております。
本稿では WSL への ServerlessFramework の導入についてご説明します。
なお前回は[remi で入る PHP アップグレード](https://qiita.com/GleapPost/private/b25bb1f3309e548d976e)という記事を書いたりしています。

# 目次

– [自己紹介](#自己紹介)
– [目次](#目次)
– [前書き](#前書き)
– [前提条件](#前提条件)
– [コマンド](#コマンド)
– [下準備1](#下準備1)
– [Serverless Framework 導入](#serverless-framework-導入)
– [ローカル実行](#ローカル実行)
– [下準備2](#下準備2)
– [デプロイ・リモート実行](#デプロイリモート実行)
– [余談](#余談)
– [★エンジニア募集!★](#エンジニア募集)

元記事を表示

loggingモジュールを使用してLambdaのログをS3に保存する

# はじめに
本記事では、AWS Lambda で logging モジュールを使ったログ出力と、S3バケットへのログファイルアップロードを実施してみます。

# 環境
python : 3.12

# 前提
– S3 バケット(ログを保存する先)
– IAMポリシー設定(Lambda 関数が S3 にアクセスするためのの付与)

# Lambda関数

ログの設定周りを行います。
それぞれ作成したハンドラに対して出力するログレベルを設定します。ログのフォーマットを設定して、時刻、関数名、ログレベル、メッセージを含むようにします。

“`python:utils.py
import logging

def setup_logger(LOG_FILE):
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)

# ハンドラの作成
stream_handler = logging.StreamHandler()
file_handler = logging.FileHandle

元記事を表示

【AWS】Lambda(boto3)を使ってDynamoDBへ読み/書き込みを実施

# はじめに
Lambdaを使用してDynamoDBのテーブル読み込みをできますか?
私はSDKを利用して`dynamodb.query`などの関数を使用すればいいと考えていましたが、具体的な実装まで理解できていませんでした。

本記事はLambdaを利用してDynamoDBに対して、
一般的なアクションを実装してみた記事となります。

# 今回試してみる構成
This is Simple構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1764568/e5130438-1325-28b9-9e62-1cf0673118fa.png)

## DynamoDB構成
パーティションキー:Id
ソートキー:Timestanp
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1764568/b67bb6aa-bd6b-a5bf-6032-82cd717b2d41.png)

# 前提
## クラ

元記事を表示

AWSのコスト状況をLINEとDiscordに定期通知させてみる(高額請求回避)

# はじめに
Amazon Kendraの勉強をした後に作成したリソースを消し忘れており、`$262.12` (=42,169.21 円 2024/6/29時点)の請求が来てしまいました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/7389112b-6aa9-eca1-6349-19bb075f1d0d.png)

私がこまめにコストの方を確認していなかったのが悪いのですが、請求アラートの設定もできていなかったため今回請求アラートの設定を行いました。
またこの際に、勉強も兼ねて自分が使っているSNS(LINE、Discord)にAWSのコスト情報を通知する仕組みも実装してみました。
本記事はこれらの内容をまとめたものになります。

# 請求アラートの設定
AWS Billing から請求アラートをドキュメント記載の手順通り設定(AWS Billing > 請求設定 > アラート設定)するだけです。

https://docs.aws.amazon.com/ja_j

元記事を表示

Lambdaでrequestsモジュールを使おうとしたときに発生したエラーと対処法

# はじめに
Lambdaでrequestsモジュールを使おうとしたところ下記のエラーが発生。
エラー対象の備忘録も兼ねて本記事を作成。

“`:error
“Unable to import module ‘lambda_function’: No module named ‘requests'”
“`

# 原因
Layerを追加できてないかったから。

# 環境
– windows
– python 3.12

# やったこと
ローカルでpythonフォルダを作成しライブラリをインストール。
zip化したpythonフォルダをLambdaのLayerに追加する。

## pythonフォルダを作成

フォルダを作成します。

“`
mkdir python
“`

:::note warn

フォルダ名は`python`とすることに注意。
参考:https://soypocket.com/it/aws-lambda-python-error-no-module-named/

:::

## モジュールのインストール

requests モジュールをインストールします

元記事を表示

Aurora PostgreSQL のパスワードを Secrets Mangaer でローテーションさせる際にはまったこと

Aurora PostgreSQL のパスワードを Secrets Mangaer でローテーションさせる際にはまったことをご紹介します。

## 想定の構成

今回は以下のような構成を想定しています。

![スクリーンショット 2024-06-29 15.25.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3074001/27d9c359-e009-2bf3-e1e8-d3efd0eb3a3c.png)

ECS から Aurora PostgreSQL にアクセスするためのユーザ名やパスワードなどの認証情報を Secrets Manager に格納しています。また、認証情報は Lambda でローテーションさせます。

## はまったこと

PostgreSQL の接続 URL は”postgresql://【ユーザ名】:【パスワード】@【ホスト名】:【ポート番号】/【データベース名】”という形式です。PostgreSQL のパスワードに[パーセントコーディングの必要な文字](https://

元記事を表示

pythonでDecimal型をintとfloatに変換する

# はじめに
DynamoDBに登録したデータをLambdaで取得して返却しようとしたときに
“Object of type ‘Decimal’ is not JSON serializable”とエラーが出てしまいました。
Dynamo側から取得したデータを見ると数値がDecimal型になっており、Decimal型はjson.dumpsできないみたいです。
今回は整数で表現できるものは整数、実数値は実数値に変換したかったのでそのように処理を追加しました。

# 本題
下記が対象のコードです。
対象のデータを一度整数に変換して変換前のデータと比較して一致した場合、つまり小数点以下が0の場合はint、違う場合はfloatに変換して返却するようにしました。

“`python:main.py
import json
import boto3
from decimal import Decimal

def lambda_handler(event, context):
try:
def decimal_transform(obj):
if

元記事を表示

OTHERカテゴリの最新記事