- 1. loggingモジュールを使用してLambdaのログをS3に保存する
- 2. 【AWS】Lambda(boto3)を使ってDynamoDBへ読み/書き込みを実施
- 3. AWSのコスト状況をLINEとDiscordに定期通知させてみる(高額請求回避)
- 4. Lambdaでrequestsモジュールを使おうとしたときに発生したエラーと対処法
- 5. Aurora PostgreSQL のパスワードを Secrets Mangaer でローテーションさせる際にはまったこと
- 6. pythonでDecimal型をintとfloatに変換する
- 7. chiitilerでつくる地図タイルサーバー
- 8. AWS Lambda関数をGolangで実装し、Github Actionsで構築自動化してみた
- 9. Athenaでdouble型(実数型)を取得したら指数表記になってたので変換した話
- 10. S3とLambda、SESを用いてお問合せフォームを作成した話 3
- 11. AWS Lambdaを使用してGlueジョブをトリガーし、SNS通知を送信する方法
- 12. 【AWS】terraformでSQSのメッセージをlambdaで処理してDynamoDBに保存する
- 13. S3とLambda、SESを用いてお問合せフォームを作成した話 2
- 14. 【AWS】Azure OpenAIをAWS Lambdaで呼び出そう!
- 15. Lambda(Node.js)からDynamoDBに接続したときに502(getaddrinfo EBUSY dynamodb.ap-northeast-1.amazonaws.com)が出たときの対処法
- 16. CloudWatchLogsのロググループをS3へエクスポートするLambdaの作成
- 17. Bedrockの互換APIを作って、boto3のbedrock-runtimeからストリーミング形式で呼べるようにする
- 18. 【AWS CDK】Lambda in VPCからRDSにアクセスする
- 19. lambdaレイヤーを作成する(Python3.10 psycopg2)
- 20. cdkでECRのイメージがpushされずlambda関数がそれを読み込めないエラー
loggingモジュールを使用してLambdaのログをS3に保存する
# はじめに
本記事では、AWS Lambda で logging モジュールを使ったログ出力と、S3バケットへのログファイルアップロードを実施してみます。# 環境
python : 3.12# 前提
– S3 バケット(ログを保存する先)
– IAMポリシー設定(Lambda 関数が S3 にアクセスするためのの付与)# Lambda関数
ログの設定周りを行います。
それぞれ作成したハンドラに対して出力するログレベルを設定します。ログのフォーマットを設定して、時刻、関数名、ログレベル、メッセージを含むようにします。“`python:utils.py
import loggingdef 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 Decimaldef lambda_handler(event, context):
try:
def decimal_transform(obj):
if
chiitilerでつくる地図タイルサーバー
# はじめに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73197/f96c630b-42d9-96be-59f1-f0e8b8b2b6b9.png)*https://maps.gsi.go.jp/development/siyou.html より引用、地図タイルのイメージ*
地図タイルとは、ズームレベル(≒解像度)別にタイル状に分割された地図データのことです。例えば0/0/0という番地のタイルは`https://cyberjapandata.gsi.go.jp/xyz/std/0/0/0.png`で得られます。整数値3つからタイルの領域が一意になるのが、地図タイルの利点です。
# 地図タイルサーバー
地図タイルの作成方法には、①巨大なデータを事前にタイルに分割しておく方法、②リクエストがあった際にそのタイルを作成する方法の、2つがあります。メジャーなのは前者です。立派なサーバーや難しい実装がなく簡単に作成・配信できるためです。
①は静的タイルなどと呼ばれることがあり、作成
AWS Lambda関数をGolangで実装し、Github Actionsで構築自動化してみた
## 1. はじめに
この記事では、AWS Lambda関数をGolangで実装し、その更新を手動および自動化する方法について解説します。特に、GitHub Actionsを用いた構築自動化の手法に焦点を当てます。## 2. AWS Lambdaとは
AWS Lambdaは、イベント駆動型のサーバーレスコンピューティングサービスです。ユーザーはインフラストラクチャを管理することなくコードを実行できます。
https://aws.amazon.com/jp/lambda/## 3. GolangでのLambda関数実装
### 3.1 Golangの環境構築
※他記事を参考にしてください。### 3.2 簡単なLambda関数の作成
今回、Lambdaはコンテナイメージで実装しています。コンテナイメージにする利点や具体的な実装詳細については[エムスリーさんのテックブログ](https://www.m3tech.blog/entry/2023/08/31/110000)を参考にしました。
以下は要点です:
– GolangでのLambda関数作成手順
– AWS Lambd
Athenaでdouble型(実数型)を取得したら指数表記になってたので変換した話
# はじめに
LambdaとAthenaを使ってデータを取得、返却するプログラムを作りテストをしたところ「0.0003」などの小数が「3.0E-4」などの指数表記で帰ってきていました。
1つのLambdaで指定したテーブルの全列を取得できるような仕様にしており、特定の列をCASTするといったアプローチは取れなかったため指定されたテーブルのスキーマーをもとに取得列を動的に作成するLambdaを作成しました。# 本題
“`python:main.pyimport json
import awswrangler as wrDATABASE = ‘database_name’
TABLE_NAME = ‘table_name’
OUTPUT_LOCATION=’s3://example’def lambda_handler(event, context):
try:
# テーブルの列名、型を取得
query = f”””
select
*
from information_sche
S3とLambda、SESを用いてお問合せフォームを作成した話 3
実は2回で終える予定だったのですが、AWS SUMMITに行った際、AWSのサポーターの方から、「API Gateway使わなくても直接Lambdaの関数たたけるよ^^」と教えていただいたため、確かめることに…
前回までの記事はこちら
https://qiita.com/sakura11054/items/0b5e8603d6d4f92ac746
https://qiita.com/sakura11054/items/a29741cf124ba315d892
https://qiita.com/sakura11054/items/47bba94339cb62f037ef
https://qiita.com/sakura11054/items/678a3b45807999f63b75
# Lambdaの設定
Lambda側の設定は単純です!
前回までで作成したLambda関数を開きます。
設定タブを開くと画像のように関数URLとあるのでこれを開きます。
現状、関数URLなしと表示されているので、関数URLを作成を押下します。![image.png](https://
AWS Lambdaを使用してGlueジョブをトリガーし、SNS通知を送信する方法
## はじめに
この記事では、AWS Lambdaを使用して、特定のS3イベントに応じてGlueジョブをトリガーし、その結果をSNSで通知する方法を紹介します。コード例には、すべてダミーの情報が含まれています。## はじめに
AWS Lambdaは、イベントドリブンなサーバーレスコンピューティングサービスです。これにより、インフラストラクチャの管理を行わずにコードを実行できます。AWS Glueは、ETL(Extract, Transform, Load)ジョブを実行するためのマネージドサービスであり、AWS SNSは通知サービスです。
以下のコードでは、S3にファイルがアップロードされると、LambdaがトリガーされてGlueジョブを開始し、結果をSNSで通知します。
## コードの詳細
### 必要なライブラリのインポート
“`python
import boto3
from urllib.parse import unquote
import logging
import time
“`– `boto3`: AWS SDK for Python。AWSサービ
【AWS】terraformでSQSのメッセージをlambdaで処理してDynamoDBに保存する
## 概要
terraformでSQSのメッセージをlambdaで加工してDynamoDBに保存する
例として’deviceID’ と ‘createdAt’というカラムがあるデータの処理を実施する## ポイント
– SQSのメッセージはエンコードされているので受け取るlambda側でデコードが必要
– lambdaのソースコードはS3に入れて管理する## 構成
“`
.
│ backend.tf
│ data_transfer.tf
│ variables.tf
│
└─lambda_function
│ lambda_function.py
│
└─output
functions.zip
“`## ファイルの中身
`backend.tf`
“`
terraform {
required_providers {
aws = {
source = “hashicorp/aws”
version = “~> 5.0”
}
}
cloud {
org
S3とLambda、SESを用いてお問合せフォームを作成した話 2
前回の続きになります!
今回はHTMLの更新とAPIをたたくJSをS3にのせて実際にメールが送信されるか確認します。
前回記事はこちらhttps://qiita.com/sakura11054/items/47bba94339cb62f037ef#api%E3%81%AE%E4%BD%9C%E6%88%90
S3でサーバーレスなHPを立てるお話はこちら
https://qiita.com/sakura11054/items/0b5e8603d6d4f92ac746
https://qiita.com/sakura11054/items/a29741cf124ba315d892
# S3のファイルを更新
## HTML
今あるindex.htmlを以下のものに変更します。
何の変哲もない、単純な入力フォームですね。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/4f3d8d9c-666f-1de6-d3ae-574f8aceaa7b.png)
“`html
【AWS】Azure OpenAIをAWS Lambdaで呼び出そう!
### はじめに
Azure OpenAIをAWS Lambdaから呼び出したい!
マルチクラウドっぽく、AzureのサービスをAWSから呼び出したかった。
さらに、Azure OpenAIもAWSから呼び出せたらいいですよね。
しかしながら、呼び出しまでにいろいろつまずいたのでエラーメッセージとともに対応方法を共有します。### 構成
構成はこんな感じ:point_down:です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288944/53c3f70f-4476-b9a5-3bb8-068104a8ce79.png)
### やること
1. Azure OpenAIを作成、モデルをデプロイする。
2. AWS Lambdaを作成する。
3. AWS Lambdaレイヤーを作成、レイヤーの追加をする。
3-1. AWS Lambdaレイヤーを作成する。
3-2. レイヤーを追加する。
**4. AWS LambdaでAzure OpenAIを呼び出す
Lambda(Node.js)からDynamoDBに接続したときに502(getaddrinfo EBUSY dynamodb.ap-northeast-1.amazonaws.com)が出たときの対処法
# 事象
Lambda(Node.js) → DynamoDB に接続するがブラウザテストではうまくいく。
しかしJMeterでスレッド1~10で数分間負荷をかけると、最初のほうが良いが、しばらくすると 502エラー(getaddrinfo EBUSY dynamodb.ap-northeast-1.amazonaws.com)が断続的に発生する。# 対策(AWSからの回答)
handler内でAWS SDKのサービスクライアントを生成すると発生するとのこと。↓エラーになるコード
“`
import { DynamoDBClient } from “@aws-sdk/client-dynamodb”;export const handler = async (event) => {
const client = new DynamoDBClient({}); <==== handler関数の中で new DynamoDBCLientしているのがダメっぽい // 処理 }; ``` ↓対策済コード ``` import { DynamoDBClient
CloudWatchLogsのロググループをS3へエクスポートするLambdaの作成
# はじめに
EC2等からCloudWatchLogsへ格納されたログをS3へ格納する場合はGUIやCLIからCloudWatchLogsのcreate-export-taskを実行する必要がある。
シェルスクリプトを作成してサーバ上からcronで定期実行することで、
日次や月次でS3へのエクスポートが可能であるが、これをEventBridgeとLambdaを使ってサーバレスで実行できるようにPythonでLambdaの中身を作成した。# 環境・事前準備
以下の言語・バージョンを使用する。
– Lambdaランタイム: Python 3.12以下を前提とする。
– EC2からCloudWatchLogsへログが出力されていること
– CloudWatchLogsからエクスポート先となるS3バケットが作成済みであること以下の仕様とする。
– エクスポートする範囲はLambda実行前日の12:30~当日12:30とする
– エクスポートする対象の定義はSystems Manager(SSM)のパラメータストアに定義する
– エクスポート先S3バケット内に”EC2/ホスト名/yy
Bedrockの互換APIを作って、boto3のbedrock-runtimeからストリーミング形式で呼べるようにする
# この記事について
Bedrockのレスポンスストリーミングの応答は、データが壊れていても検知できるように工夫されています。この記事では、それと同じことをLambdaの関数URLで再現して、Bedrockの互換API(IAM認証あり)を作る方法を説明します。
また、作成した互換APIにオリジナルのモデルIDを増やします。
関数URLのレスポンスストリーミングについては説明を省いていますので、こちらの記事を参考にしてください。
https://qiita.com/moritalous/items/4e8a42cf00f23665eb5c
# この記事のレポジトリ
この記事のプロジェクトのレポジトリはこちらにあります
ソースコード全体はこちらで確認いただけますhttps://github.com/ShotaOki/bedrock-custom-api
# 最終的にすること
boto3を使ったBedrockの呼び出しを、実装を変えずに、オリジナルのエンドポイントへ向くように変更します。
![struct.png](https://qiita-image-store.s
【AWS CDK】Lambda in VPCからRDSにアクセスする
## TL;DR
とりあえずソース全文
lib/cdk-sample-stack.ts
“`typescript
import * as ec2 from “aws-cdk-lib/aws-ec2”;
import * as cdk from “aws-cdk-lib”;
import * as lambda from “aws-cdk-lib/aws-lambda”;
import * as secretmanager from “aws-cdk-lib/aws-secretsmanager”;
import * as rds from “aws-cdk-lib/aws-rds”;
import { Construct } from “constructs”;const DB_NAME = “sampleDB”;
const DB_USER = “sampleUser”;
const DB_PORT = 3306;export class CdkSampleStack extends cdk.Stack
lambdaレイヤーを作成する(Python3.10 psycopg2)
## Python3.8 サポート終了
[こちらの記事](https://qiita.com/daiki7010/items/a2ad976b625be579a9c0)でlambda(python3.8)を使用したRDSの接続方法についての記事を書きましたが、2024年10月をもってPython3.8のサポートが終了するらしく、pythonのバージョンをあげた対応をしてみました。## 作成するpythonのバージョン
今回は「Python3.10.14」で作成していきます。## python3.10.14の理由
ランタイムを「Python3.12」、「Python3.11」それぞれ試しましたが、どちらも下記のエラーとなってしまいました。
“`
import module ‘lambda_function’: No module named ‘psycopg2._psycopg’
“`[AWSドキュメント](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-
cdkでECRのイメージがpushされずlambda関数がそれを読み込めないエラー
# Envs
“`
“dependencies”: {
“@aws-cdk/aws-lambda”: “^1.204.0”,
“@aws-cdk/aws-s3”: “^1.204.0”,
“@aws-cdk/aws-s3-deployment”: “^1.204.0”,
“@aws-cdk/core”: “^1.204.0”,
“aws-cdk-lib”: “2.126.0”,
“cdk-ecr-deployment”: “^3.0.68”,
“constructs”: “^10.0.0”,
“source-map-support”: “^0.5.21”
},
“`# 問題点
awsのcdkを使用し、別stackで定義したECRリポジトリにイメージをプッシュ、そしてlambda関数を作成するコードが動かなかった。“`ts
import * as cdk from ‘aws-cdk-lib’;
import { Construct } from ‘constructs’;
import * as la