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

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

デプロイ後に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/5edbda4ccb1ec6

https://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 serializers

class DeleteSmsSendHistorySerializer(serializers.Serializer):
“””SMS送信履歴削除用のシリアライザ”””

token = serializers.CharField(max_length=64)

“`

“`application/project/vie

元記事を表示

AWS SAM: 役割と機能をざっくりまとめてみた

こんにちは!Xyeerです
今日は、SAMの役割と機能について説明します。

## 経緯
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3749163/d52c05cc-4442-a7af-270d-dea05d3673fc.png)

現在、上記のようなシステムを使っています。
Lambdaには、[Amazon Elastic Container Registry](https://aws.amazon.com/jp/ecr/)経由でアップロードしています。

**問題点**
・Lambdaにアップロードするまで、システムが問題なく動くかわからない。
・何度もソースコード修正するのに、毎回アップロードして確認するのが手間である。
### →ローカル環境で、Lambdaを使えるようにしたい

そんな思いで色々と調べていたら、サーバレスアプリケーションを簡単に定義、デプロイ、管理できるフレームワークであるSAMに出会いました。

## そもそも AWS SAMって何?
イベント駆動型のサー

元記事を表示

【AWS学習記録5回目】Amazon CloudFrontおよびAWS WAFを用いたアプリを構築してみた

## 概要

https://pages.awscloud.com/JAPAN-event-OE-Hands-on-for-Beginners-CF_WAF-2022-reg-event.html?trk=aws_introduction_page

をもとにAmazon CloudFrontおよびAWS WAFを用いた翻訳アプリを構築してみました
※ハンズオンの内容と全て一致していません

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747730/72b371b6-1221-f56d-c08b-0e92e5e07328.png)

## CloudFormation
米国東部 (バージニア北部)リージョンに作成
“`waf.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
#======================
# WebACL
#======================
WebACL:

元記事を表示

AWS Lambdaの実装・運用で知っておきたかったこと

# 目的

AWS Labmdaの本格利用を検討して、調査・検証を行ったので、知見をまとめる。

書いてあること

– 運用関連のこと
– コードの実装関連のこと
– cost関連のこと

# 管理

AWS Lambaの運用周りの私見をまとめる。

コードで管理する前から運用してるものがあるので、それらも管理対象としたければ、
aws cli使うか、スクリプト書いて、自前でCICD組むか、lambrollを使っちゃうのが良さそう。

## AWS SAM

公式ではAWSSAMを使うことを推奨している模様。
https://github.com/aws/serverless-application-model

CloudFormationを利用するので、設定ファイルの書き方が独特で、調べにくいので、学習コストが高い。
既に運用済みのLambdaがあった場合、それをコードで管理できるようにする(terraform import的な)ことができなさそう。

テストコードはない

https://docs.aws.amazon.com/ja_jp/serverless-applica

元記事を表示

【2024年春Ver.】AWS Lambda Layerの作成方法をわかりやすく解説【Python3.12】

1年ぶりにAWS Lambdaでやってみたいことができて、新しいライブラリを入れるためにLayerを作ろうと[自分の過去記事](https://qiita.com/__DASHi__/items/268062f0dba0e93170f2)見ながらAWS Cloud9を久しぶりに開いてみたら、ちょいちょい変わっているところがあって「まあAWSだもんね、そうだよね」と勝手に納得していました。

この記事は、そんなAWS Lambdaを久しぶりに触った私が将来読んでも引っかからずに作業できるよう、AWS Lambda Layerを簡単に作成する方法を解説する備忘録です。

## 1. Lambda Layerとは

まずは、Lambda Layer(”Lambda”はラムダ、”Layer”はレイヤーと読みます)とは何?という話から。

**AWS公式サイトより**

> Lambda レイヤーは、補助的なコードやデータを含む .zip ファイルアーカイブです。レイヤーには通常、ライブラリの依存関係、カスタムランタイム、または設定ファイルが含まれています。(出典:[https://docs.a

元記事を表示

LambdaでBedrockのClaude 3を呼び出してみた

[Supership](https://supership.jp/)の名畑です。[プリティーリズム・レインボーライブ10周年展](https://www.0101.co.jp/086/event/detail.html?article_seq=123730&article_type=sto)おめでとうございます。とても楽しい展示でした。

## はじめに

[Anthropic](https://www.anthropic.com/)がリリースした[Claude 3](https://www.anthropic.com/news/claude-3-family)が話題です。

– [Anthropic、AIチャット「Claude 3」を3サイズで 日本語力も向上 – ITmedia NEWS](https://www.itmedia.co.jp/news/articles/2403/05/news089.html)
– [GPT-4超えをアピールするClaude-3がAIで初めてIQ100超えを達成したという報告 – GIGAZINE](https://gigazine.net/new

元記事を表示

S3・SQS・Lambdaで自動マスタリングアプリを作る

# 概要

今回は、AWSのSQS・Lambdaを練習も兼ねて触ってみようということで自動マスタリングアプリを開発しました。
ちなみにマスタリングとは、音楽制作の最終工程であり、最終的に配信やCDプレスするために音質を整える作業のことです。

※ファイルをS3にアップロード・ダウンロードするUI等は実装しません。

# 音圧爆上げくんとは

AIを使用したマスタリングを、オンラインで自動的に行なってくれるサービスです。
以前は有料機能もあったようですが、2024年3月17日現在は無料で使えます。

APIが提供されており、今回使用させていただきました。

https://bakuage.com/

https://qiita.com/bakuage/items/5e383be930477ca6f148

実装には、こちらのチュートリアルが役立ちます。

https://github.com/ai-mastering/tutorial-go

# 成果物

今回開発したアプリの使い方の説明です。

### 1. 音声ファイルをS3バケットに配置する

元記事を表示

AWS Lambda + Pythonで簡易LINEBOT作ってみた

## 作った経緯
LINEBOTを作ったら便利なのではという機会があったので、とりあえず簡易版を作ることにした。

最初はAzureBotService + C#でやっていたがテストBotのデプロイがうまくいかなかったため、AWSLambda + Pythonに変更

## 前提
LINE DevelopersでWebhookを利用できるBotを作成している。

## やったこと
### AWS Lambdaで関数を作成する
1. AWSコンソールに飛び、Lambdaを検索する
1. 「関数を作成」をクリックする
1. 適切な関数名を設定
1. ランタイムでPythonを選択
1. 「関数の作成」をクリックする
1. 画面が戻った後、求めているBOTのコードを記述する

#### これで関数の作成は完了!

コードの複雑度によっては、ライブラリのインストールが必要ですが今回は標準のみなので省きます。
### API Gatewayの追加
1. トリガーを追加する
1. API Gatewayを選択する
1. Create a new APIを選択する
1. HTTP APIを選択する

元記事を表示

会話の記憶を持つLINEチャットbotをAWS Lambda+DynamoDBで実装する【Python3】【GPT-4】

周回遅れも甚だしいネタですが、OpenAI APIを使ってチャットbotを実装しようとする時、会話の記憶を持たせたい(何もしないとステートレスな会話になる)というのはよくあるユースケースだと思います。

AWS上でLambdaとDynamoDBを使い、会話の記憶を持たせたLINEチャットボットを実装したので、自分への備忘録的に記事を残しておきます。

## 仕様
– 会話を記憶する数は5往復(10メッセージ)とするが、適宜変更もできるようにする
– 会話履歴を記憶させる媒体としてAWS DynamoDBとする
– DynamoDBへは1ユーザー1レコードとし、保存対象の会話をJSONで1フィールドにまとめて保存する

### 会話履歴の保存数を5往復とした理由
会話履歴の保存数を多く(長く)すればするほど、理論的には文脈の理解度は上がるはずですが、パラメータを弄りながらテストしていると、あまり古い会話を覚えておいても文脈理解にはかえって邪魔になることが分かりました。
また、当然のことながら記憶しておく履歴が長いほどTokenの消費量も多くなるため、コスト的にも不利になります。
今回は、

元記事を表示

Chaliceってなに? ー> Lambda関数をお手軽に作れるライブラリ

## イントロダクション

このブログでは、AWSのChaliceを使用してPythonサーバレスAPIを作成する方法について詳しく説明します。Chaliceは、AWS Lambda関数の作成やAPI Gatewayの設定など、サーバレスアプリケーションの構築を容易にするPythonフレームワークです。

## Chaliceとは何か?

Chaliceは、AWSが提供するPython用のマイクロフレームワークで、サーバーレスアプリケーションを簡単に作成できます。Chaliceを使用すると、AWS Lambda関数の作成やAPI Gatewayの設定などが簡単に行えます。また、Chaliceは、Pythonのデコレータを使用してルーティングを設定するなど、Pythonらしい書き方が可能なため、Python開発者にとってはとても使いやすいツールです。

[Documentation — AWS Chalice](https://aws.github.io/chalice/)

## ChaliceでのPythonサーバレスAPIの作成

ChaliceはCLI(Command Line

元記事を表示

AWS Lambdaで翻訳APIをつくってみた

# TL,DR
Lambda関数からGoogle Cloud Translation APIをコールして、単語を翻訳するAPIを作りました。
Pythonコードです。
Lambda関数はChaliceを使うことで、簡単にAWSにデプロイすることができます。

# 出来ること

こんな感じで、エンドポイントのクエリパラメータに翻訳対象のテキストと翻訳先言語を指定すると

“`
https://xxxxxx.amazonaws.com/api/?word=Hello+World!&target_language=fr
“`

翻訳結果が返ってきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2526943/2defd514-566c-4787-5900-f241101a1cec.png)

# 作り方

## GCPの準備

1. プロジェクトの登録
1. APIの有効化
1. サービスアカウントの作成、キーのダウンロードー>JSONファイル

## ChaliceでAPI化

元記事を表示

CodePipelineの最後にCloudFrontのキャッシュを自動で削除する

# これは何?
S3の静的サイトホスティングとCodePipelineを組み合わせてWebサイトを公開しているのですが、今まではCloudFrontのキャッシュ削除を手動で実施していました。

今回、そのキャッシュ削除を自動化したのでその際に実施したことをまとめた記事です。

# 構成
以下の構成でWebサイトを公開しています。
![20240317_165731.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/601535/2718f394-2ef8-5f42-4cad-2a0535ab7ab4.jpeg)

– S3の静的サイトホスティングを利用
– CMSは導入しておらず、ソースコードはCodeCommitで管理
– CodeCommitでブランチをマージするとパイプライン処理が起動し、S3へのデプロイが実行される
– S3へのデプロイ完了後、LambdaがCloudFrontのキャッシュを削除しに行く
– ↑赤枠の部分であり、今回の実装内容です
– パイプライン処理の開始/終了時にはAWS

元記事を表示

Claude 3とAWS CDKを使い爆速でAWSの検証が出来る環境を手に入れよう!

## はじめに

– 今回は、今話題の [Claude 3](https://claude.ai/) で[AWS CDK](https://aws.amazon.com/jp/cdk/)というAWSインフラのプロビジョニングツールを使い、簡易的なメール通知の仕組みを作成しました。
– 基本的にはClaudeに尋ねながら構築を行っており、AWS CDKの最初のセットアップ以外はコードをほとんど書いていません。
– なので、AWS CDKに馴染みが無い方でも、最初のセットアップさえ出来れば、Claudeを活用しながら、どなたでもAWS CDKをご活用頂けるのではと考えております。

## 技術要素の紹介

### Claude 3

2024年3月4日に発表されたAnthropic社の最新モデルの生成AIです。

https://qiita.com/minorun365/items/e6f3aa71f5e1bdf21139

– 特に驚いたのは「マルチモーダル」対応という事で、画像やPDFの分析もしてくれます。
– [anthropic.com](https://www.anthropic

元記事を表示

AWS Lambdaを使ってLLMの推論結果を段階的に表示する

# LLMの業務利用
LLMを使ったサービスが世の中に数多く登場し、実際に活用している方も多くいらっしゃるのではないでしょうか?
個人で利用する場合は好きなサービスを自由に使えますが、業務で使う場合は情報流出のリスク等の観点から自由に使えないことがほとんどかと思います。
業務で使う場合は、情報流出防止の観点で入力データが学習データとして利用されないことが前提条件になるでしょう。
その場合は、これらのリスクをクリアしたサービスを使うか、自身で環境を構築するかの2択になってくるかと思います。

自身で環境構築を行う際に、意外なハードルになるのがLLMの推論結果を段階的に表示する部分だったりします。
利用するモデルや入出力のデータの量にもよりますが、LLMの出力が完了するまでに分単位の時間がかかることも珍しくありません。
出力が完了するまで、LLMの出力結果が一切表示されない実装をしてしまうと、利用者は何も表示されない画面を見ながら待ち続ける必要があります。これではユーザ体験が非常に悪くなります。
LLMは段階的に出力を行う仕組みになっているため、その出力結果を段階的に画面に表示することで、

元記事を表示

【Lambda】S3イベント通知におけるオブジェクトキーのエンコードに関する注意点と解決策

# 背景
AWSを使用している開発者にとって、S3のイベント通知を処理するLambda関数は一般的なユースケースです。

しかし、オブジェクトキーに半角スペースが含まれている場合、S3はこれをプラス記号にエンコードして通知を送信します。
このエンコードにより、Lambda関数にはエンコード後のオブジェクトキー名が渡され、開発者が予期しない問題に直面する可能性があります。

例えば、S3のイベント通知で起動するLambda関数で、イベントデータからオブジェクトキーを取得し、何らかの処理をするとします。
Lambdaにはエンコード後のキー名が渡されるので、開発者はオブジェクトキーを適切に処理することができず、期待しない動作が発生する可能性があります。
(S3から当該キーのダウンロードに失敗する、など)

# 解決策
この問題を解決するためには、オブジェクトキーをLambda関数内で適切にデコードする必要があります。

Pythonの場合、urllib.parse.unquote_plus関数を使用して、エンコードされたオブジェクトキーをデコードすることができます。
このメソッドを使用する

元記事を表示

OTHERカテゴリの最新記事