Lambda関連のことを調べてみた2022年09月30日

Lambda関連のことを調べてみた2022年09月30日
目次

AWS Lambdaを使って関数を定期実行する

# 経緯

Pythonで動くコードを定期実行させたくなった。
タスクスケジューラ―でやるにしても電源オフ時に起動できるようにBIOSの設定をするのが面倒。
また、どこかでサーバを立てて実行させるほどの気力はない。
ので、AWS Lambdaを使って関数を定期実行させることにした。

# 目的

関数の定期実行ができるまでをメモ程度に記録する。
AWS Lambdaに関するナレッジはネットに溢れているが、自分にとって意外なハマりどころや勘所があったので後から見返せるようにまとめたい。

# AWS Lambdaとは
[AWS Lambda とは – AWS Lambda (amazon.com)](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)

# AWS上の環境

– リージョン:東京
– ランタイム:Python 3.9(関数の作成時に設定)

# 実行コードの概要

ファイルは単体で拡張子は「.py」。
実行するコード中には以下の通り、import文があるので外部ライブラリをコードが読み込めるよう

元記事を表示

aws lambda の Runtimeをnodejs12.xからnodejs16.xにaws cli を使って 一括で切り替えたメモ

## 概要
AWSからnode12がEOLになるので、nodejs12.xのlambdaを更新してくれとメールが来ていた。
11月になる前に対応したいので、cliを使って一括でnodejs16.xに更新した。
なお、cdkで作ったものは14.xを明示的に指定しているので、ここで更新が必要なものはCloudFormationが自動生成したLambdaであった。

メール

> Hello,
We are contacting you as we have identified that your AWS Account currently has one or more Lambda functions using Node.js 12 runtime.
We are ending support for Node.js 12 in AWS Lambda. This follows Node.js 12 End-Of-Life (EOL) reached on April 30, 2022 [1].

>As described

元記事を表示

【EC2】自動停止・起動設定をLambdaで書いてEC2タグで設定する

# EC2の自動起動・停止を自動化させたい

社内用のサーバーなどで常時起動しておく必要のないサーバーを夜になったら自動で停止、朝になったら自動で開始をさせたいという要望がありました。
単純に開始処理と停止処理をLambdaで書いて起動や停止をさせればいいのですが、時間の変更や、一時的に停止をやめたり、開始をやめたりなどカスタム性を考えるとEC2のタグで管理できると楽だなという結論になりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290902/448e277c-4b0a-1169-d826-0261a3508ed1.png)

上記画像のようにEC2のタグに開始時刻と停止時刻を書いてしまうという運用です。不要なればタグを外すだけです。
以下のスクリプトでできました。
hour_rounderという関数で時刻を丸めているのですが、これはいらないかもですが念の為にやっています。

あとはこのLambdaをEvent Bridgeで毎時呼び出すだけです。
Lambdaのロールには

元記事を表示

ServerlessFrameworkでLambda(Go)を動かしたらファイルが見つからずエラーになる

# はじめに

GoをLambdaにデプロイしたのですが、ファイル読み込みで多くの時間を使ったのでまとめます
ServerlessFrameworkを利用したLambdaでファイル読み込みをする方の参考になればと思います

# 問題

Lambda(go)で以下のコードを実行していました
ここでは`config.ini`という設定ファイルを本番環境では、`main`の実行ファイルと同じ階層にあるものを読み込むようにします

しかし、このコードでは`not found ./config.ini`となってしまいます

“`go:config.go
path := “/go/src/config/config.ini”

if os.Getenv(“ENV”) == “production” {
path = “./config.ini”
}

cfg, err := ini.Load(path)
“`

# 解決方法

現在serverless frameworkを利用して`serverless.yml`で`main`と同じフォルダに`config.ini`がアップロード

元記事を表示

AWS Lambdaのイベントソースマッピング系のコマンド色々

# はじめに

LambdaのイベントソースマッピングはAWS CLIで操作できますが、多くのコマンドがUUID指定なので使いづらいと感じ、jqコマンドを使ってコマンド一発で実行できるようにしたときのメモです。

# コマンド

## イベントソースマッピングの作成と開始

以下コマンドの\\を置換する。

“`bash
aws lambda create-event-source-mapping –function-name –event-source-arn
“`

## イベントソースマッピングの無効化

### UUID指定

以下コマンドの\を置換する。

“`bash
aws lambda update-event-source-mapping –uuid –no-enabled
“`

### LambdaファンクションArn指定

以下コマンドの\を置換する。

“`bash
a

元記事を表示

最大実行時間9分→60分になった第二世代CloudFunctionsを使ってみた。

# tl;dr
– 2022年8月にGAとなった第二世代CloudFunctions(以下CF)。主な変更点として、最大使用可能リソースと最大実行時間が大幅に増加した。(具体的な変更点は[こちら](https://shinyorke.hatenablog.com/entry/cloud-functions-gen2))
– 最大実行時間が`9分→60分`と、AWSのFaaSであるLambda(最大15分)も屁じゃないくらいに最大実行時間が増えたように聞こえるが、実際には`HTTP関数以外の最大実行時間は今まで通り9分のまま`([参考](https://cloud.google.com/functions/docs/configuring/timeout?hl=ja))。

# やったこと
![スクリーンショット 2022-09-24 22.14.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/646534/b8371ea0-b7a2-cace-e9cd-c1eb1be56422.png)
– pan

元記事を表示

AWS Lambdaで動かすStable Diffusion/Waifu Diffusionをちょっと効率的に使うTips

# はじめに
LambdaでStable Diffusion/Waifu Diffusionを動かすと、画像生成に1枚当たり約3分かかります(パラメータで前後します)。
基本的な作業の流れとしては次のとおりですが、、

**prompt等のパラメータの設定→Lambda実行→【画像生成[3分待機]】→画像ダウンロード→チェック→パラメータの・・・(略)**

面倒です。特に3分待機が。煩雑です。
ということで本記事はこの辺りの状況を少しだけ改善するための小ネタです。
なお、AWS LambdaでStable Diffusion/Waifu Diffusionを動かすためのプロジェクトは次のものを使用します。
最新版のソースコード一式をクローン or ダウンロードしてご利用ください。

https://github.com/densenkouji/stable_diffusion.openvino.lambda

# 前提
– AWS CLI、Docker、Pythonはインストール済み
– 「aws configure」でAWS Access Key ID、AWS Secret Acc

元記事を表示

Python lambda解説

# lambdaとは?
無名関数のこと。
関数を短く書けて便利。
関数名がないので、何回も使いまわしたい関数には使わない。

# 書き方
## 基本
“`
lambda 引数 : 処理
“`
## lambdaを使わない例と、使った例
### lambdaなし
“`
def example(x, y):
return x + y
“`
### lambdaで書いた場合
“`
lambda x,y : x+y
“`
関数名なしで、短く書ける
## lambdaの引数に値を入れる時
さっきの例のxとyに値を入れる時の書き方
“`
(lambda 引数:処理)(引数に入れたい値) と書くので、
(lambda x,y : x+y)(1,2)
となる
“`

元記事を表示

AWSに特化したChaliceフレームワークを触ってみた

今回とあるプロジェクトでChaliceのフレームワークを使うことになり、その導入資料を作成したので、記事として残そうと思います。

## Chaliceとは

Chaliceは、Amazon製であるため、AWS専用のフレームワークとなっています。

– デプロイ周りを簡単にかつ自動で構築できるため、コードを書くことに集中できる
– Flask、bottle、FastAPIなどのフレームワークで使用されているおなじみのデコレーターベースの構文を使用しているため、学習コストが低い
– さまざまなデプロイツールに対応しているため、自分が慣れ親しんだデプロイツールを利用できる(TerraformやAWS SDKなど)

公式ドキュメントではデプロイまでの時間が早いことを示すため、ターミナルでの実行時間を見れるようにしています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/255267/d136591d-69ad-bad7-eaad-236c842bb4f3.png)

とても自信がおありの

元記事を表示

Lambda(Python)のテストイベントを作成するために、関数の先頭に入れる1行

# はじめに
「API Gateway→Lambda」などのLambdaを書くときに、最初にlambda_handlerのeventに渡ってくるデータを取得したい場合のワンライン、コピペ用メモです。

# Lambda
“`Python
print(json.dumps(event, ensure_ascii=False))
“`
まず、この1行を入れて、APIを送信するなどして、Lambdaを動かします。
eventの内容をCloudWatchLogsから取得して、テストのイベントJSONに使います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155165/19be57b9-0eb1-043e-b8a8-e5d3a25adf9c.png)

# おわりに
小技として記事にしてみました。

元記事を表示

AWS API Gateway Lambda オーソライザーを使用してアクセス制御を行ってみる

# Lambdaオーソライザーとは
API Gatewayを使うとインターネット上にREST APIを公開できます。
そしてLambdaオーソライザー(以前のカスタムオーソライザー)は、Lambda関数を使用してAPIへのアクセスを制御するAPI Gatewayの機能です。(公式より抜粋)

# 実行イメージ
Lambdaオーソライザーの実行イメージは以下の通りです。(公式より抜粋)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/273110/0b1b4a73-96e1-2231-95e3-214d25dc96ea.png)
1. ClientがAPI Gatewayにアクセス
1. API Gatewayは必要情報をLambda Auth functionに送信
1. Lambda Auth functionは入力情報を元に認証を行った後、アクセス許可orアクセス拒否を返す
1. アクセスが拒否された場合、API GatewayはHTTP403等のエラーステータスをClientに返す

元記事を表示

Waifu DiffusionをAWS Lambdaで動かしたい

# はじめに
本記事は以下の記事の内容を補足するものです。

https://qiita.com/densenkouji/items/4db5a29f539b87de91e3


AWS LambdaでStable Diffusionを動かす場合、「数GBもあるモデルをどこに格納するのか?」という課題があります。
当初はモデルを任意に変えられるようオリジナルである「stable_diffusion.openvino」から特に変更せず、パラメータでモデルを指定可能にしていたのですが、これだと以下の問題がありました。
* モデルのダウンロードが都度発生する
* ダウンロードしたモデルを保存するためのエフェメラルストレージのサイズを増やす必要がある(モデルのサイズ分+α)

これらはLambdaの特性に起因する問題で致し方ないのですが、どちらもコスト増につながるため、現在はモデルをDockerイメージに含めるようにしています(これはこれでDockerイメージの増大になり、別の問題が発生しますが…)。
そのためモデルを変更したい場合はDockerfileを修正する必要があります。

そこ

元記事を表示

画像生成AI Stable DiffusionをAWS Lambdaで動かす(img2img対応)

# はじめに
本記事はAWS Lambda上でStableDiffusion(img2img)を動作させることをゴールとします。
ソース一式はGitHubに置いてあるため、使い方の解説など特に必要ない方はそちらを参照してください。

https://github.com/densenkouji/stable_diffusion.openvino.lambda

:::note info
本プロジェクトは「stable_diffusion.openvino」プロジェクトを基にAWS Lambdaに移植したものです。
https://github.com/bes-dev/stable_diffusion.openvino
:::

# 実行結果
次節に示す手順を進めていただくことにより、AWS Lambda上で画像を作成することができます。
(コマンドの–function-nameにはデプロイしたLambda関数名を指定します)
“`sh:実行例
aws lambda invoke \
–function-name mySdFunction-yty7mdazmzzlywey \

元記事を表示

Selenium Wireが出力するHARファイルをAWS Lambda上で分析する(JSON/Pandas/Seaborn)

# HARファイル(JSON)を加工して分かりやすくしたい
その汎用性から言語や場面を問わずJSON形式のデータが飛び交うようになり、結果としてJSON形式を扱うことが可能なライブラリも多種多様なものが開発/公開されています。

先日Selenium Wireに関する記事を投稿しましたが、Selenium Wireの処理結果としての通信情報もJSON形式のHAR(HTTPアーカイブ)ファイルとして取得できます。
中身はHTTP(S)通信なので、その基本的な構造はリクエストとレスポンスのセットが複数個並んでいる単純なものではあるのですが、通信ログはそのままだと不要な情報も多く、一見すると圧倒されがちです。
HARの汎用的なビューアもあるとはいえ都度ビューアで内容を確認するよりも、自分の望む情報が分かっている場合は直接HARファイルを操作した方が効率的な場合もあることから、今回はAWS Lambda上でHARファイルを基にした解析っぽいことをしたいと思います。

なお、対象とするHARファイルや環境など、前回の記事を(一部)基にしています。

# 注意事項
– HARファイルには通信内容が

元記事を表示

lambda invokeがnat gateway経由で通信していた

Private VPCからLamdaをInvokeした際、Nat Gatewayを経由して通信 => NatGateway経由で通信費がかかっていた。

そらそーだ

VPC EndPoint作成することで回避可能。
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-vpc-endpoints.html

とはいえ、VPC Endpointも0.014$/h掛かるのも留意点。
Subnet単位でかかるので、3subnetsへ設定すると30$/monthくらい固定で必要。

元記事を表示

1日の振り返りを簡単に楽しくできるSlack botを作ってみた(furikaeru)

## :frog: 解決したい課題
僕のチームでは有志のメンバーが、毎晩仕事が終わるときに、Slackのチームチャンネルで一日の振り返りを投稿しています。

目的は2つ。
自分の頭の整理と、チームメンバーへの共有です。

しかし、毎回フォーマットをコピペしに探しに行ったり、今日自分がやったことを思い出す作業にはまぁまぁの負荷があります。一日真剣に働いて、ウィルパワーが消耗し切っているのに、これはキツイです。それで、なかなか毎日続かない。一度サボると、やらなくなってしまう。そんな循環を繰り返しています。

それを少しでも楽にできるようにしようということで、botアプリを作りました。

アプリの名前は`furikaeru`にしました。:frog:

`今は一般公開はしていませんが、一応それも見据えてコード書いたので、ゆくゆくできたらと考えていたり、考えていなかったり。`会社のインフラ使わせてもらっているので、インフラ代が気になるところ。:money_with_wings:

## :frog: 仕様
### 実装済みのもの
#### 1. アプリをチャンネルに招待する

アプリのいないチャ

元記事を表示

俺みたいになるな!Lambda+Node.jsでDynamoDBにputItemするだけで半日溶かしたAWS SAP

## やりたいこと
ただただシンプルにLambdaでDynamoDBに書き込みたい。それだけなんです。初体験でも無い。
なのにハマって、シルバーウィークの初日の半日それで溶かしてしまいました。
AWS SAPの称号を剥奪されるかと思って誰にも相談できませんでした。

https://qiita.com/kakudaisuke/items/174ff82b558b86d041b4

ちなみに、なんでそんなことしたいかというとコレです↓ :frog:

https://qiita.com/kakudaisuke/items/18681418cebc3bee93b5

## 実装!
### DyanmoDBの設計
完了したタスク(task)を、ユーザー(user)、日付(date)ごとに登録したいです。
で、取り出す時はあるuserとdateのtaskを全て取得したい。

試行錯誤の末、保存したいアイテムはuser, unixtime, date, taskにしました。

ちなみに、user, dateはDynamoDBの予約語。予約語だけど使えちゃう。queryする時にちょい厄介だけど使

元記事を表示

AWS Lambda + Node.jsの実行環境でローカルタイムを扱いたいが、とりま日本時間JSTに甘んじる(JavaScript)

## やりたいこと
AWS Lambdaで時間を扱うのに、日本時間JSTが欲しい。(本当はローカルタイムが欲しい。)
だけど、Lambdaではローカルタイムという概念がないらしく、全てUTCになってしまう。
日本時間JSTが欲しいと思っていると、9時間ずれた値が返ってきたり、表示が`19/9/2022`となって欧米か!とツッコミたくなったり、してしまう。

ちなみに、なんでそんなことしたいかというとコレです↓ :frog:

https://qiita.com/kakudaisuke/items/18681418cebc3bee93b5

## 実装!
色々調べたが簡単に済ませたかったので、とりま+9時間してJ、日本的なフォーマットに自力でした。

“`js:index.js
let dateTime = new Date();

// JSTにする
time.setHours(dateTime.getHours() + 9);

// 2022/9/19の形にする
const year = dateTime.getFullYear();
const month = dateTim

元記事を表示

AWS LambdaにリクエストしたらNo ‘Access-Control-Allow-Origin’ header is present on the requested resourceのエラーがでた.

LambdaにAPI Gatewayを通して,リクエストしたところ
“`
Access to XMLHttpRequest at ‘<リクエストURL>‘ from origin ‘<オリジン名>‘ has been blocked by CORS policy:
No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
“`
のエラーが出ました.

CORSの設定をしていたのに,このようなエラーが出ました.
また,通信が成功するときもありました.

## 原因
Lambdaの実行時間制限が少ないことが原因でした.
以下,Lambdaのコンソール画面にあるtimeoutが実行時間制限です.
![Screenshot 2022-09-19 082333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2599663/74753c9e-c781-40b7-8b7b-360e424f2f61.png)

デフ

元記事を表示

【AWS】Lambdaコンテナイメージ利用に対する覚え書き

## はじめに

機械学習用のライブラリを利用したAPIをLambdaで構築しようとした場合など、
デプロイパッケージサイズ制限(250MB)により利用できないケースがあります。

その場合の対応方法としてコンテナイメージをLambdaで利用できるようになっていますが、
実際にLambdaコンテナイメージを使って構築/動作確認するまでに結構ハマったところがあるのでdockerfile作成からAmazon ECRへのプッシュまでを本記事にまとめます。同じくハマっているひとの参考になればと。

※リポジトリの作成等の操作はSKIPしています

***

## 環境

Windows 10 Pro (WSL2を利用)
Docker v20.10.17

## 目次

1. dockerfileを用意する(例としてPythonが動作するコンテナを作成)
2. dockerでコンテナを作成する
3. 作成したコンテナをAmazon ECRにプッシュする
4. ハマったところ

### 1. dockerfileを用意する

“`dockerfile:dockerfile
#

元記事を表示

OTHERカテゴリの最新記事