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

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

未成年なので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アドレスを割り当てるとインスタンス停止中に課金

元記事を表示

CDKでLambdaレイヤーに Klayers をarnで指定する

## 経緯

### 起こった問題
CDKでLambdaを構築していて、その際に必要なパッケージはrequirements.txtなどにまとめてローカルでzip化してレイヤーとして渡していた。
しかしpandasなどの一部のライブラリはOSによる環境依存の影響を受ける。
例えば私はMacOSを利用しているが、Macでpandasをインストールしても実際にそれを使いたいLambdaはAmazon LinuxをOSとしているため、互換性がなく動作しない。pandasみたいなこういうライブラリがたまにあるので対応が必要。

### 解決方法

解決方法としてはいくつかあり、
– Dockerを使ってLambda環境を立ち上げ、その中でライブラリをインストールしてレイヤーとして渡す
– すでに公開されているレイヤーを利用する

などが思いつく。
信頼できるレイヤーがすでに存在しているのであればこれを使うのが一番楽なので、今回は後者の方法でレイヤーを定義する。マネコンで設定する方法は記事がすでにいくつ公開されていたので、CDKで実装する方法を紹介する。

## 動作環境
– CDK 2.93.0

元記事を表示

“AWS Lambda でOpenAIのWhisper APIを試してみた”を読んで改善できないか試してみた

# はじめに

いままでOpenAI APIを試すときはローカル環境で実行していたので、以下の記事をもとにAWS LambdaでWhisper APIを試してみました。
クラスメソッドさんの記事は、いつもとても参考になります。

[AWS Lambda でOpenAI の Whisper API を 認識精度の改善も含めて試してみた](https://dev.classmethod.jp/articles/aws-lambda-openai-whisper-api/)

記事では、Whisper APIを使って音声ファイルから文字起こしを行った結果、気になった点として次のことが挙げられています。
– 句読点がない
– 余計なな空白が入る
– 固有名詞に誤記がある

GPT-4を使って文書を整形することで可読性が向上したものの、Lambdaの実行時間が長くなったとも書かれています。そこで、GPT-3.5でも可読性の高い出力が得られないか試してみました。
結果、Whisperのプロンプトを工夫することで、文字起こしの段階で可読性の高い文章を得ることができました。

# 参考情報

http

元記事を表示

【AWS】Lambda SAMを使用したローカル開発で標準出力結果をファイルに保存する

## 概要
Lambda関数の開発において、“SAM(Serverless Application Model)“を利用することで、ローカルでの開発がスムーズに行えます。

しかし、Lambda関数をローカルで呼び出す際、通常の方法では結果がファイルに保存されず、“ターミナル上(Macの場合)に表示“されてしまいます。

そこでLambda関数の“出力結果やログをファイルに保存する方法“があったので備忘録として残したいと思います。

## SAM(Serverless Application Model)とは?
SAM(Serverless Application Model)は、Lambda関数の開発において非常に便利な“オープンソースフレームワーク“です。

SAMを使用することで、ローカルでの開発プロセスが劇的に簡略化されます。これにより、Lambda関数の開発を迅速かつ効果的に行えるようになります。

公式がかなり分かりやすいです。

https://aws.amazon.com/jp/serverless/sam/

## 出力結果やログはファイルに保存したい

元記事を表示

AWS CDK – Python Lambda Layer デプロイ

# 記事内容

– `@aws-cdk/aws-lambda-python-alpha`ライブラリを使ったLambda Layer作成
– `aws-cdk-lib/aws-lambda`ライブラリを使ったLambda Layer作成
– Lambdaに外部パッケージのインストール

# Layer内容

Layerに含める適当な外部パッケージ、関数実装を定義

## requirements.txt

“`txt:requirements.txt
numpy==1.26.0
“`

## common_layer.py

“`python:common_layer.py
def print_message(msg):
print(f”Message: {msg}”)
“`

# Layerを使用するLambda

上記Layerを使用する適当なLambda実装

“`python
import common_layer
import numpy

def handler(event, context):
print(f”numpy: {numpy.rando

元記事を表示

【AWS】Lambda関数の処理時間増加を抑える方法【システム改善】

## 初めに
Lambdaを実行できる時間は15分までに制限されている。大量データの処理にはLambdaではなくtimeoutの設定がより長い時間設定できるGlueを選択することも多いが、オンライン処理のように処理速度が求められるシステムの場合やAWSのコストを抑えたい場合などの理由からLambdaを選択されるケースもある。
システムの非機能要件には将来予想される処理対象のデータ量を要求された時間内に処理できることが求められることが多いが、予想される時間が15分以上だからという理由でLambdaを諦めるのはもったいない。
今回の記事ではStepFunctionsを組み合わせた方法でLambda単独で15分以上かかる処理を15分以内で完了させる方法について記載した。

## 使うAWSサービス
・AWS Lambda
・AWS Step Functions

## 実現方法
### 実現方法①順次処理を並行で処理を行う(Parallel tate)
![Prallel.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c

元記事を表示

“Amazon Bedrock Slack Appを作成してみた”の記事を読んでSlack Appを作成してみた

# はじめに

Amazon Bedrocを試してみようと思い、以下の”作成してみた”をもとにSlack Appを作成してみました。

[AWS Chalice を使って、Amazon Bedrock Slack Appを作成してみた](https://dev.classmethod.jp/articles/aws-chalice-bedrock-slack-app/)

そして、Slack Appの作成やAWS Chaliceの利用が初めてだったこともあり、こちらの記事がとても参考になりました。

[AWS Chalice を使って、Slack App (Slack Bolt for Python) を作成してみた](https://dev.classmethod.jp/articles/aws-chalice-slack-app-bolt-for-python/)

Slack Appが動作するようになるまでにこの2つの記事を行ったり来たりしたので、以下に内容を整理してみました。また、記事で紹介されているコードを実行するだけでは工夫がないので、IAMポリシーの制約や非同期処理を追加

元記事を表示

AWS Lambdaでlib64/libc.so.6: version `GLIBC_2.28′ not foundの対応

# 状況

[`terraform-aws-modules/terraform-aws-lambda`](https://registry.terraform.io/modules/terraform-aws-modules/lambda/aws/latest) で APIのAuthorizerをデプロイしようとして、`pyjwt[crypto]` でID Tokenを検証しようとしたら、そもそもpyjwtのインポートでエラーが発生。

“`
[ERROR] Runtime.ImportModuleError: Unable to import module ‘authorizer’: /lib64/libc.so.6: version `GLIBC_2.28′ not found (required by /var/task/cryptography/hazmat/bindings/_rust.abi3.so)
“`

# コード構成

“`
├── code
│ ├── authorizer.py
│ ├── poetry.lock
│ └── pyproje

元記事を表示

OTHERカテゴリの最新記事