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

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

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のページには表示されてない。)

元記事を表示

Lambda@Edgeで脆弱性対策

# Lambda@Edge で脆弱性対策

## あらすじ

新たなウェブサイトの脆弱性への攻撃手法が出回り始めたけど、すぐには改修できない。
システムの外部で攻撃防御を行うにはWAFを使うことになるけれど、AWS WAFは高い。
(個人のウェブサイト維持費としては。会社ならどうということはないのですが)

特定の条件に合致するリクエストを弾くだけならば Lambda@Edge でも可能では?
ということで試してみた話。
今回はApache log4jの任意のコード実行の脆弱性(CVE-2021-44228)を対象とします。
https://www.jpcert.or.jp/at/2021/at210050.html

## Lambda@Edgeとは

Amazon CloudFront の機能で、CDNエッヂで実行可能なLambda関数。
ウェブサイトへアクセスがあった都度実行させて、その結果を返すことができます。
ということはWAF的な動作も可能なはずです。

## 前提条件

脆弱性対策を行いたいウェブサイトで Amazon CloudFront (CDN) を利用している

元記事を表示

Arm64版のAWS LambdaでGoogleのAIモデル「Gemma」を動かす

本記事は以下の記事内にて作成したLambda関数を、arm64アーキテクチャに対応させるものとなります。合わせてご確認ください。

https://qiita.com/densenkouji/items/3d8c3d045f101cd0b61c

# はじめに
先の記事にて一先ずはLambdaでGemmaを動かすことができました。
ただ、AWS Lambdaはアーキテクチャをarm64に設定することもできます。
前回は特に意識していなかったためデフォルトのx86_64になっていましたが、今回はLambdaのアーキテクチャをarm64に指定して動かしてみます。

# arm64アーキテクチャへの移行について
それでは、arm64アーキテクチャへ移行させるため、Lambdaやdockerのアーキテクチャ設定に関して修正します。
具体的には以下の点を修正しています。
– dockerイメージをビルドする際、arm64用にビルドする
– Lambda関数作成時にアーキテクチャとして、arm64を指定する

# 修正したコード
前回の記事でイメージのビルドやLambda関数の作成に使用したスクリ

元記事を表示

Serverless Framework の DynamoDB + lambda でコードを変えずにローカル開発環境を構築する方法

# はじめに
serverless framework はサーバーレス構成に特化したIaCで、手軽にLambdaなどを使ったアプリケーションを構築することができます。
しかしながら、構築は比較的簡単に行なえますが実際に触ってみるとテストがやや大変です。
今回はそんな悩みを解決するために、Lambda + DynamoDB の環境をコードを変更せずにローカルで作成する方法について紹介します。

# 構成
![serverlessframework-dynamodb-local-sample.drawio.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1586001/ceafa18c-d23a-4dc3-2c5e-cd750fefcb37.png)

# DynamoDB local
DynamoDBはローカル環境で実行できるパッケージがAWS公式から提供されています。

https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developergu

元記事を表示

GPSを使ってSwitchBotのロックを解除する方法

イントロダクション
iOSのショートカット,AWSのlambda,APIGatewayを利用して家の近くに近づくとSwitchBotのロック解除を行うコードを以前作成しており,時間ができたので記事にしてみました.

# イメージ図
![](https://storage.googleapis.com/zenn-user-upload/b9716e7c7e59-20240302.png)

# システム構成図
![](https://storage.googleapis.com/zenn-user-upload/d67bce7cd5da-20240302.png)

# 実装の流れ
## コード作成
こちらを作成しました.
https://github.com/taiseee/switchbot_operation.git
## デプロイ
### lambda関数作成
![](https://storage.googleapis.com/zenn-user-upload/90922720431b-20240302.png)
ランタイムはpython12で基本的に設定はデフォルトで大丈夫

元記事を表示

Win11のPCでdockerを利用して、aws のlambdaのレイヤーを作成した

四苦八苦したので備忘録代わりに。
そもそもなぜdockerを使おうとしたのか?
→lambdaのレイヤーに、moduleをインポートしたかったけど、
windows環境でpip installしたものを圧縮して、lambdaにアップロードしてもうまくいかなかったため。

環境がwindowsで作成したものだとよくないとのことがあり、
aws のcloud9を使って

win11でdocker
→起動できない

HyperVプラットフォーム
の機能をONに
→できない

BIOSのセットアップ画面から以下二つを有効化
・CPU
・virtualizaion

再起動して、タスクマネージャ起動→パフォーマンス→右下に「仮想化:有効」となっていることを確認
→あらためてHyperVプラットフォーム
の機能をONに

“`docker-file
# syntax=docker/dockerfile:1
# Install necessary dependencies
FROM amazonlinux:2 as builder
RUN yum update -y && yum install

元記事を表示

AWS LambdaでGoogleのAIモデル「Gemma」を動かす

2024年2月21日、Googleから大規模言語モデル(LLM)である「Gemma(ジェマ)」が公開されました!
これまでGoogleのモデルはクローズドなものでしたが、このGemmaはオープンソース型!ということで、本記事ではAWS Lambdaを使用してGemmaを実行させてみます。

## はじめに
Gemmaの公開から1週間ちょっと経っていますが、この短い間に既に色々と検証されている方や、Gemmaを利用するためのライブラリ等の対応など多くのことがネット上に見受けられます。
特に、GemmaをGGUF形式に変換するllama.cppはGemmaのリリースから3日と経たずGemmaに対応されており、最近のLLMに関する開発スピードの早さには驚かされます。
ちなみにこの辺りの対応の流れは以下のURLから確認いただけるので、ご興味があれば覗いてみてください。

https://github.com/ggerganov/llama.cpp/pull/5631

## 手順
手順としては大きく以下のようになります。
1. Gemma(GGUF形式のモデル)のダウンロード
1. Lambd

元記事を表示

python3.12 のLambda Layerの作成方法

# 初めに

Lambda のPython 3.12 対応につき、Layer の作成方法を調査したので**備忘録的に残します**
基本的にはpython3.11 の時と変わらないと思いました

:::note
– .zip形式での作成 とします
– コンテナでの作成方法は対象外
:::

https://aws.amazon.com/jp/about-aws/whats-new/2023/12/aws-lambda-support-python-3-12/

ポイント
– Python3.12 はAmazon Linux 2023で動く
– Windows環境でのLayer 作成は困難なので、Windows環境しかない人はどうにかLinux環境を構築する

# 作業の大まかな流れ

大まかな流れは以下の通りです:
– Lambda実行環境の確認
– (Linux 環境を入手)
– Python3.12 と必要なパッケージのインストール
– 目的の pip のパッケージをディレクトリににインストール
– レイヤーの作成

Linux 環境が無い場合は Cloud9 が手っ取り

元記事を表示

コスト配分タグのアクティブ化をスケジュールで自動化する

# 初めに
Organizationsで管理するコスト配分タグについて、アクティブ化漏れを防ぐためにスケジュールで有効化する機会があったのでその内容について記載します。

# コスト配分タグとは
タグはAWSに割り当てるラベルで、キーと値から構成されます。
タグを割り当てておくことでAWSのコストについてもタグごとに管理することができます。
逆にタグがついていないと詳細にコストを追うことが困難になることがあるので注意が必要だと思います。

https://docs.aws.amazon.com/ja_jp/awsaccountbilling/latest/aboutv2/cost-alloc-tags.html

# 構成
本当はコスト配分タグが追加される度に有効化ができればよかったのですが、そのやり方は難しそうだったのでコスト配分タグの有効化を行うLambdaをEventBridgeでスケジュール実行する形をとりました。
Lambdaで実行するコマンドは以下の2つです。

https://docs.aws.amazon.com/aws-cost-management/latest/

元記事を表示

pandas を用いて JSON Lines 形式で S3 に保存する

最近はじめて AWS Lambda を触り、 Python ライブラリの pandas を用いてデータ処理しました。 JSON データの読み書きや S3 への保存・取得といった基本的なことについて、その方法を書き残しておきます。

本記事で扱う内容は以下のとおりです。

– pandas で JSON Lines 形式のデータを読み書きする
– データを S3 に保存、 S3 から取得する
– S3 から一部のデータのみを取得する

## サンプルデータ
本記事では以下の JSON を扱います。7つのレコードを持つ配列です。

“`json
[{“number”:”JY01″,”code”:”TYO”,”name”:{“ja”:”東京”,”en”:”Tokyo”}},
{“number”:”JY05″,”code”:”UEN”,”name”:{“ja”:”上野”,”en”:”Ueno”}},
{“number”:”JY13″,”code”:”IKB”,”name”:{“ja”:”池袋”,”en”:”Ikebukuro”}},
{“number”:”JY17″,”code”:”S

元記事を表示

lambda関数の基本概念と利用シーン

## はじめに
こちらはlambda関数に関しての備忘録。

## 🦁**結論**🦁
lambda関数は、小規模な匿名関数を一行で定義するための構文。

lambda 引数 : 処理 (引数)
“`py
lambda x: x + 1
“`

:::note info
押さえておくべき点
* 短い処理に使うことでコードの可読性が向上。
* ちょっとした処理を加えたい時に使われる関数。
* 引数は複数指定可能。
:::
***

:::note warn
利用シーン
* 他の関数の引数として直接記述する場合に有用
* sorted()やlist.sort()のkey引数にlambda関数を使うことがある。
* フィルタリングで使われるfilter()関数の引数として、特定の条件に基づいてリストから要素を選択するために使用されます。
* データ変換などで使われるmap()関数の引数として使用し、リストの全ての要素に対して変換を適用します。
* GUIやWebアプリケーション開発において、簡単なイベントハンドラーを定義するのに利用される。
:::
**

元記事を表示

【AWS】 CloudWatch上のMediaLiveのメトリクスをLambdaから取得する際に気をつけること

# 概要
この記事では、 `CloudWatch` 上の `Medialive` のメトリクスを取得する際に気をつけることについて言及しています。リファレンスが少ない、かつ引っ掛け問題のような感じで自分は丸一日費やしたのでその記録を残しておきます。

内容的には
– 「`CloudWatch` のメトリクスを `Lambda` で取得する際に気をつけること」
– 「`MediaLive` のメトリクスを取得する際に気をつけること」

が混ざっていますが、どちらも参考になれば、とても嬉しく思います。

# 前提
`MediaLive` で事前に配信を行い、 `CloudWatch`上で指定の `ChannelId` においてメトリクスが確認できることを前提としておきます。

# 実装
実装は `Lambda` で行います。
`Lambda` でなくても問題ないですが、 `Lambda` で行う場合の注意点をいくつか書いておきます。

:::note warn
**注意点①**
`Lambda` に設定している `Role` に対して、`”cloudwatch:GetMetricSta

元記事を表示

[AWS]Serverless Frameworkを使ってAPI Gateway×Lambda×DynamoDBを使用したWebAPIを構築する

## インフラ構成
WebAPIの作成に当たって今回使用するAWSの各サービスを簡単にまとめてみます。

・API Gateway
HTTPリクエストを受け付けて、他のAWSサービス(Lambda等)にルーティングする機能です。REST APIやWebSocket APIを簡単に作成できます。API Gatewayでは、リクエストのパスやクエリパラメータ、ヘッダー、ボディなどをLambda関数に渡すことができます。
https://aws.amazon.com/jp/api-gateway/

・Lambda
サーバレスコンピューティングのサービスです。コードをアップロードするだけで、イベントやトリガーに応じて自動的に実行されます。サーバの管理やスケーリングを気にする必要がありません。Lambdaは、Node.js、Python、Java、Go、Rubyなどの言語に対応しています
https://aws.amazon.com/jp/lambda/

・DynamoDB
DynamoDBは、NoSQLデータベースのサービスで、高速でスケーラブルなキーバリューストアやドキュメントストアを提

元記事を表示

AWS Lambda(Python)でSQS, ParameterStore, DynamoDBを処理してみた

# AWS Lambda(Python)でSQS, ParameterStore, DynamoDBを処理してみた
最近AWS上のサービスを使ったアプリ開発が増え、バッチなどの業務にLambda、SQSなどを使用したので備忘録として残そうと思います。
本番を想定した設定にはなっておりませんので、ご容赦ください。
Lambda関数で各サービスを使うチュートリアル的なものと思ってください。
今回は仕様的な部分に関してはほぼ記述しておりません、機会があれば別途投稿しようと思います。

## 実施したこと
* Lambda:関数の作成、下記のサービスとの統合
* SQS:キューの作成からメッセージを受信する設定
* ParameterStore:値のセット、Lambda関数で取得
– SDKで取得する方法
– Extensionsで取得する方法(+カスタムレイヤーの作り方)
* DyanamoDBの作成、操作

## Lambda:関数の作成、下記のサービスとの統合
・まずはLambdaの【関数の作成】から作成する
![image.png](https://qiita-image-s

元記事を表示

RustでのAWS Lambda開発完全ガイド

## 概要

この記事はRustでAWS Lambda開発を行うにあたっての全体プロセスのガイドです。RustでLambda関数を実装し、そのコードを実行するためのDockerコンテナイメージを作成します。次にそのイメージを自動でビルドしLambda関数を更新するCI/CDをCodePipelineで構築します。他に複数のLambda関数を一つのクレートで管理し、それらを一括でデプロイする方法についても解説します。

## なぜRustでLambdaを実装するのか?

まず、Rustは素晴らしいプログラミング言語です。静的型付けによってバグの少ないコードを書くことができます。またcargoという洗練されたパッケージマネージャにより、依存関係の解決やビルドを柔軟かつストレスレスに行うことができます。

Rustで処理を実装することで(他の言語と比較して)処理時間を短く、またメモリフットプリントを小さくすることができます。Lambdaは実行時間とメモリ割当量によって課金されるため、コスト面で非常に有利です。

参考:

https://zenn.dev/hinastory/article

元記事を表示

[パート2:実行]S3に保存する前ラムダでサムネイルに画像圧縮の前処理

# 前提

せめてS3・Lambda・IAM権を持っているAWSアカウントそれともIAMアカウント用意

# 概要
こちら記事では詳細な実行を説明させて頂きます。

主な内容が下記のように進めています。

1. バケツ作成
1.1 バケツ作成
2.2 ライフサイクル作成
2. ポロシー・ロール作成
2.1 ポリシー作成
2.2 ロール作成
3. ラムダファンクション作成
3.1 環境作成
3.1.1 初期設定
3.2 ファンクション作成
3.2.1 ロールや処理時間を設定
3.2.2 トリガー設定
3.2.3 環境変数
3.3 ラムダのNode modulesについて
4. テスト行い
4.1 S3アップロード
4.2 結果をチェック
4.3 ログをチェック

## 1. バケツ作成

2つのバケツを作成し、そのうち1つを一時的なバケツとして使用します。この一

元記事を表示

OTHERカテゴリの最新記事