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

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つを一時的なバケツとして使用します。この一

元記事を表示

[パート1:概要の設計] S3に保存する前ラムダでサムネイルに画像圧縮の前処理

前の[記事](https://qiita.com/17021084/items/e1078bacc2fbc32d3183)の次に、今回は実践のユーケースを説明させて頂きます。

以下の2つのパートに分かれています。

– パート1:概要の設計(本記事)
– パート2:[詳細な実行](https://qiita.com/17021084/items/0e077c7c85bd5fce657d)

## **概要**

1. 前提
2. 背景
3. 目的
4. 構成・経過
5. 評価
6. その他

## 1.前提

– Node Js 20.xx
– Lambda x86_64
– [sharp](https://sharp.pixelplumbing.com/install) (os linux, cpu x86)
– AWS console 操作ため、管理権があるアカウントは必要

## 2.背景

SNS系アプリでよく見かけるサムネイルです。これらの処理には時間がかかりますが、たまにしか実行されません。メインのサーバーにサムネイル処理を置くと、他のサービスに影響を与える可能性があ

元記事を表示

API超入門!最速で使えるAPIを実装する

# はじめに
こんにちは、ユーゴです。
最近、趣味でクラウドプラットフォームを遊んでいます。AWS, GCP, Azureなど色々と試しており、「こんなことができるのか、すげ〜」という感じです。
今回は、AWSを使用して、「とにかくAPIを自作してみたい!」という方に実装方法を紹介します。

# 結論
1. 「**Lambda**」でバックエンドを作成
2. 「**API Gateway**」でエンドポイントを作成
これだけで、APIを実装できます。しかも、今回はGUI操作で完結します。

# 対象読者
・**サーバーなんもワカランの人**
→ 今回は、サーバーレスで実装できます。AWS偉大。GASのデプロイと似たような感じです(GASでもAPIは作れるけど、APIのためのデプロイという感じではないので、APIを体系的に学習できない)

・**APIはちょっと分かるの人**
→ 「Slack API 叩いてみたことはある」という感じで、なんとなくAPIがどういうものか分かっていれば十分です

# 0. AWSアカウントを作成
今回は、APIを作成するために、AWSを使用して構築していき

元記事を表示

c#+Lambda+API Gatewayで最小構成のRestAPIを作成する方法

直近ではPythonを使ってLambda+serverless framework+APIGatewayでRestAPIを作成していたのですが、そちらのプロジェクトが終わって知見を広めようとバックエンド系の言語を調べていた所、C#の文字を発見!
これまでC#はwindows用のアプリを開発する言語として利用してきたので、バックエンドでも使えることを知ってびっくりしました。

まだまだ初歩も初歩の部分をやっているのですが、初歩の部分のハードルがかなり高くて、自分でも2回目やるときにまた調べなきゃいけないことになりそうだったので、最小のAPIを作成してデプロイするところまでを手順化してみます!

# 環境
windows11
VisualStudio2022Community 17.8.6
.NET6

# まずVisualStudioを変更する
1. VisualStudioInstallerを起動して、変更を選択します。
2. **ASP.NETとWEB開発**にチェックを入れて右下の変更を押します。
3. しばらく待つとVisualStudioが変更されるので、これで完了です!

元記事を表示

サーバレスで Minecraft と外部サービスを連動させてみた話

この記事は2分で読めます。
色々あるので一部ぼやかして書いてます。

# はじめに
AWS の Lambda と API Gateway を使って Minecraft と外部サービスを連携させてごにょごにょ色んなことをやってみた話を簡単にまとめました。
Minecraft は全世界でもっともプレイヤー数の多い人気ゲームですが、アプリ自体は旧世代のアプリケーションなので現代のサービスと連携して有効利用しようと思うとそれなりに工夫が必要になります。Steam や Discord との連携機能も無ければ、Web からのアクセスもできなければ、サーバコンソールからでも Minecraft 専用のコマンドが必要になるという勝手の悪いゲームです。ついでに公式のサーバにはヘルスチェックやトラップも備わっていないので Minecraft サーバは壊れたところで自動では何もできません。
ということで何とかします。

# やったこと
Lambda と API Gateway を使ってバニラの Minecraft を外部サービスと連携させます。プラグインも Mod も要らないので公式のバニラサーバでも実装で

元記事を表示

Prisma + zod を使用したLambdaのファイルサイズ肥大を抑えるために Lambda Layersを利用したメモ

## 概要

[前回](https://qiita.com/hibohiboo/items/ed08b21799dd92bedc3e)に作成したファイルだと、バンドル時にハンドラファイルにスキーマファイルを含めてしまい、サイズが肥大化する問題があった。

今回、Lambda Layersを使用し、スキーマファイルを外だしできるようにする。
[/opt/nodejs/ にレイヤーのパスが通る][*1]ため、そこにスキーマファイルを入れるように設定した。

[ソースコード](https://github.com/hibohiboo/kartagraph-monorepo/tree/e48a851f4eef7dfeb5b7410b8b8432505d816af0/)

## ソースの変更
### Lambdaの定義ファイル
tsconfigを修正し、ソースを直接読みにいっていた部分を、デプロイ後のパスである`/opt/nodejs/`以下のフォルダを見に行くようにする

“`diff:backend/tsconfig.json
“paths”: {
“@kartag

元記事を表示

OTHERカテゴリの最新記事