- 1. CloudFormationのテンプレートファイルでLambdaコードベタ書きから脱却したい
- 2. aws lambdaでpsycopg2を使おうとしたらlibpq.so.5: cannot open shared object file: No such file or directoryとなった話
- 3. TerraformでSNSからLambdaにPub/SubするLocalStack環境を作ってみよう
- 4. 未成年なのでGooglePlayにアプリを出せないからAWSで自分のサイトからダウンロードできるようにする
- 5. 【AWS】用語を整理しながら学ぶAWS AWS Lambda
- 6. AWS LambdaからのEC2インスタンスの起動を再現してみた
- 7. Lambda 予約語について注意
- 8. SQSに複数Lambdaトリガーが設定して、メッセージが入ってきた場合これってどうなる?
- 9. API GatewayとLambdaとS3でHTTPメソッドに応じて応答を変えた静的なWebサイトを作成し、EventBridgeとLambdaで定期的にリクエストを送信する
- 10. 【AWS】LambdaからRedshiftに接続する【SecretManager】
- 11. 【AWS Innovate】【2023/10/26】サーバレスセッションまとめ
- 12. 【AWS】CloudWatchLogsログ処理手法について
- 13. フロントエンドエンジニアがAWSを触る。
- 14. GASでAWSリソースにアクセスするために
- 15. Lambda 関数を SQS から起動して結果を Broadway で受け取る
- 16. ローコストで24時間MineCraftサーバーを実現する
- 17. CDKでLambdaレイヤーに Klayers をarnで指定する
- 18. “AWS Lambda でOpenAIのWhisper APIを試してみた”を読んで改善できないか試してみた
- 19. 【AWS】Lambda SAMを使用したローカル開発で標準出力結果をファイルに保存する
- 20. AWS CDK – Python Lambda Layer デプロイ
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 LambdaElixir ->> 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 numpydef handler(event, context):
print(f”numpy: {numpy.rando