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

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

AutoscalingグループのEC2を自動更新してみた

# はじめに
最近Autoscalingグループで稼働するWebサーバーに対して、アプリケーションの更新を自動化する機会があったので実装した機能を紹介させていただきます。

# 背景
以下の図のような、よくある構成でWebサーバーをホストする環境を構築しました。
* Application Load Balancer配下に、常時2台稼働するEC2にWebアプリケーションをホストしている。
* アプリケーションの更新用に、ALBには紐づかないEC2が1台存在する。

![AMI自動更新.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/a56f3df9-064e-e22f-0474-044f5b32757f.png)

上記の構成において、これまではアプリケーション更新用のEC2で更新・テストが完了したら以下の手順で、**手動**でAutoscalingグループのEC2を入れ替えていました。
1. アプリケーション更新用EC2を停止する
1. このEC2からAMIを作成する
1. 作成した

元記事を表示

DockerHubのトークンのキーローテーション機能をLambdaとSecrets Managerを使って実現しよう!

## 概要
LambdaとSecrets Managerを使うと秘匿情報のキーローテーションを実現できます
今回はDockerHubのトークンを使ってキーローテーションします
また、リソースはCloudFormationを使ってコード化します

## 前提
– DockerHubのアカウントを作成済み

## Lambda用のバケットの作成
Lambdaをzipファイルからデプロイする用のS3バケットを作成します

“`yml
AWSTemplateFormatVersion: 2010-09-09
Description: “S3 Bucket Stack For Account Setup”

# ————————————-
# Metadata
# ————————————-
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
– Label:
default: “Proje

元記事を表示

CloudFormationで作成したAPIGatewayとLambdaを動かす

# はじめに
今回はAPI GatewayをトリガーとしてLambdaを実行していきたいと思います。
API GatewayとLambdaの作成とテスト実行までやっていきたいと思います。

# 目次
・構成について
・Lambdaの設定項目
・LambdaのCloudFormation作成
・API Gatewayの設定項目
・API GatewayのCloudFormation作成
・Permission設定について
・動作確認
・最後に
・参考

# 構成について
LambdaとAPI Gatewayで構成します。
AWS環境はCloudFormationで作成します。
そのため、LambdaのコードやレイヤーのパッケージについてはS3から取得する必要があるのでS3も作成します。

S3の構築は以前の記事を参考に作成してください。

https://qiita.com/ogataro/items/71dd28babfcdf6410a3c

# Lambdaの設定項目
今回はnodejs.20.xを利用し、「Hello from Lambda!」と返答してくるようにします。
またno

元記事を表示

Lambdaを使ってDynamoDBの既存データに新しい属性を追加する

# はじめに
今回はLambdaを使ってDynamoDBの既存データに新しい属性を追加していきたいと思います。
これにより、DyanmoDBの既存データに対して一括で属性を追加できるようになります。

# 目次
・構成について
・DynamoDBの設定項目
・DynamoDBのCloudFormation作成
・Lambdaの設定項目
・LambdaのCloudFormation作成
・動作確認
・最後に
・参考

# 構成について
DyanmoDBとLambda、そしてS3で構成します。
DyanmoDBの既存データを一度CSVでダウンロードし、それを元にLambdaは新しい属性を追加するようにします。
AWS環境はCloudFormationで作成します。

S3の構築は以前の記事を参考に作成してください。

https://qiita.com/ogataro/items/71dd28babfcdf6410a3c

# DyanmoDBの設定項目
DyanmoDBの設定項目はIDをパーティションキーとして、Timeをソートキーとしています。
それ以外の項目はCloudFormati

元記事を表示

PythonをLambda関数としてデプロイする方法

この方法を模索してきましたが、ついにすべてのピースを組み合わせることができました。

[AWS Lambda](https://aws.amazon.com/lambda/)は、Pythonで書かれた関数をホストすることができます。これは「ゼロスケール」- 私の大好きなサーバーレスの定義です!- つまり、実際にトラフィックが発生した場合にのみ料金が発生し、トラフィックがないプロジェクトは運用コストがかかりません。

以前は、これらの関数をトリガーする動作するURLを取得するために多くの追加手順が必要でしたが、Lambda Function URLsがリリースされ、そのプロセスが劇的に簡素化されました。

それでもなお、まだ多くのステップがあります。ここでは、PythonウェブアプリケーションをLambda関数としてデプロイする方法を紹介します。

## AWS CLIツールの設定

これを行ったのはずいぶん前のことで、方法を覚えていません。AWSアカウントが必要で、[AWS CLIツール](https://aws.amazon.com/cli/)をインストールして設定する必要がありま

元記事を表示

ALBで1025文字以上のメンテナンス画面を表示する方法

### 背景
AWSのALB(Application Load Balancer)のリスナールールを使ってメンテナンス画面を表示することは一般的ですが、ALBのリスナールールには1024文字の制限があります。
そのため、1024文字を超えるメンテナンス画面を表示するための方法として、S3とLambdaを利用するアプローチを紹介します。
これにより、ALBのリスナールールの優先順位を変更することで、メンテナンス画面を自由かつ簡単に表示することができます。
設定時間も10分程度なので、ぜひやってみてください!

### 前提条件
– ALBを使用したWeb3層構造のアーキテクチャ構築済み(または構築予定の方)

### 構成概要
単純に、新しいルートを作って向き先を変えるだけです。(簡単でしょ!)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/923114/e9630579-5bcb-c761-7fd4-1c09e96f20fe.png)

### 設計の流れ
1. S3にメンテナンス画

元記事を表示

AWS Lambdaを使って粗品の「電池の切れかけた蟹」のチケット販売開始通知をLINEに送信してみた

## はじめに
筆者は粗品が好きで、単独ライブ「電池の切れかけた蟹」のチケットを毎回とっていますが、最近チケット販売の告知がなくなり、気付いたら販売終了してた….
となることが何度かありました。

そこで、チケットが販売されたら通知がくるものを作りたいと考え、
下記サービスについては初心者ですが、色々調べながら頑張って作ってみました。

## 環境・利用サービス
・Windows11
・Python 3.12
・AWS Lambda
・AWS ECR
・Docker
・LINE Notify

## とりあえずPython書いてみる

チケット販売が開始しているかを確認するため、pythonでseleniumを使って
吉本のお笑いライブチケット販売サイトの「[FANYチケット](https://yoshimoto.funity.jp/)」へクローリングを行います。

https://yoshimoto.funity.jp/

FANYチケットサイトをデベロッパーツールで確認したところ、
「芸人/公演名/会場で探す!」という検索欄で「粗品」と検索し、「電池の切れかけた蟹」というボ

元記事を表示

LambdaのエラーログをCloudWatchで検知しSNSでメール通知を実装する

# はじめに
本記事ではLambda、CloudWatch、SNSを利用してエラーを通知を行います。
CloudWatchに出力されるLambdaのログにおいて、Errorログが吐かれた際にはそれをトリガーとし、対象のメールアドレスに通知を送付します。

# 環境
Python:3.12

# Lambda関数の作成

loggingモジュールを使用して、意図的にエラーを起こすLambda関数を作成します。

“`python:lambda_function.py
import logging

logger = logging.getLogger()
logger.setLevel(logging.INFO)

def lambda_handler(event, context):
try:
logger.info(“This is an info message.”)

# 意図的にエラーを発生
raise ValueError(“Output an error message.”)
except

元記事を表示

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)

こういうとこ

元記事を表示

OTHERカテゴリの最新記事