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

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

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

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事