- 1. Infrastructure Composer + SAM で簡単にインフラ構築してみた
- 2. AWS LambdaでOpenAIのライブラリを使おうとして「No module named ‘jiter.jiter’」のエラー
- 3. LambdaとS3間の再帰ループ検出の検証
- 4. Ruby on Rails&EC2,RDS使いのエンジニアがLambda,APIGateWay,DynamoDBに挑む!!
- 5. 【ほぼ自分用】RDSのAutoScallingをクラスターDBに紐づくリードレプリカのいづれか一つがCPU使用率の閾値を超えた場合に発動させるLambda
- 6. Lambdaのファイルディスクリプタ上限って、少なくない?
- 7. AWS Lambdaのコンソール画面が大きく変わったので試してみた。
- 8. AWS Lambda + SNS でメール通知機能を実装してみた
- 9. AWS EC2とLambda利用シナリオ「知識整理」
- 10. AWS LambdaをNew Relicで簡単にモニタリング!
- 11. EventBrigeでスケジューラを作成して日次でLambdaを実行する
- 12. Lambdaを使ってS3にアップロードしたjsファイルのcontent-typeを変える
- 13. 【初学者】AWS Lambdaについて
- 14. Lambda関数を使用してECRの最新イメージをECSにデプロイする手順
- 15. 技術検証: NLBでターゲットグループの自動切り替えをLambda関数で実現する手順
- 16. Lamda→DynamoDBへ接続した際のエラー解決方法
- 17. Amazon API GatewayとAWS Lambdaを組み合わせてみた
- 18. Step FunctionsでRDS×ElastiCacheを統合してみた!
- 19. 技術検証:API Gatewayを使ってLambda関数からS3の静的ページにリダイレクトする方法
- 20. 個人ブログのバックエンドを EC2 から Lambda に移行した
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
技術検証: NLBでターゲットグループの自動切り替えをLambda関数で実現する手順
## はじめに
本記事では、AWSのNLB(Network Load Balancer)を利用して、ターゲットグループを自動で切り替える方法について解説します。EC2インスタンスのヘルスチェック結果に基づき、正常時と障害時に応じてトラフィックの送信先を変更する設定を行います。
これにより、サービスの可用性を高めるとともに、自動化された障害対応が可能になります。
## 知識整理
:::note info
**まず、基本的な役割と機能を整理していきます。**
**ターゲットグループ:**
NLBがトラフィックを送信する先のリソースをまとめたグループです。通常、WebサーバーのEC2インスタンスが含まれます。**Lambda関数:**
サーバーレスでコードを実行できるAWSのサービス。今回は、ターゲットグループを自動で切り替える処理をLambda関数で実装します。**EventBridge(今回は、作成しない):**
AWSのイベントバスサービス。EC2インスタンスの状態変化(例: ヘルスチェック失敗)をトリガーにして、Lambda関数を起動するために利用します。
:::
Lamda→DynamoDBへ接続した際のエラー解決方法
今回は、同じリージョンにあるLamdaからDynamoDBへ接続し、データを挿入できたらゴールとなります。
その中で、LamdaからDynamoDBへの接続に手間取ったので解決方法を記載します。
– [開発環境](#開発環境)
– [使用していたコード](#使用していたコード)
– 発生したエラー
– [require→importへの変更](#require→importへの変更)
– [aws-sdkの使用](#aws-sdkの使用)
– [exportsの変更](#exportsの変更)
– [Lamda関数のIAMロールにDynamoDBへの適切なアクセス権限がアタッチされているか](#Lamda関数のIAMロールにDynamoDBへの適切なアクセス権限がアタッチされているか)# 開発環境
– Lamda
– ランタイム:Node.js 18
– DynamoDB# 使用していたコード
“`jsx
let doc = require(‘dynamodb-doc’);
let dynamo = new doc.DynamoDB(
Amazon API GatewayとAWS Lambdaを組み合わせてみた
## はじめに
こんにちは。
今回はAPI Gateway、Lambda、Translateを連携させてみました。本記事は以下記事の続編です。
https://qiita.com/uccy/items/33ffdcc855e54e1ba1fe
↓参考にしたハンズオンはこちら。
https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-Serverless-1-2022-confirmation_422.html
↓今回のゴール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3848705/0de145b5-a874-2b2b-e1d5-4d7af67de0cb.png)## やってみた
マネジメントコンソールにアクセスし、API Gatewayのページにアクセスします。
前回作成したtranslate-apiをクリックします。
![image.png](https://qiita-image-stor
Step FunctionsでRDS×ElastiCacheを統合してみた!
# はじめに ~RDS × ElastiCache って?~
#### 概要
Amazon ElastiCache は、フルマネージドのインメモリデータストアおよびキャッシュサービスです。
ざっくりいうと、RDSと比べ、複雑なデータ構造は持てないが、処理が超早いデータベースです。主な用途はこんな感じですね。
– データのキャッシュ保存
– セッションや重要なデータの高速読み取りがあります#### RDS × ElastiCache
以下の記事で紹介されているように、ElastiCacheにメインのDBのキャッシュを任せることで、処理速度の向上や、RDSのリードレプリカ数の削減によるコスト割引などのメリットを享受することができます。https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/creating-elasticache-cluster-with-RDS-settings.html
#### RDS × ElastiCacheの注意点
ここまで聞くと最高じゃん!となるのですが、ちょっとした注意点があり
技術検証:API Gatewayを使ってLambda関数からS3の静的ページにリダイレクトする方法
## はじめに
AWS Lambdaはサーバーレスコンピューティングを提供し、特定のイベントに応じてコードを実行できる柔軟なツールです。この記事では、Lambda関数からS3バケットにホストされた静的ウェブページにリダイレクトする方法を解説します。
リダイレクトを使うことで、Lambda関数のコードをシンプルに保ちながら、S3の静的コンテンツを利用(表示)することが技術的にできました。
## 知識整理
まず、S3とLambdaの基本的な役割を整理していきます。:::note
**Amazon S3 (Simple Storage Service):**
ファイルや静的コンテンツ(HTML、CSS、JavaScriptなど)を保存し、ウェブホスティングの機能も提供します。静的なウェブサイトを簡単にデプロイできます。**AWS Lambda:**
イベントドリブン型のサーバーレスコンピューティングサービスで、インフラの管理なしにコードを実行することができます。Lambda関数はAPI Gatewayと連携して、ウェブリクエストのレスポンスをカスタマイズ可能です。
:::
個人ブログのバックエンドを EC2 から Lambda に移行した
# はじめに
EC2 & ALB はコストが高すぎた。1 円にもならない個人ブログのために 1 か月 $40 という大金が消えていた。そのうち移行しよう、なんて甘い考えだったが、マネジメントコンソールのコストを見ていたら居ても立っても居られなくなった。
なぜだかわからないがとても不安になった。
そこで急遽移行を始めた。
# Lambda 関数の作成
幸いバックエンドは複雑なコードではなく、index.js という 1 つのファイルだけだった。ChatGPT にどのようにデプロイしたらよいか聞いた。
> AWS Lambdaは、ファイルシステムへの長期的なアクセスや常駐プロセスの保持を前提としていないため、標準的なExpressサーバーのコードをそのままLambdaにデプロイすることはできません。ただし、AWS LambdaでExpressアプリケーションを実行するために、aws-serverless-expressなどのライブラリを使用してHTTPリクエストを処理する形に変換することが一般的です。
`aws-serverless-express` を使うらしい。コ