- 1. AWS Lambda関数をGolangで実装し、Github Actionsで構築自動化してみた
- 2. Athenaでdouble型(実数型)を取得したら指数表記になってたので変換した話
- 3. S3とLambda、SESを用いてお問合せフォームを作成した話 3
- 4. AWS Lambdaを使用してGlueジョブをトリガーし、SNS通知を送信する方法
- 5. 【AWS】terraformでSQSのメッセージをlambdaで処理してDynamoDBに保存する
- 6. S3とLambda、SESを用いてお問合せフォームを作成した話 2
- 7. 【AWS】Azure OpenAIをAWS Lambdaで呼び出そう!
- 8. Lambda(Node.js)からDynamoDBに接続したときに502(getaddrinfo EBUSY dynamodb.ap-northeast-1.amazonaws.com)が出たときの対処法
- 9. CloudWatchLogsのロググループをS3へエクスポートするLambdaの作成
- 10. Bedrockの互換APIを作って、boto3のbedrock-runtimeからストリーミング形式で呼べるようにする
- 11. 【AWS CDK】Lambda in VPCからRDSにアクセスする
- 12. lambdaレイヤーを作成する(Python3.10 psycopg2)
- 13. cdkでECRのイメージがpushされずlambda関数がそれを読み込めないエラー
- 14. LambdaのFunction URLsを試してみた!
- 15. Slackに絵文字が追加されたことを通知するチャンネルを作りました!
- 16. EventBridgeを使用しS3へのファイルアップロードをトリガーにLambdaを動かす
- 17. LambdaのトリガーにS3を設定した際に発生したエラーと対処法
- 18. 【自由研究】Python × AWS Lambda で、コールドスタートでもキャッシュを使う
- 19. S3とLambda、SESを用いてお問合せフォームを作成した話
- 20. lambdaまたはAPI GatewayのAWSリソース(プライベートサブネット)へのつなぎ方
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
LambdaのFunction URLsを試してみた!
こんにちは、プログラミングが好きなブタさんです。
API Gatewayを使わずに Lambda のみで HTTPエンドポイントを作れるようになったので解説します。マネジメントコンソールから Lambda関数を作成します。
言語は Python に設定します。![1.png](https://qiita-image-store.s
Slackに絵文字が追加されたことを通知するチャンネルを作りました!
# はじめに
こんにちは。
今回は、Slack に新しい絵文字が追加された際に、自動で絵文字追加の通知を行うチャンネルを作成しました。# 作成の経緯
最近人が増えてきたり、一緒に仕事する人が増えてきたりで、直接コミュニケーションをする機会が減ってきていると思っています。
なので、テキストコミュニケーションで気軽にリアクションが出来るようにしたいという思いで、今回通知チャンネルを作成するにいたりました。
加えて、便利な絵文字されたら自分も使いたいですからね。# 今回やること
– 通知チャンネルを作る
– Slack App を作る
– AWS Lambda + API Gateway を作るとっても簡単です。
最初 GAS で書けないかなぁと思っていたんですが、エンドポイントのアクセス制限を考えたときに、Slack が API をコール出来なさそうだったのでやめました。(Google WorkSpaceを使ってる場合ドメイン以外からのアクセスの選択肢がパブリックしかないため)→ 有識者いたら教えていただきたいです。。もう少し詳しくフローを書くと
1. Slackに絵
EventBridgeを使用しS3へのファイルアップロードをトリガーにLambdaを動かす
# はじめに
本記事ではAmazon EevntBrige使用し、S3バケットへファイルをアップロードしたことをトリガーにしてLambdaを実行させてみます。# EevntBrige とは?
AWSのサービスやSaaSで発生するイベントをトリガーとしてワークフローを動かすことができるサービス。
EevntBrigeを使用すればイベント駆動型アーキテクチャを簡単に構築する事ができる。https://aws.amazon.com/jp/eventbridge/
# ゴール
S3へのファイルアップロードをトリガーとしLambdaを実行させる。
# 環境
python 3.12# S3
対象のバケットのプロパティを選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/d1e7eb73-9e07-ed11-0283-22492bcd9158.png)
イベントの通知からAmazon EventBridgeの「編集」を選択し、通知をオンに変更。
![i
LambdaのトリガーにS3を設定した際に発生したエラーと対処法
# 背景
新規で作成したLambda関数のトリガーにS3バケットを指定しようとしたところ下記のエラーが発生。エラー対処の備忘録も兼ねて本記事を作成しました。# 発生したエラー
下記のエラーが発生。
“`
trigger の作成中にエラー が発生しました: Configuration is ambiguously defined. Cannot have overlapping suffixes in two rules if the prefixes are overlapping for the same event type.
“`![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1247619/7dee6883-8440-984a-508c-80181fe88eae.png)
# 原因
既存のLambda関数のトリガーに同じS3バケットを同様の条件でトリガーとしているものがあったため。# 結論
EventBridge か Step Functionsを使用す
【自由研究】Python × AWS Lambda で、コールドスタートでもキャッシュを使う
## TL;DR
たいして速くならないし、速くしたいならコールドスタートを避けるようなプラクティスを採用しましょう
:::note warn
「みなさんぜひやってみてね」というよりは自由研究シリーズです。
実運用には使わない方がいいかもしれません。
:::## はじめに
[AWS Lambda](https://aws.amazon.com/jp/lambda/) はサーバーレスでバックエンドサービスのコードを簡単に実行できるサービスです。
AWS Lambda でプログラムを実行した環境は、一定時間経つと破棄されてしまうため、次の実行時にまたソースの取り込みと環境作成分の時間がかかります(コールドスタート)。
定期的に実行したり Provisioned Concurrency を使って環境を保つようにすれば、いざ実行するときに時間があまりかからないし Python のコンパイルキャッシュも効くのですが、私はなぜか「コールドスタートでもキャッシュを効かせてみたい」と思いました。
キャッシュをためるファイルシステムの分だけお金がかかるんですが、やってみようと思います
S3とLambda、SESを用いてお問合せフォームを作成した話
前回はS3とRoute 53、CloudFrontで静的なHPの作成を行いました。
今回は前回のものによくあるお問い合わせフォームを組み合わせ、お問い合わせフォームからメールが送られるようにします。
2回に分けて記事を書かせていただきます。
前回時点でS3より左側の設定までは完了している部分です。
今回はS3から右側の設定を行い、次回S3と今回の部分をつなげます。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273072/42f486e3-0bd8-4fab-cd2a-903e27b33f94.png)
※2024/6/25:Lambdaのコード修正しました。
## Amazon Simple Email Service
SESはクラウドベースのメールサービスです。
無料枠もありますが今回はS3からのメール送信となりますので有料になります。1,000通あたり$0.10になります。![image.png](https://qiita-image-store.s3.ap-nort
lambdaまたはAPI GatewayのAWSリソース(プライベートサブネット)へのつなぎ方
## はじめに
LambdaとAPI Gatewayの勉強をしていて、パブリックサブネット内にあるLambdaまたはAPI Gatewayからプライベートサブネット内のAWSリソース(RDS等)へのアクセス方法が似ていて、どちらがどちらか迷いそうだったのでまとめます。## Lambdaのプライベートサブネットへのアクセス方法
作成したLambdaはLambdaサービスが所有するVPC内で実行されます。
デフォルトでは、Lambda 関数はアカウントのVPCに接続されていません。インターネットや、インターネットを経由してパブリックサブネット内のAWSリソースにはアクセスできます。
なので、以下の方法でプライベートサブネット内のリソースに接続します。
– NATゲートウェイの設定をする(VPC-to-VPC NAT)
– Lambdaの実行の際にENI (Elastic Network Interface) が、LambdaのVPC のサブネット構成ごとに割り当てれる
– プライベートサブネット内のリソースにアクセス
上記を実行すると、プライベートサブネット内へのリソースにはアクセスで