Lambda関連のことを調べてみた2023年11月06日

Lambda関連のことを調べてみた2023年11月06日
目次

【学習メモ】API Gateway Lambda オーソライザーとは

# Lambda オーソライザーとは
・Lambda 関数を使用して、API へのアクセスを制御する API Gateway の機能
(クライアントが認可された人か確認するってこと)

クライアントがリクエストをAPI Gatewayへ送信

API GatewayがLambda オーソライザーを呼び出し

Lambda オーソライザーが認可戦略を使用して、「この人はOK」か確認

OKの場合、IAM ポリシーを出力として返す

# Lambda オーソライザーの種類
## トークンベース の Lambda オーソライザー
・TOKEN オーソライザーのこと
・JSON ウェブトークン (JWT) や OAuth トークンなどのベアラートークンで発信者 ID を受け取る

## リクエストパラメータベースの Lambda オーソライザー
・REQUEST オーソライザーのこと
・ヘッダー、クエリ文字列パラメータ、stageVariables、および $context 変数の組み合わせで発信者 ID を受け取る
・WebSocket API では、リクエストパラメータのみ使える

元記事を表示

【AWS】CloudWatchのカスタムウィジェットからリソースを操作する(EC2開始/停止)

## はじめに

Lambdaで実装できるならCloudWatchのダッシュボード上で色々な操作ができそうなので、
EC2を開始/停止するLambda関数を書いてカスタムウィジェットに設定し、CloudWatchのダッシュボードからEC2の開始/停止をしてみる。
(Lambda書いてまでCloudWatchからEC2を操作する必要性は置いておいて)

### Lambda
サーバレスでコードを実行できるサービス。今回は[AWS SDK for Python(Boto3)](https://aws.amazon.com/jp/sdk-for-python/)を使う。

### CloudWatch
ダッシュボードに追加するウィジェットは折れ線グラフだったり円グラフだったり色々種類がある。その中にカスタムウィジェットというものがあり、Lambdaを実行し、実行結果を表示することができる。

:::note warn
カスタムウィジェット自体には料金は掛からないが、Lambda関数は実行した分従量課金される。
:::

## 1. Lambda関数を実装
以下2つを実装する。
* パラメー

元記事を表示

AWSでAPI Gatewayをkinesis変換でLambdaする場合のCORS解消

CORSひっかかったのでメモ

“`
POST https://…amazonaws.com/kinesis 500 (Internal Server Error)
“`

|レスポンスキー|変更するパラメータ|変更タイプ|値|
|—|—|—|—|
|200|header.Content-Type|追加|’x-amz-json-1.1’|

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/48015/5a8f2ec3-5766-1253-9846-a2b6687302b3.png)

### 参考URL

https://qiita.com/daisukeArk/items/c6bcc6e1548c00e4b9a6

元記事を表示

lambda式の記述方法

## lambda式の記述方法を教えて下さい。
ChatGPT
もちろん、大丈夫です。
lambdaはPythonの便利な機能の一つで、
**簡単な無名関数(名前を持たない関数)を作成するため**に使用されます。

### 基本的な形式
“`python
lambda : expression
“`
## 例1: 引数を一つ取るlambda関数
“`python
f = lambda x: x + 10
print(f(5)) # 出力: 15
“`
## 例2: 複数の引数を取るlambda関数
“`python
g = lambda x, y: x * y
print(g(2, 3)) # 出力: 6
“`
## Tkinterとlambdaを組み合わせる
Tkinterで**ボタンのコマンドなどに引数を渡す際に**、
**lambdaを使うことがよくあります**。
“`python
import tkinter as tk

def show_message(msg):
print(msg)

root = tk.Tk()
bu

元記事を表示

CloudFormationのテンプレートファイルでLambdaコードベタ書きから脱却したい

## はじめに
CloudFomationでLambdaリソースを作るにはやり方が2つ。
– S3へ事前に固めたZipファイルを指定してLambdaリソースを作る
– テンプレートファイルそのものにインラインでベタ書きで書いてしまう

後者のベタ書きだと色々不都合があって、

– Nodejs.18ランタイムだと、CommonJS形式の強制的にindex.jsになる(マネコンからデフォルトで作成するとES形式のindex.mjsなのに)
– テンプレートとコードが分離できないので、IDEのlinterが通せない
– インラインだとテンプレートファイルがそもそも見にくい

テンプレートへのインラインベタ書きをやめるには、CodeセクションでLambdaコードにS3へアップロードしたZipファイルを指定すればよく、AWS CLIだと`aws cloudformation package`が使えるが、自前でpackage化して面倒くささを体感してみる。

参考:packageコマンド

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/

元記事を表示

aws lambdaでpsycopg2を使おうとしたらlibpq.so.5: cannot open shared object file: No such file or directoryとなった話

# 概要

lambdaでpythonを使ってRDSにアクセス時に`libpq.so.5: cannot open shared object file: No such file or directory`とエラーが出てしまったのでその問題の解消法を備忘録としてまとめました。

今回はpoetryを使っていましたが普通に`requirements.txt`でやっていても同じことだと思います。

## 環境

– AWS lambda
– AWS RDS (postgresql)
– Python3.11
– poetry

### ライブラリ

poetryで使っていたライブラリの一部

“`toml:pyproject.toml
[tool.poetry.dependencies]
python = “^3.11”
psycopg2 = “^2.9.9”
psycopg2-binary = “^2.9.9”
sqlalchemy = “^2.0.22”
“`

## 状況

`lambda`から`RDS(postgres)`にアクセスしようとして次のようなエラー(ログ)が`Cl

元記事を表示

TerraformでSNSからLambdaにPub/SubするLocalStack環境を作ってみよう

# 概要:information_source:
Mac(M2チップ)環境でTerraform + LocalStack(無料版)を使い、以下の環境を作るのがゴールです。

![スクリーンショット 2023-08-26 21.09.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203671/8927e883-ba0a-149c-b4b8-03529949ea8e.png)

# ハローキータ:sunny:
AWSの勉強をしようと思ったものの、個人でそんなにお金はかけられない、けど勉強はしたい…
そこへLocalStackとの出会いがあり、せっかくやるならTerraformも一緒に覚えようと思い立ちました:bulb:

己の頭の整理も兼ねて、今回初めて記事を書きます:pencil:

# 謝辞:bow:
筆者自身TerraformとLocalStackの経験が浅いため、詳しい説明は省きますのでご了承ください。

そのため、本記事は”LocalStackとTerraformでこんなことができるんだ

元記事を表示

未成年なのでGooglePlayにアプリを出せないからAWSで自分のサイトからダウンロードできるようにする

## 悲しいことに未成年はアプリのリリースができない
悲しいことにGooglePlayは18歳、AppleStoreは20歳じゃないとアプリが出せません。
自分は普段UnrealEngineでアプリを開発しているのですがリリースできないのは悲しいです。
そこでAndroidでは野良アプリのダウンロードができるため、自分のwebサイト(AWS)でapkを配布することにしますた。

https://aoharu.works/works/index.html

:::note warn
見よう見まねでAWSは構築しているためセキュリティなどで不備がある場合は優しく教えて頂けると幸いです。
:::

## S3+Lambda+API Gateway +reCAPTCHAで実装する
reCAPTCHAをweb側に搭載し、API Gatewayを通じてAWS Lambdaで認証をしS3の署名付きurl(時間制限付き)を生成し、クライアント側に返す形です。クライアント側からはobject key(apkファイル)を指定します。
以下がガバガバ構成図です(厳密には多分違う)

![Desktop S

元記事を表示

【AWS】用語を整理しながら学ぶAWS AWS Lambda

## はじめに

この記事では AWSが提供するAWS Lambda(以下、Lambda)を学習していく記事です。主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど)
誤りなどがあれば書き直していく予定です。

## Lambdaとは

簡単に1行で表現すると
`サーバーやクラスターについて検討することなくコードを実行`と表現されています。

公式では以下のように説明されています。

> AWS Lambda は、サーバーレスでイベント駆動型のコンピューティングサービスであり、サーバーのプロビジョニングや管理をすることなく、事実上あらゆるタイプのアプリケーションやバックエンドサービスのコードを実行することができます。200 以上の AWS のサービスやサービス型ソフトウェア (SaaS) アプリケーションから Lambda をトリガーすることができ、使用した分だけお支払いいただきます。

[参考](https://aws.amazon.com/jp/lambda/)

Lambdaは`re:Invent 2014`で発表された革新的なコンピューティングサービスです

元記事を表示

AWS LambdaからのEC2インスタンスの起動を再現してみた

# 経緯
弊社SIGNIFIの自社事業として「[りふり](https://rifuri.jp/)」という介護事業があります。
2018年のオープン時に請求関連の業務システムを
我々システムソリューション本部のメンバーでAWS環境に構築して運用していました。

りふりシステムのインフラとしては、DBのバックアップをS3に日次で取得したり、
AWS Lambdaを利用して業務時間外のサーバ停止・起動を自動化していました。

Qiitaの寄稿にあたり、2023年10月時点での最新のAWS環境(Lambda)を利用したサーバ(EC2)の
起動を再度トライしてみようと思います。
(時間指定の停止などは次回以降で)

それでは行ってみましょう!

# 流れ
① AWSアカウントの作成【今回省略】
② EC2インスタンスの作成【今回省略】
③ IAMポリシーとロールの作成
④ LambdaでEC2インスタンスの起動の設定

# ③IAMロールの作成
### ポリシー作成
AWSコンソールにログインし、まずはロールに紐づけるポリシーから作成します。
IAMサービスの アクセス管理 → ポリシー を選択

元記事を表示

Lambda 予約語について注意

Lambdaに記述する関数の中ではAWS内での予約語に注意して記述する。
たとえば”name”のようなDBのキーとなっていそうなものは、ExpressionAttributeNames={“#name”: “name”},

上のように、この”name”はカラム名として使用しますよ、宣言することで使用可能となる。

DynamoDBにputする場合の関数の例。

“` demo.py
def post_users(requestJSON):
table.update_item(
Key={“id”: requestJSON[“id”]},
UpdateExpression=”SET #name = :newName, age = :newAge, address = :newAddress, tel = :newTel”,
ExpressionAttributeNames={“#name”: “name”},
ExpressionAttributeValues={
“:newName”: requestJSON[“name”],

元記事を表示

SQSに複数Lambdaトリガーが設定して、メッセージが入ってきた場合これってどうなる?

# 概要
AWSにはメッセージキューサービスとしてSimple Queue Service(SQS)が存在します
またSQSで管理しているキューに対してメッセージが入ってきたとき、処理させるLambdaを設定できます

ふと気になってい見てみると1つのキューに対して複数のLambdaが紐付けると知りました。
とはいえ実際にメッセージを処理させるのは1種類のLambdaである方が都合が良いと思いますが複数のメッセージが入ってきたときにどのような挙動になるか見ていきましょう

## テスト用の処理
1. ログ出力するLambdaを作成
2. SQS作成
3. SQSのトリガーに作成したLambdaを紐つける

Lambdaの関数名、同時に処理するSQSのメッセージ数、処理しているメッセージの中身をそれぞれ出力させます

“`js:handler.js
exports.handler = async (event, context) => {
console.log(context.functionName)
console.log(event.Records.length)

元記事を表示

API GatewayとLambdaとS3でHTTPメソッドに応じて応答を変えた静的なWebサイトを作成し、EventBridgeとLambdaで定期的にリクエストを送信する

この記事は以下のハッカソンに参加した際に作ったプロダクトの一部の作り方を示したものです。

https://moicen-forest.connpass.com/event/292192/

# 作るもの
病院の診察予約を模擬した単純なWebサイトを作成します。実際にはCSRFトークンなど、もう少し複雑になることを考慮する必要があります。
– GET: 現在の呼び出し番号を記載したページ
– POST: 予約完了のページ
– インターネットからHTTPSでアクセスでき、メソッドによって応答を変える

# S3に設置するhtmlファイル
ChatGPTにイメージを伝えてhtmlファイルのコードを出力してもらい、項目や表示内容などを微調整しました。
## 呼び出し番号ページ
呼び出し番号を記載したページ。
![スクリーンショット 2023-09-23 18.28.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2628523/832e7fdc-eb37-412a-89ca-ece1b8e76189.pn

元記事を表示

【AWS】LambdaからRedshiftに接続する【SecretManager】

## 初めに
AWSではDBの接続情報やAPIキーなどはSecretsManagerで管理されていることが多いが、これをLambda関数から取得してRedshiftへ接続しSQLクエリを発行するアーキテクチャと実装コード例を記事にした。

## 使うAWSサービス
・AWS SecretsManager
・AWS Lambda
・Amazon Redshift

## 実現方法
### アーキテクチャ図
![SecretsManager+Lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/587717e3-fdd1-5988-bd0b-037c6af6efdf.png)
### Lambda関数コード
※前提
SecretsManagerには「DBクラスタ名、データベース名、ユーザ名」が保存されている場合
#### ①SecretsManagerへの認証情報要求、②認証情報の返信(取得)
“`python:sample.py
session = boto3.session.Ses

元記事を表示

【AWS Innovate】【2023/10/26】サーバレスセッションまとめ

# 概要
2023/10/26開催の[AWS Innovate](https://aws.amazon.com/jp/events/aws-innovate/apj/)のうち、サーバレス関連セッションをまとめました。
(基本的には資料からの抜粋となります)

なお、[本AWS Innovateは2023/10/30までオンデマンド公開中になります。](https://aws.amazon.com/jp/events/aws-innovate/apj/)
※各セッションの資料のみダウンロードすることも可能
また、アンケートに回答することで 25 USD の AWS クレジットを獲得できます。

# 内容
### T2-1:サーバーレスで開発したときに直面するブロッカーとは何か、どのように解決していくか

#### ゴール
> – コンセプトの理解
> – サーバーレスのよくあるブロッカー
– サービス固有のリソース制限
– 開発手法に関する戸惑い
– サービスの組み立て方の理解
– 推測が難しいコスト見積もり

#### まとめ
– コンセプトについて

元記事を表示

【AWS】CloudWatchLogsログ処理手法について

CloudWatchLogsに溜まったログは、JSONに限らずいろいろフォーマットがあります。Lambda Functionで、直接ログインサイトAPIを呼び出し、抽出して処理するのは方法の一つですが、ログインサイトの検索方法等は普段SQLになれる人にとってなかなか慣れない場合もあります。
LambdaからCloudWatchLogsへアクセスして直接処理せず、CloudWatch LogsのログデータをS3に出力するkことで、AthenaにてSQL文を流して検索する方法ではより使いやすいように思います。

CloudWatch LogsからKinesis Data FirehoseもしくはKinesis Data Streamへ出力するには、CloudWatch Logsのサブスクリプションフィルタの設定が必要になります。Kinesis Data Streamは直接S3に連携ができない仕様となり、Kinesis Data Stream → Kinesis Data Firehose → S3という流れになります。
ただ、リアルタイムで、データを溜めたいという要望があれば、Kinesi

元記事を表示

フロントエンドエンジニアがAWSを触る。

## その1 テーブルを作成する

・[テーブルの作成]
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677104/5dbb25c6-8e09-14cc-53be-5329b3ff6751.png)
・[テーブル名]入力
・[パーティションキー]入力
 →本記事では、idとします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677104/adb7a0df-430f-9863-fd13-d01e9b6e876d.png)
DynamoDBテーブル作成完了。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677104/10272438-80c9-dcee-7552-2796e9a00680.png)

## その2 IAMロール作成
・[ロールを作成]
![image.png](http

元記事を表示

GASでAWSリソースにアクセスするために

## はじめに

とある事情からスプレッドシートをフロントエンドとしてLambdaで処理を行い生成物をGoogle Drive上に保存するシステムを実装する際にすごく悩んだので備忘録として残しておきます。

今回のシステム構成は以下のような構成でした。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/65929/0b0e245a-e93b-b011-50b4-618680718893.png)

シリアルに処理を実行すると、スプレッドシートの1行を単位で処理するため60分程かかります。
GASの制約としては6分、Lambdaは15分のため何かしら工夫が必要でした。

他のチームメンバだとAPI GatewayでREST API経由で実行したり、S3にファイルを保存したイベントでLambdaを実行していましたが、実行頻度も少ないことと、イベント発火させるためだけにS3にファイルを置くのが無駄だよねということでEventBridge のPutEvents を契機に処理する方針としました。

元記事を表示

Lambda 関数を SQS から起動して結果を Broadway で受け取る

## はじめに

本記事では Elixir と SQS と Lambda を連携させます

Elixir でキューからメッセージを受信するためのモジュール **Broadway** と、 AWS のキューサービス **Amazon SQS** の基本的な動作・連携について、先に以下の記事を読んでください

https://qiita.com/RyoWakabayashi/private/68a06a7bd0e0d8d951b0

本記事では更に Lambda を連携させ、以下のようなことをしたいとします

“`mermaid
sequenceDiagram
participant Elixir
participant queue_req as SQS(依頼キュー)
participant queue_res as SQS(結果キュー)
participant Lambda

Elixir ->> queue_req: メッセージ送信
queue_req ->> Lambda: メッセージ受信、起動
Lambda ->> Lamb

元記事を表示

ローコストで24時間MineCraftサーバーを実現する

# きっかけ
友人とマイクラで遊ぶぞってことで、私がサーバーを用意することになった。
いつも白羽の矢が立つが正直めんどくさい。しかも各々ログイン時間が異なるため24時間サーバーを運用する要件付き。
~~たまには欲しい物リストの1つや2つ、プレゼントしてくれ~~

メインPCでサーバーを構築するとリソースを食いすぎて支障なので、使っていないベアボーンPCをサーバーにすることにしたが、故障していて自宅サーバーは断念。
結局お金を出し合ってVPS借りる話になり、ちょうど私がAWS-SAAの勉強中だったのでAWSで構築することにした。

# 今回の要件
1. 24時間ゲームに参加できる
1. 参加人数は増える可能性あるためスケーラブルに
1. できる限りローコスト

## アーキテクチャ
コスト最適化のために必要なときにインスタンスを起動し、ゲームのアクティブが0のときEC2インスタンスを停止する。

起動、停止の度に私がコンソールで操作するのは面倒なので、LambdaのURL関数で参加者自身にインスタンスの起動させる。

Elastic IPアドレスを割り当てるとインスタンス停止中に課金

元記事を表示

OTHERカテゴリの最新記事