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

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

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関数を使用して、エンコードされたオブジェクトキーをデコードすることができます。
このメソッドを使用する

元記事を表示

AWS LambdaでLINE⇒Slackにメッセージ連携したメモ

Lambda関数でLINEのメッセージを受信してSlackに通知する手順をまとめておきます。
自分用メモ。

## 前提
– 開発環境:Cloud9
– OS:Amazon Linux 2023
– Pythonバージョン:3.10

## Slack側準備
### 動作環境作成
自分が管理者権限を持つワークスペースと投稿先のチャンネルを作成しておきます。
改めて説明することは特にない。

### Slackアプリの作成
外部からSlackにアクセスするため、窓口となるアプリを作成します。
[Slack の bot を自作する(AWS Lambda + API Gateway)](https://qiita.com/landwarrior/items/dfac36a1aadac9ab0cd5#slack-app-%E3%82%92%E4%BD%9C%E6%88%90)記載の手順を参考にSlack Appを作成しました。が、今回はLINE⇒Slack連携なのでApp作成後は「Event Subscriptions」の設定は不要です。

### Webhookの追加
App作成後、左メニュ

元記事を表示

LINE NotifyとAWSを用いた定期自動送信の実装

# 1. はじめに
 LINE Notify APIを使ってメッセージを送信するPythonプログラムを作成しました.さらに,AWSを用いてそのプログラムを自動で定期実行できるようにしました.駆け出しエンジニアの私でも1日で0から作成することができたので,ぜひ参考にしてみてください.

 プログラムはGitubにも公開しています.https://github.com/vivy-phtela/line_notify

# 2. 開発のきっかけ
 アルバイトリーダーの私はLINEグループに定期的にシフト提出のリマインドを送信する必要があるのですが,いつも忘れてしまいます…これをどうにか自動化できないかと考えていたところ,LINE Notifyを見つけました.

# 3. LINE Notifyでトークンを取得
 LINE NotifyとはLINE公式が提供しているAPIで,連携するとLINE Notifyという公式アカウントを介して通知を送ることができます.公式ドキュメントは[こちら.](https://notify-bot.line.me/doc/ja/)
### STEP1:

元記事を表示

【Go, AWS】低予算APIサーバー構築を最初から最後まで【Golang, Lambda, DynamoDB, API Gateway, Cognito】

:::note
* `Go` -> `Python`差し替え編
* クライアント(`Vue.js`)編

執筆中です。
:::

:::note warn
価格・安全性など重要事項は随時ご自分で調べ、自己責任で作業をしてください。
筆者はいかなる損害について責任を負いかねます。
:::

## はじめに
低予算(規模が十分小さければ無料)で[REST APIサーバー](https://qiita.com/masato44gm/items/dffb8281536ad321fb08)を作りましょう。

DBあるよ!

## 概要
まず、低予算で推奨されるのが [**サーバーレス**](https://business.ntt-east.co.jp/content/cloudsolution/column-414.html) です。
厳密性を無視して簡単に言うと、 **常時待機するのではなく、必要な時だけ動作するサーバー** というイメージです。低予算でいける理由がこれでわかりますね。

思ったよりやること、というよりかは扱わないといけない機能が多いです。

![AWS_Rest.drawi

元記事を表示

Lambda(AWS Lambda)について

# はじめに
こんにちは!開発部のMです。
今回はサーバーレスサービスの一つである「Lambda」についてご紹介します。

# Lambdaとは
FaaSサービスの一つです。本来、アプリケーションを開発するためには自社内でサーバを準備しなければなりません。しかし、FaaSではインターネットを介してサーバを利用できるため、サーバレスな開発が実現します。
これはアプリ開発者によるサーバ管理が不要、存在を意識する必要がないということであり、サーバがなくてもアプリ開発ができるという意味ではありません。

# AWS Lambdaの特徴
AWS Lambdaでは、まず実行したいアプリケーションコードをLambda関数で開発し、Lambda上にデプロイします。するとアプリケーションが実行可能になります。

### サポート言語
Java、Go、PowerShell、Node.js、C#、Python、Rubyなど
その他のプログラミング言語を使用できるようにするための Runtime API も提供されています。

### 処理のトリガー
*  **ファイル処理:** Amazon Simple

元記事を表示

LambdaにLine BOTを作ったメモ

Cloud9環境でLambda(Python)にLine Botを作る手順をまとめておきます。
例によって自分用。

ちなみに自動応答や一斉配信、リッチメニュー等は公式アカウントの機能で実現できます。今回はSlackとの連携やデータ収集機能を追加する予定なのでLambdaで実装しました。

## 前提
– OS:Amazon Linux 2023
– Pythonバージョン:3.10
– [LINE Messaging API](https://developers.line.biz/ja/services/messaging-api/)

## LINE側準備
### LINE公式アカウント作成
まずは[LINE公式アカウント](https://www.lycbiz.com/jp/service/line-official-account/)を作成します。複数人での管理を前提とするならメールアドレスで登録しておきましょう。
Lambda Node.js serverlessを使うほどでもないちょっとした関数を書きたいときのDocker環境を作ってみた

## 概要

Lambdaにて小規模なコードを記載したい場合にちょっと楽できるようなDocker環境を作ってみました。

## 発端

小規模な処理(例えばSESのバウンス情報をSNSからLambdaを経由してSlack通知したい場合)をLambdaで使いたい場合、下記のようなジレンマがある。
– Lambdaのブラウザのエディタで書くのはなんかテンションが上がらない、普段から慣れてるエディタを使いたい。。。
– serverlessだとリッチ過ぎる、学習コストもかかる。。。
– 慣れてるエディタで書こうとしてローカルPCのNode.jsを使って書くと、複数の開発者がいる場合バージョン合わせが大変。。。

Dockerならこの辺を一挙に解決できるのではと思い今回環境を作ってみました。

## 御託はいい、早くその環境をよこせ

もちろんどうぞ!
↓こちらから取得いただけます。完全にフリーで利用いただけます。おそらく利用方法はREADMEを呼んでいただければ大丈夫だと思います!

https://github.com/miriwo0104/nodejs_20_lambda_local_d

元記事を表示

SES→SNS→Lambdaでバウンスが行われたときに、Lambdaのテストで使えるイベントJSON

## 概要

SESで送ったメールがバウンスし、SNSのトピックを通じ、サブスクしているLambdaを動かして何かしらの動作を行いたい場合にLambdaのテストのイベントJSONに記載して使う事のできるイベントJSONの内容を考えたので記載しておく。

## 内容

下記にイベントJSONの内容を記載しておく。

“`json
{
“Records”: [
{
“EventVersion”: “1.0”,
“EventSubscriptionArn”: “arn:aws:sns:EXAMPLE”,
“EventSource”: “aws:sns”,
“Sns”: {
“SignatureVersion”: “1”,
“Timestamp”: “1970-01-01T00:00:00.000Z”,
“Signature”: “EXAMPLE”,
“SigningCertUrl”: “EXAMPLE”,
“MessageId”: “95df01b4-

元記事を表示

AWS Lambda の alias と $LATEST をそろそろ理解する

Lambda の function versionについて、流石にそろそろ理解する。

## Function version のまとめ

– `$LATEST`
– version 4
– version 3
– version 2 <- alias `dev` とか - version 1 ここで、`$LATEST`をpublishすると、、、 - `$LATEST` (現在 versinon5 との差分はなし) - version 5 - version 4 - version 3 - version 2 <- alias `dev` は変更なし - version 1 🌟🌟🌟 **`$LATEST` は aliasではない!** なお、Lambdaをfunction versionを指定せずに呼び出すと、`$LATEST`が呼び出される。 ## Provisoined concurrency について alias (e.g. `dev`)の指定は可能。 ![image.png](https://qiita-image-store.s3.ap-northeast-

元記事を表示

Lambdaを使ってs3のzipファイルを解凍してみた話(更新中)

サーバー上のアクセルログを毎日zip化してs3に投げてます。(アクセスログ以外、いくつ他のファイルも同じzipファイルに保存されます。)
普段このアクセルログを使わないので、それでも問題ないですが、3月一度このアクセルログに対して履歴分析を行います。
zip化されたので、直接分析できないです。毎回s3からzipファイルをs3からダウンロードして、ローカルで解凍して、必要なファイルだけを洗い出し、またs3にアップロードします。結構時間かかりますね…

なので、今回Lambdaを使ってzipファイルの一括処理を行いました。

# アクセル権限
Lambda関数を作成時、実行ロールが聞かされます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/617964/cb1188c2-7b1f-a13d-a56e-82ebb25cc384.png)

プロジェクトに既に適切なロールがありますので、それを使いました。
もし、まだ使えるロールがない場合、「AWS ポリシーテンプレートから新しいロールを作成」

元記事を表示

lambda ローカルPC(Mac)で作成したNode.jsのプロジェクトファイルをzip化してアップロードする方法

## 概要

ローカルPCで作成したランタイムNode.jsのプロジェクトファイルをzip化し、lambdaの処理に反映する方法を簡単にまとめる。

## 前提

ローカルPCでnpmコマンドが実行できること。
筆者はローカルPCのNode.jsのバージョン管理はVoltaを使用しており、Volta導入段階でnpmコマンドは実行できるようになった。
また、ランタイムはNode.js 20を使う。

## 方法

1. 任意の場所にプロジェクトファイルを格納するディレクトリを作成する。

“`
mkdir notice_slack_function
cd notice_slack_function
“`

1. 下記を実行してローカルのNode.jsのバージョンを20系にする。

“`
node -v
volta install node@20
node -v
volta list
“`

1. 下記を実行してNode.jsのプロジェクトを初期化する。(`-y`オプションは初期化時に問われる質問にデフ

元記事を表示

古いCDKでLambdaがデプロイできない原因(の一つ)

## 背景
以下のようなことが起きました

– 古いバージョンのCDKでリソースをデプロイしようとした(新規スタック作成・既存スタック更新)
– CDKの中でLambdaリソースを定義している
– そのLambdaのランタイムはまだサポートされている
– にもかかわらず、「Lambdaのランタイムがサポート外」というエラーでデプロイできなかった

### 環境

– Node.js: `12.22.2`
– CDK: `1.119.0`

### 実際のログ

“`io
5:41:20 AM | CREATE_FAILED | AWS::Lambda::Function | LogRetentionaae0aa…b201efdd8aFD4BFC8A
Resource handler returned message: “The runtime parameter of nodejs14.x is no longer supported for creating or updating AWS Lambda functions. We re

元記事を表示

PulumiでAPI Gateway + Lambda(Go)をデプロイしてみた

# はじめに
以前から気になっていたIaCツールであるPulumiでAPI Gateway + Lambda(Go)のサーバレスなAPIを作成してみたので記事にしたいと思います。

### Pulumiとは
TerraformやCloudFormationなどと同じくIaCツールとなっていて、YAMLだけでなくGoやPython、TypeScriptなどで記述できることやAWS、Google Cloud、Azureなど様々なクラウドサービスに対応してることも特徴です。
さらにPulumiには**Pulumi AI**というChat GPTのように自然言語でチャットするだけでIaCのコードを生成してくれる機能があります。

### そもそもIaCとは
IaC(Infrastructure as Code)はインフラ(サーバー、ネットワーク、ストレージ)をコードで定義して管理する手法のことです。手動での管理と違ってコードで記述するので、手作業でのミスがなくなることやGitなどを用いることで管理の効率化が可能になっています。

# 開発環境
M1 MacBookで開発しています。

# 手順

元記事を表示

AWS LambdaでPythonの外部ライブラリを設定する方法

# 概要
Lambdaでは、Python標準ライブラリとAWS SDK for Pythonしか使用できません。
また、Lambda上ではpipによる外部ライブラリのインストールもできません。

そのため、必要なライブラリは自分で調達してくる必要があります。
ここでは、外部ライブラリの調達と設定方法について解説します。

# 手段
Lambdaでは外部ライブラリを配置できる場所が2つあります。

* Lambdaレイヤー
* Lambda関数ごとのコード置き場(フォルダ/ファイル構成)

配置場所はどちらでもよいのですが、枯れた技術(アップデートの頻度が少ないモジュールや外部ライブラリ)はLambdaレイヤー配置するのが、一般的な作法なようです[^1]。
今回は**Lambdaレイヤーに外部ライブラリを配置**する方法を取ります。

# 外部ライブラリを取得する
外部ライブラリは公開先からダウンロードしてよいですが、“`pip install -t“`でローカルに落としてしまうのが手っ取り早いです。

AWS環境で完結させるなら、外部ライブラリ調達用にCloud9を1つ作成し、

元記事を表示

Alexaでシャッフル睡眠を促してくれるアプリを作ってみたい

長らく愛用してきたシャッフル睡眠を促してくれるAlexaアプリが公開停止されて私の安眠が失われてしまったので自作しようと思います。

# 作成予定のスキル
認知シャッフル睡眠法をサポートしてくれるアプリを作成予定です。
具体的には数秒おきにランダムな単語を読み上げるようにするシンプルなアプリです。

> 認知シャッフル睡眠法とは
>
>・カナダの認知科学者リュック・ボードウィン博士が考案した睡眠法
>・「大脳皮質が理論的な活動をしているうちは、脳が『まだ寝てはいけない』と
判断する」という仕組みを利用して、あえて何の脈絡もないイメージを連想し、大脳皮質の理論的な活動を止め、脳が“眠りのスイッチを入れても大丈夫”と判断するように導いてゆくもの
>・適当な単語を次々とイメージすることで睡眠を妨げる思考が抑制されることで眠りにつける

# 事前準備
## 1. アカウント作成
alexa developer consoleにアクセスしアカウントを作成してログインします。

## 2. アプリ作成
スキルの作成から今回開発するアプリを作成します。
“`text: 設定内容
アプリ名: シャッ

元記事を表示

Provisioned Concurrencyを使ってみての一意見

# はじめに

Provisioned Concurrencyを使用したDynamoDBに接続するLambdaで性能に関する問題が発覚しました。
それについて試したことや記事タイトルの通り、Provisioned Concurrencyについて考えさせられる部分があったため、記事にしました。

## 経緯

前述の通り、Provisioned Concurrencyを使用したDynamoDBに接続するLambdaでWebAPIを作成していました。
Provisioned Concurrencyの効果を最大限にしたいので、Provisioned Concurrencyの準備中にハンドラー外の初期化処理に加え、DynamoDBクライアントをグローバルで初期化したり、DynamoDBと接続を行いコネクションを事前に確立させておきました。
以上の施策により、後続リクエストのスループットの向上を試みました。

## ぶつかった問題

上述の通り、Provisioned Concurrency準備中に諸々準備しておくことで後続リクエストのスループットが向上できる認識でした。
しかし、実際負荷試験ツ

元記事を表示

【DR対策】AWS 国内東西リージョンでウォームスタンバイ戦略の構成管理を容易にする

## はじめに
とあるシステムでAWSの東京リージョンをプライマリリージョン、大阪リージョンをセカンダリリージョンとした、ウォームスタンバイ戦略の環境を構築しました。
この中で環境の更新など、構成管理について工夫した点を紹介します。

## ウォームスタンバイ戦略とは
ウォームスタンバイ戦略は、ディザスタリカバリ(DR)戦略の中の1つです。
ディザスタリカバリ戦略は4種類あり、以下のAmazon Web Services ブログで詳しく紹介されています。

https://aws.amazon.com/jp/blogs/news/disaster-recovery-dr-architecture-on-aws-part-1-strategies-for-recovery-in-the-cloud/

どの戦略を選択するかはRPO、RTO、コストなどの観点で決定します。

今回のシステムでは以下の理由により、ウォームスタンバイ戦略を選択しました。
1. RPO/RTOが2時間であり、「バックアップ&リストア」や「パイロットライト」では間に合わない
1. マルチサイトほどの可用

元記事を表示

Lambda の provisioned concurrency をオートスケーリングする方法がある(ことを知って驚いただけの話)

## 答え

Application autoscaling を使えば良い。

ref. [[Lambda]Provisioned Concurrencyを使用率でAutoScalingさせる](https://dev.classmethod.jp/articles/lambda-support-provisioned-concurrency-autoscaling-2/)

## 感想

知らなかった。。。
(AWS management console のLambdaのページには表示されてない。)

元記事を表示

OTHERカテゴリの最新記事