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

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

AWS lambdaの拡張機能を使ってパラメータストアを取得するときに注意すること

## はじめに

クラウドコンピューティングが主流となる現代において、セキュアな設定情報や機密データの管理はますます重要になっています。特に、AWS(Amazon Web Services)を利用する企業や個人はその安全性と効率性を最大限に活用するためのツールやサービスを常に模索しています。この記事では、そんなAWSの中でも特に注目されている「AWS Parameters and Secrets Lambda Extension」を使ったときにハマったポイントがあったので紹介します。

## AWS Parameters and Secrets Lambda Extensionってなんぞ

AWS Parameters and Secrets Lambda Extensionは、AWS Lambda関数で利用する設定情報や機密データの取得と管理を簡素化するための拡張機能です。AWS Lambdaはサーバーレスコンピューティングを実現するためのサービスで、コードの実行に特化しており、従来のサーバー管理の煩わしさから解放されます。しかし、Lambda関数で利用する設定情報やシークレットの管

元記事を表示

エラーログ監視アラート: AWS Fargate + CloudWatch + Lambda + SNS

# はじめに

このドキュメントは、AWS Fargateを使用して実行されるWebサイトのエラーログを監視し、問題が発生した際にメールで通知するためのシステムを構築する手順を説明します。このシステムは、CloudWatch Logsを使用してログを収集し、Lambdaを使用してエラーログを検出し、SNSを使用して通知を送信します。

作成したリポジトリはこちらです。

https://github.com/sugiyama404/practice_cloudwatch_sns

## 目的

Webサイトの可用性と信頼性を確保するために、エラーログをリアルタイムで監視し、問題が発生した際に即座に対応することが重要です。このシステムは、以下の目的を達成するために設計されています。

+ **リアルタイム監視**: エラーログをリアルタイムで監視し、迅速な対応を可能にする。
+ **自動通知**: エラーログが検出された際に、自動的に通知を送信し、担当者に即座に知らせる。
+ **インフラの可視化**: AWSサービスを活用して、ログ監視と通知のインフラを効率的に構築する。

## イ

元記事を表示

Lambda使ってみたいけど、まだ使ったことがない人へ

# はじめに

AWS、サーバーレス、Lambdaなど名前は聞くが難しそうと思っている方も多いのではないでしょうか?
今回はサーバレスの何がいいのか、どんな時に使えるのか、どう使うのかなどにフォーカスして紹介できたらと思います。

# サーバーレスの特徴

一言で表すと以下のような感じです。

> コストを抑え、余計なことを考えずにコードを書いて実行できる

#### インフラストラクチャの管理不要

サーバーレスでは、クラウドプロバイダーがインフラのセットアップ、保守、スケーリングをすべて管理します。
基本的な保守運用やスケーリングを自動でやってくれると思っていただければ大丈夫です!

#### コスト効率
サーバーレスは「ペイ・アズ・ユー・ゴー」モデルを採用しているため、使用した分だけ料金が発生します。
どれくらいコストがかかるかざっくり案内します!
毎月1,500,000回のリクエストがあり、128 MBのメモリを使用して0.5秒で実行されるLambda関数を使用した場合、概算で11円です。

つまり、簡単な開発やテストをする分にはほとんど料金が発生しません。

:::note

元記事を表示

ECRにdocker pushしてもLambdaが古いイメージを参照する

# 課題
Makefileを用いてECRにイメージをdocker pushした。
Lambdaはlatestタグのイメージを使用しており、新しいイメージがlatestタグを取得したにも関わらず、新しいイメージが使われなかった。

# code

“`Makefile
PROFILE ?= default

ECR_URI := 123456789.dkr.ecr.ap-northeast-1.amazonaws.com
IMAGE_NAME=image-name
LAMBDA_FUNCTION_NAME=my-function

.PHONY: deploy
deploy: ecr_login
docker build -t $(IMAGE_NAME):latest -f ./xxx/runtime/xxx/Dockerfile ./xxx/runtime –no-cache
docker tag $(IMAGE_NAME):latest $(ECR_URI)/$(IMAGE_NAME):latest
docker push $(ECR_URI)/$(IMAGE_NAME):

元記事を表示

Amplify (Gen 1) で Lambda から Amplify の Branch を追加する

## やりたいこと

Amplify のアプリを組織管理用と各組織用の 2 種類作成して、組織管理用のアプリから組織を追加したときに、各組織用 Amplify のブランチを作成するということをやりたい。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599504/7dc37f52-06ca-c78b-5a79-5ff5e1d08ceb.png)

## 前提

– 各組織用 Amplify のソースコードは CodeCommit に push 済み
– 各組織用 Amplify も一度は push 済みで Build できることを確認済み

## Lambda でやること

1. Amplify の BackendEnviroment 作成
– [CreateBackendEnvironmentCommand](https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/client/amplify/command/Creat

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事