- 1. AWS Lambda + Honoで外部REST APIサーバ用のプロキシサーバを書く
- 2. BedrockのナレッジベースでRAGを実装し、資料を元にした回答をClaude 3にLambda経由でしてもらった(ベクトルストアはAurora)
- 3. momentoを利用してサーバレスキャッシングしてみた
- 4. もう二度とlambda layer作成をミスりたくない!!【terraform】
- 5. AWS Lambda でカスタムレイヤーを追加する方法
- 6. 【Provisioned Concurrency】IoT CoreからのLambda実行でエラーが出たので解消してみた
- 7. Qiitaの最新記事を教えてくれるアレクサスキルを作ろう Alexa X Lambda X Golang
- 8. AWS_ALB+Lambda(Pyhton)でBasic認証
- 9. aws-lambda-powertoolsを利用してLambdaでAPIを作る
- 10. AWS Lambda入門:1分で理解するサーバーレスコンピューティング
- 11. API Gateway Lambdaプロキシ統合を有効にしてエイリアスごとに通信する方法
- 12. Lambda Layer上でインポートするパッケージをローカルでインストール〜アップロードまで
- 13. 【初心者】AWS Lambdaとサーバレス
- 14. 最近 Hono で外部連携用の AWS Lambda 書いています
- 15. デプロイ後にCloudFrontのキャッシュ削除をLambda関数で自動化する
- 16. 【API Gateway】IPアドレスによるアクセス制限を実装・設定する方法
- 17. Lambdaのランタイムを更新する
- 18. 【Amazon Cognito】ログイン失敗とロックアウトを見分ける方法
- 19. 特定のページが更新されたら通知する仕組みを作ってみた
- 20. [Django REST Framework] Lambdaで定期的に実行するバッチ削除処理APIの作成方法を見てみよう!
AWS Lambda + Honoで外部REST APIサーバ用のプロキシサーバを書く
## プロキシサーバをHonoで作ろう
前回、[最近 Hono で外部連携用の AWS Lambda 書いています](https://qiita.com/ssc-ksaitou/items/4a1a1e437d4139b32d19)という記事を書きましたが、記事の中でユースケースとしてあげていた「**他のサービスへのデータ連携のためにAWS Lambda + Honoでプロキシサーバを書く**」という応用例は、そこそこ需要があると個人的に思っているので、今回改めて記事にしました。
https://qiita.com/ssc-ksaitou/items/4a1a1e437d4139b32d19
:::note info
本記事で書くプロキシサーバは [squid](https://www.squid-cache.org/) などの本格的なものではなく、HTTPリクエストを外部サービスに簡単に中継する程度のものです
::::::note info
本記事のソースコードは https://gitlab.com/ksaitou/2024-03-28_awslambdahonoprox
BedrockのナレッジベースでRAGを実装し、資料を元にした回答をClaude 3にLambda経由でしてもらった(ベクトルストアはAurora)
[Supership](https://supership.jp/)の名畑です。たくさんの思い出を生み出してくれた中野のシンボルとも言える中野サンプラザとのお別れイベントである[中野サンプラザプロジェクションマッピング](https://www.city.tokyo-nakano.lg.jp/kanko/city-promotion/0686357420231212172102894.html)、とても素晴らしかったです。別れを惜しみながらも、再会を楽しみに待っております。
## はじめに
前に「[LambdaでBedrockのClaude 3を呼び出してみた](https://qiita.com/nabata/items/5bcc3beb76182f626040)」という記事を書きました。[Anthropic](https://www.anthropic.com/)による**LLM**である[Claude 3](https://www.anthropic.com/news/claude-3-family)を[AWS](https://aws.amazon.com/jp/)の[La
momentoを利用してサーバレスキャッシングしてみた
## はじめに
最近インメモリキャッシュサービスを格安で利用することができないかと色々調べていました。
(Elasticacheなどのサービスは高いのでなるべく無料のものを利用したい。)その結果、Momentoというサービスを発見しましたので、今回はそれについて触ってみてLambdaへの実装までを実施しました。
## Momentoとは ?
インメモリキャッシュのSaaSサービスです。正確には[Momento Cache](https://jp.gomomento.com/services/momento-cache/)にてインメモリキャッシュを行うことができます。
AWS上でキャッシュを利用するとなると、ElastiCacheやAppSync(正確にはElasticache)などを利用す毎月5GBまでのデータの登録は無料で利用することができるため、。
その後は1GBあたり0.50ドル課金されます。
スタンダードプラン以降はCloudWatch メトリクスへエクスポートすることも可能になります。## Momento設定内容
今回はMomento cache を作成して
もう二度とlambda layer作成をミスりたくない!!【terraform】
# はじめに
Lambda Layerを何度か作成しているのですが、
毎回zipのディレクトリ構造を間違えて「Cannot find module XXX」エラーに遭遇します。ディレクトリ構造を間違えないよう、Terraformで良い感じに工夫してみました。
## (参考)Lambda Layerとは
(引用)補助的なコードやデータを含む .zip ファイルアーカイブです。
複数のlambdaで共有したい関数や、
lambdaのデプロイパッケージに入れたくない依存ライブラリなどを別途用意できる機能です。https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/chapter-layers.html
別途用意されたzipは、Lambda実行環境でlambda関数実行前に解凍されます。
lambda関数は解凍後の関数ソースやライブラリを使用することができます。## (参考)Lambda Layer作成時の落とし穴
Lambda Layerの作成時にZIPファイルをアップロードできますが、
ZIPファイル内のディレクトリ構造が正しく
AWS Lambda でカスタムレイヤーを追加する方法
# 概要
– Lambdaで何かしらの処理を行いたい時、デフォルトだとインストールされていないパッケージを使う場合は、レイヤーをアタッチする必要がある
– Lambdaを使うとき、基本的に必要になる作業なので、自分のやり方を備忘として残す# 手順
## 1. ローカルで必要なパッケージをまとめる
– レイヤーに含めたいパッケージを仮想環境にインストール
“`shell-session
python3 -m venv venv
source venv/bin/activate
pip install package-name
“`– 「__pythonという名前__」のディレクトリにパッケージを詰めてzipファイルにする
– __pythonという名前である必要がある__(任意ではないことに注意)
– 仮想環境の具体的なpathはそのときのローカルの状況次第
“`shell-session
mkdir -p layer/python
cp -r venv/lib/python3.10/site-packages/* layer/python/
cd laye
【Provisioned Concurrency】IoT CoreからのLambda実行でエラーが出たので解消してみた
## 経緯
IoT CoreからIoTルールアクションでLambdaを実行していたが、コールドスタートが気になりSAMテンプレートでProvisioned Concurrencyを適用。## Provisioned Concurrency適用時の設定
### IoTルールのSQLステートメントとSAMテンプレート
“`ruby:SQLステートメント
SELECT
aws_lambda(“arn:aws:lambda:ap-northeast-1:111111111111:function:hoge-func:Live”, {“payload”: *})
FROM
‘topic/subtopic’
“`
“`ruby:SAMテンプレート(Lambda部分)
hogeFunction:
Type: AWS::Serverless::Function
Properties:
FunctionName: !Sub hoge-func
CodeUri: src/handler
Role: !GetAtt LambdaH
Qiitaの最新記事を教えてくれるアレクサスキルを作ろう Alexa X Lambda X Golang
# 1.はじめに
## 1.1目的
golangと、lambdaを使ってアレクサスキルと作りたくなったのでやってみる。## 1.2環境
Windows(GitBash)
Go Version 1.22.0## 1.3前提条件
– Amazon 開発者アカウントの作成を事前に行う。下記リンクより、Amazon開発者アカウントの作成を元に準備してくださいhttps://developer.amazon.com/en-US/blogs/alexa/post/31c9fd71-f34f-49fc-901f-d74f4f20e28d/alexatraining-firstskil.html
– 事前に[AWSアカウント](https://aws.amazon.com/jp/register-flow/)の作成を行ってください
– [AWSCLI](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html)が使える状態にする# 2.Golangでソースを書き、La
AWS_ALB+Lambda(Pyhton)でBasic認証
# 概要
AWSで何度かALBに対しBasic認証を行う機会があり、毎回調べながら試行錯誤して作っていたので備忘を目的に記載。
(個人的な感覚で、Node.jsの記事は良く見かけるが、Pythonの記事は見かけないので、いつも一苦労・・・)# なんでPython?
個人的に、Node.jsよりPythonの方がバージョンのサポート期間が長いイメージなので、Pythonを使いたい。
参考:
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html# 構成
こんな感じ。
![basic認証.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505716/221af1a1-5455-f176-c5f1-88aba89425d5.png)Basic認証未済のリクエストはLambdaへ、Basic認証済のリクエストはEC2へ。
# AWS設定
以下の順序
1.Lambda作成
2.EC2作成
3.ターゲットグループ作成
aws-lambda-powertoolsを利用してLambdaでAPIを作る
## はじめに
私たちのチームでは、企業が利用している人事システムなどのデータを取り込み、集計して、人的資本にまつわる様々な指標を表示したり、業界平均などと比較することのできるWebアプリケーションを開発しています。WebアプリケーションのAPI(サーバーサイド)を、API Gateway + Lambda(Python)で構成しています。
その際に、 [aws-lambda-powertools](https://docs.powertools.aws.dev/lambda/python/latest/) を使って、とても便利だと感じたので、紹介します。なお、この記事で紹介する aws-lambda-powertools の機能は、バージョン2.15.0時点のものです。
## 便利な点の紹介
この記事では、実際にアプリケーションで利用しているLambdaのソースコードを用いて、 aws-lambda-powertools の便利な使い方を紹介していきます。
“`python
from http import HTTPStatusfrom _types.errors
AWS Lambda入門:1分で理解するサーバーレスコンピューティング
# Lambdaとは
Lambdaは、サーバーの準備や管理なしにコードを実行できるAWSのサービスです。これにより、アプリ開発者はサーバー管理に関する負担から解放され、開発に集中できます。
### AWS Lambdaの特徴
サポート言語: Java、Go、PowerShell、Node.js、C#、Python、Rubyなど幅広いプログラミング言語に対応。
処理のトリガー: ファイル処理、ストリーム処理、ウェブアプリケーション、IoTバックエンドなど、多様なトリガーでLambda関数を起動可能。
料金体系: 実行回数と処理時間に基づいてのみ料金が発生。コードが実行されていない時の料金はかかりません。
### 利点と制約
メリット: トランザクション量に応じて自動スケーリング、高可用性、起動時のみの課金など。
API Gateway Lambdaプロキシ統合を有効にしてエイリアスごとに通信する方法
## はじめに
Lambdaプロキシ統合が以下の資料だとオフの状態の資料しかないので、Lambdaプロキシ統合をオンにした状態でもうまくいくのかについて確認します。
> c. [Lambda プロキシ統合] はオフのままにしておきます。
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/amazon-api-gateway-using-stage-variables.html## アーキテクチャ
今回のシナリオとして、あるAPIを公開中であり、Version2のbeta版の検証も実施するという想定になります。
バージョンについては、
– v1というAPIバージョンを現行版として公開中。
– v2betaを現在開発中でプレリリース版として公開中。というシナリオで開発をすすめるという想定とします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/872532/e769e979-f700-5b
Lambda Layer上でインポートするパッケージをローカルでインストール〜アップロードまで
## これは何?
今までインフラエンジニアで開発経験など無かったのですが, 趣味やサーバレスの検証も兼ねてLambda Layerを初めて自分で作成し実装した際にライブラリが異なることで`invalid ELF header`エラーが発生した際の対処法になります.## 調査
Pythonで、momentoライブラリを導入してLambda Layerにアップロードした際に、 `invalid ELF header` エラーが発生しました.
(momentoについて詳しくは[こちら](https://docs.momentohq.com/ja/cache))> https://docs.momentohq.com/ja/cache
これは、ローカルで実行しているPythonライブラリとLambdaで実行しているPythonライブラリが異なるため、ELF(Executable and Linking Format)ヘッダーの規定が異なりインポートエラーが発生しているものとなります.
“`toml
{
“errorMessage”: “Unable to impor
【初心者】AWS Lambdaとサーバレス
# 目的
AWS Lambdaについての基本を知るため。
AWSを触る上で重要な概念であるサーバレスにも触れる。# Lambdaとは
開発した関数をサーバレスに実行できるサービス。## サーバレスとは
アプリケーション実行環境をマネージドサービスとして提供されたもの。
サービス使用者(私)は、サーバの構築やOSのバージョンアップなどの管理をする必要がない。
Lambdaでは関数さえあれば、サーバを意識することなく実行環境が構築できる。## マネージドとは
サービス提供者(AWS)がインフラの管理や運用を含めてサービスとして提供する形態のこと。
## Lambdaの仕組み(簡素)
Lambdaは同時実行リクエストごとに、実行環境の個別のインスタンスをプロビジョニングします。
### LambdaをVPCにアタッチしていない場合
実行可能なAZで起動する。### VPCにアタッチする場合
複数のAZでサブネットを指定することで高可用性を担保する。## Lambdaにおける2つの実行方式(非同期・同期)
### 非同期実行
呼び出し元が処理結果を待機し
最近 Hono で外部連携用の AWS Lambda 書いています
## AWS Lambda のハンドラは辛い
こんにちは!AWS Lambda初心者です!
[AWS Lambda](https://aws.amazon.com/jp/lambda/) と言えば、サーバレスかつ非常に安い価格で無限にスケールアウトできる処理を書けることで有名ですが[^1]、 [2022年04月の Function URL アップデート](https://aws.amazon.com/jp/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/) でAPI Gatewayなど用いなくてもラムダ単体かつ無料でHTTPリクエストを処理できるURLを持てるようになり、かなりの神サービスになりました。
[^1]: 正直AWS内での広範な扱いを見ていると、AWSの便利なマクロ拡張関数といったほうが適切な気はします
弊社でも [Function URL](https://docs.aws.amazon.com/ja_jp
デプロイ後にCloudFrontのキャッシュ削除をLambda関数で自動化する
## はじめに
S3+CloudFrontでホスティングされているプロジェクトでCodePipelineでS3へのデプロイ後にCloudFrontのキャッシュを自動で削除するLambda関数を作成しました。
備忘録として残します。あくまでも簡易的な実装例の1つとして参照してください。
## 概要
HTML/CSS/JavaScriptで構成されている静的サイト。
S3でホスティングしCloudFrontから配信している。
CI/CDがCodePipelineで自動化されている。
CloudFrontのキャッシュの削除を手動でマネジメントコンソールから行っていた。## 実装
### 1. キャッシュ削除を行うLambda関数を実装
今回、Lambda関数はPythonで実装する。“`bash
import boto3
import time
import os# Lambdaのエントリーポイント
# HP本番環境のCloudFrontディストリビューションに対してキャッシュ削除を行う
def lambda_handler(event, context):
c
【API Gateway】IPアドレスによるアクセス制限を実装・設定する方法
API Gatewayで実装したAPIにおいてIPアドレスによるアクセス制限をする必要が出てきたため、その方法を調査・実装した。
# 結論
API GatewayのLambdaタイプオーソライザーを作成し、特定のIPアドレスにのみ認可を与えることでアクセス制限をかけることができる。# 実装内容
まず、オーソライザーの本体となるLamnda関数を実装する。“`javascript
exports.handler = async (event) => {
if(event.authorizationToken){
// X-forwarded-forの内容がトークンに設定されるので、
// カンマで区切りで取得したIPアドレスの一番最初の要素がアクセス元のIPアドレスになる
ip = event.authorizationToken.split(‘,’)[0].trim();
}
else{
return generatePolicy(‘user’, ‘Deny’, event.method
Lambdaのランタイムを更新する
# はじめに
ずいぶん前に作って放置したままだったLambda関数を久々に見たら、Lambdaのランタイムが古いもの(Ruby-2.7)でした。
そこでランタイムをGUI(管理コンソール)で更新するついでに、その手順を記事としてまとめてみました。# 更新手順
* Lambda関数の詳細ページに入り、画面を下の方にスクロールさせると[ランタイム設定]という項目があります。
* ここで[編集]を押してランタイム設定の編集画面に入ります。![lambda_001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/f00255bd-fe31-d2c0-72d9-cad8c5055ecd.png)
* [ランタイム設定を編集]画面では、現在サポート対象のランタイムがリスト表示されるため、その中から所望のランタイムを選択します。
* ランタイムを選択したら、画面下部の[保存]を押します。![lambda_002.png](https://qiita-image-store.s3.ap-n
【Amazon Cognito】ログイン失敗とロックアウトを見分ける方法
Amazon Cognito のユーザー認証機能を使ってログイン機能を実装しているシステムで、連続で複数回ログインに失敗するとロックアウトが発生するが、単にログインに失敗しているだけなのか、ロックアウトが発生しているかが見分けがつかなかった。
そこで、今回はロックアウトを見分ける方法について調査結果を共有します。
# 結論
ログインに失敗した場合も、ロックアウトによる失敗もNotAuthorizedExceptionが発生するが、メッセージに違いがあるため、それを参照することで見分けることができる。ログイン失敗の場合
“`
Incorrect username or password.
“`ロックアウトによる失敗の場合
“`
Password attempts exceeded
“`# 調査と検証
Cognitoでのイベント履歴はCloudTrailで確認することができる。
CloudTrail > イベント履歴でイベント名「InitiateAuth」でフィルタリングするとわかりやすい。
![スクリーンショット 2024-03-23 12.30.16.png](
特定のページが更新されたら通知する仕組みを作ってみた
## はじめに
RSS対応のサイトだと、更新情報追いやすいけど、RSS非対応のページも追いたいよね。って人向けの記事です。
RSS対応しているサイトなら、RSSリーダーを使った方が早いです
また、Discordのチャンネルにも通知がしたかったので、メールとDiscord両方に通知を行っています。Discord側にWebhook用のURLが必要ですが、本記事では紹介しません
参考サイトのZennの記事が細かく書かれていますので、そちらをご覧くださいなお、この仕組みは更新を検知したいサイトに確認リクエストを送ります。
高頻度で設定してしまうと、サーバーに負荷がかかる為、
**高頻度での設定**はしないようにお願いします### 参考サイト
https://zenn.dev/lambta/articles/5edbda4ccb1ec6https://qiita.com/Kalmari/items/bf07b8345054f4af605e
https://dev.classmethod.jp/articles/daily-check-for-non-rss-page/
##
[Django REST Framework] Lambdaで定期的に実行するバッチ削除処理APIの作成方法を見てみよう!
# 概要
Lambdaで定期的に実行するバッチ削除処理APIの作成方法
# 目的
掲題の方法を説明する# 使用技術
“`application/pyproject.toml
python = “^3.11.2”
Django = “^4.2.7”
djangorestframework = “^3.14.0”
pytest = “^7.4.3”
pytest-django = “^4.7.0”
“`# 早速コードを見ていきましょう!
今回の削除する対象はSMS送信履歴とします“`application/project/serializers.py
from rest_framework import serializersclass DeleteSmsSendHistorySerializer(serializers.Serializer):
“””SMS送信履歴削除用のシリアライザ”””token = serializers.CharField(max_length=64)
“`
“`application/project/vie