- 1. 日本語を含むhtml
- 1.0.1. AWS SAM + Go + DynamoDB local + GitHub Actions で環境構築する
- 1.0.2. AWS LambdaとSnapStart
- 1.0.3. 100本ノックしてみたい中堅エンジニア 【AWS】~Lambdaについて利用シーンをいくつか紹介~ 4/100
- 1.0.4. ForwardRef._evaluate() missing 1 required keyword-only argument: ‘recursive_guard’
- 1.0.5. 【AWS】AWS SAMが想像以上にバケモノかもしれないことに気づいてしまったかもしれない
- 1.0.6. PythonのLambda Layerを作成する方法
- 1.0.7. 【これ検索するの何回目だよ】API Gateway + Lambdaプロキシ統合でもう躓きたくない
- 1.0.8. Serverless frameworkで`prisma migrate`を実行する
- 1.0.9. 【AWS】EventBridge -> Lambda -> RDSのストプロ -> Slack通知の流れを構築する
- 1.0.10. Lambda関数のスケーラビリティについてまとめてみた
- 1.0.11. Python+AWS LambdaでWEBスクレイピングAPIを作成してみた
- 1.0.12. AWS Lambdaを使ってHULFT Squareを実行してみた
- 1.0.13. SES+SNS+Lambdaを使ってバウンスメール通知機能を実装しよう!
- 1.0.14. LocalStackにAWS SAMでデプロイしたLambdaにAndroidからアクセスしてみた
- 1.0.15. ChatGPTに質問しながらLambda関数を作成する
- 1.0.16. Amazon Bedrockの新機能「Prompt Flows」Lambdaノードを使ってみた
- 1.0.17. 100本ノックしてみたい中堅エンジニア 【AWS】~Lambdaについて簡単に機能紹介~ 3/100
Lambdaの”Task timed out after x.xx seconds”ログが出力されない問題(python)
# 結論
pythonのランタイムバージョンが3.12だと出力されない(3.11までは出力される)
python以外については未検証
# 詳細
以下の記事をもとにLambdaのタイムアウトエラーに対して通知できるような機能を実装しようとしたのですが、
「Task timed out after x.xx seconds」が出力されませんでした。
> [Lambda 関数がタイムアウトしているかどうかを確認するにはどうすればよいですか?](https://repost.aws/ja/knowledge-center/lambda-verify-invocation-timeouts)ネット上に情報が特になく、以下検証を実施しました。
## 前提
・アーキテクチャ:x86_64
・タイムアウト:3秒
・コードの中身:
“` python
import jsondef lambda_handler(event, context):
# TODO implement
while True:
pass
return {
‘st
StepFunctionsのHTTP Endpoint Call third-party APIを諦めた話
## はじめに
Step Functions + LambdaでAPIからデータ収集していたものを、HTTP Endpoint Call third-party APIを使ってStep Functionsのみで実装しようとしたけど諦めた話。## 結論
HTTP Endpoint Call third-party APIを利用する際には、タイムアウトが最大5秒までしか対応しておらず、今回利用するAPIはレスポンスに5秒以上かかることがよくあるためLambdaでAPIを実行することにした。## どういうことか
HTTP Endpoint Call third-party APIを使う際には、EventBridge Connectionを介してAPI接続することとなる。EventBridge Connectionのコンソールにわかりやすい下記の図がある。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/177290/5cce066e-f8f6-d977-3d08-026f55c7df
AWSのLambdaとAPI Gatewayでプロキシ統合てhtmlを表示しようとしたら文字化けした
AWSでLambdaとAPI GatewayのRest APIを用いてサーバーレスでWebサイトを作ろうとしたところ、日本語のhtmlを表示しようとしたときに文字化けしてしまった。
このとき、API Gatewayの設定でLambdaのプロキシ統合は有効にしていて、Lambdaのソースコードはざっくりとは下記の通り。
“`python
def lambda_handler(event, context):
html = “””\日本語を含むhtml
あいうえおかきくけこ
“””
return {
“statusCode”: 200,
“headers”: {
“Content-Type”: “text/html”
},
“body”: html
}
“`
調べてみると、プロキシ統合を有効にしない場合ではAPI Gatewayの設定で「Content-Typeをapplication/json;charset=UTF-8にする」ことにより日
AWS SAM + Go + DynamoDB local + GitHub Actions で環境構築する
# はじめに
先日、業務で`AWS SAM` `Go` `DynamoDB local` `GitHub Actions` を使って環境構築する機会がありました。
しかし、この組み合わせについて紹介した日本語の記事があまりない印象でしたので本記事で紹介したいと思います。
ぜひ本記事を参考にして、マイクロサービス開発の第一歩を踏み出してみてください!# SAMプロジェクト作成
1. **プロジェクトを作成するディレクトリに移動**
– プロジェクトを作成するディレクトリに移動します。
“` bash
$ cd develop # develop部分は自身のプロジェクトディレクトリを入力
“`
2. **`sam init` コマンドを実行**
– コマンドを実行しSAMプロジェクトを作成します。
– コマンドを実行すると対話形式のプロンプトが出力されます。以下、実際のプロンプトにコメントアウトで補足しております。
“` bash
$ sam initYou can prese
AWS LambdaとSnapStart
# はじめに
AWS Lambdaは、開発の面ではプログラミングが簡単で、運用の面では変化する使用パターンに迅速に対応できるアプリケーションです。Lambdaの特徴は、**関数が安全で、隔離された環境**で実行される点です。各環境のライフサイクルは、**Init**、**Invoke**、**Shutdown**という3つの段階で構成されます。## AWS Lambdaのライフサイクルごとの特徴
| Category | Desciption |
|————|——————————————————————————|
| Init | 関数のランタイムをブートストラップし、静的コードを実行 (INIT_REPORT) |
| Invoke | APIリクエストに応答してLamb
100本ノックしてみたい中堅エンジニア 【AWS】~Lambdaについて利用シーンをいくつか紹介~ 4/100
# はじめに
本記事ではLambdaをどんな利用シーンで使うか、ケース毎にいくつか紹介します。
※具体的に作ったり、詳細な機能の説明はしませんがご了承くださいLambdaの機能については、[こちら](https://qiita.com/namasa/items/3a0d703565643f364133)で紹介しています。
# サーバーレスAPIを作りたい
これが一番Lambdaのユースケースとして多いと思っています。
APIのバックエンドとして、EC2やECSも候補にあがると思いますがこれらは常時稼働することになります。なので、リクエスト数がそこまで多くない場合などは無駄にコストがかかってしまいます。
そこで、利用した時間だけ課金されるLambdaを利用することによって、コスト効率が高まります。
Well-Architected Frameworkの`コスト最適化`ですかね:thinking:DBの候補として3つ書いてありますが、RDBである必要性やリクエスト数などによって、いずれかを選択することになると思います
![学ぶべきこと-サーバーレスAPI.drawio
ForwardRef._evaluate() missing 1 required keyword-only argument: ‘recursive_guard’
# 目的
Lambd関数内で以下のlangchain関連のパッケージを使っていたのですが、ある日を境に表題のエラーが発生するようになりました。
“`python
from langchain_aws import ChatBedrock
from langchain_core.messages import HumanMessage
from langchain.prompts import PromptTemplate
“`エラー内容の全貌
“`terminal
[ERROR] TypeError: ForwardRef._evaluate() missing 1 required keyword-only argument: ‘recursive_guard’
Traceback (most recent call last):
File “/var/lang/lib/python3.12/importlib/__init__.py”, line 90, in import_module
return
【AWS】AWS SAMが想像以上にバケモノかもしれないことに気づいてしまったかもしれない
どうもこんにちは。
今回は、AWSのセミナー内でお話に出てきた、AWS SAMについて調べたのでまとめてみました。
ちなみに私、感動しております。
# AWS SAMってなに?
**AWS SAM (Serverless Application Model)** は、サーバーレスアプリケーションをローカルで開発、テスト、デプロイするための強力なオープンソースフレームワークです。AWS SAMを使用するには、AWS SAM CLIというものをインストールする必要があります。
ちなみに、AWS SAM自体は無料で使用できます。AWS SAMを使用して作成したAPI GatewayやLambda関数に対してのみ料金が発生します。
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/what-is-sam.html
# 通常、サーバーレスアプリケーションを作成するにはどうする?
通常では、以下のような構成でサーバーレスアプリケーションを構築すると思います。(最も
PythonのLambda Layerを作成する方法
# フォルダ直下構成
以下の構成が必要なようです
pythonディレクトリ内に必要なライブラリをインストールする必要があります
![lambda_layer.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1952885/460ae25f-ac39-183b-f78a-1cd5b212ba24.png)# 実際の作り方
1.任意のディレクトリ内にpythonディレクトリを作成する
2.pythonディレクトリに必要なライブラリをインストールする
“`
pip install boto3 -t python
“`
3.pythonディレクトリをzip化
“`
zip -r layer.zip ./python
“`
4.手順3でzip化したものをlayerとして登録する
[AWS Lambda Layersでライブラリを共通化](https://qiita.com/t_okkan/items/394a15577bd1aad46ec3#layer%E3%81%AE%E8%BF%BD
【これ検索するの何回目だよ】API Gateway + Lambdaプロキシ統合でもう躓きたくない
# はじめに
フロントエンドからAPI Gatewayを経由してLambdaを実行する時、毎回少しだけ躓きます、、、。
解決はするのですが、何度も同じことを経験しては忘れてを繰り返しているので教訓をまとめます!!!# 教訓
1. **統合レスポンスをクライアントに返却する際、lambda → API Gatewayのレスポンスは正しい形式である必要がある!**
1. **ライブラリによってPOSTの仕方が異なるので注意するべし!!**
1. **フロントのリクエストボディはparseして利用!!!**これだけです!あとは簡単!!
lambda統合機能最高!!!# 動作確認
## 1. **統合レスポンスをクライアントに返却する際、lambda → API Gatewayのレスポンスは正しい形式である必要がある!!**
API Gatewayのメソッドテスト機能で、以下のようなエラーが発生することがあります。
![cap05.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3654730/
Serverless frameworkで`prisma migrate`を実行する
## この記事を書こうと思った理由
serverless frameworkとPrismaで開発をすることになったのですが、
スキーマを反映させるためのコマンド`prisma migrate`を
lambdaで実行するのにとても苦労したので、自分のした処理をここにまとめます。
本当はもっと良い方法があると思うので、知ってましたら教えてください。# 実行手順
## 1.Prismaインストール
PrismaとPrisma CLIをインストールします。
“`bash
yarn add prisma @prisma/client
“`Prisma CLIをインストールしたら、Prismaの設定を初期化します。
“`bash
yarn prisma init
“`このコマンドにより、prismaディレクトリが作成され、schema.prismaファイルが配置されます。
## 2. データベース接続の設定
.envファイルを開き、使用するデータベースに合わせて接続URLを設定します。
例えば、MySQLを使用する場合は以下のようになります。“`
【AWS】EventBridge -> Lambda -> RDSのストプロ -> Slack通知の流れを構築する
# 概要
EventBridge -> Lambda -> RDSのストプロ -> Slack通知の流れを構築しました。具体的にいうと、
「毎日9時に、プロシージャで実施した結果を、指定のSlackチャンネルに通知する」
という流れがゴールです。構築手順と注意点を解説します。
# 手順概要
1. ストアドプロシージャを作成する
2. Lambda用のSecurityGroupを作成する
3. Lambda用のIAM Roleを作成する
4. Lambda関数を作成する
5. LambdaをVPCに設定する
6. RDSのSecurity Groupを編集する
7. EventBridgeSchedulerを設定する# 手順詳細
## 1. ストアドプロシージャを作成するまず、今回使うSQLを該当のRDSにプロシージャとして保存します。
今回は、sample_tableのcreate_dateカラムが前日のもので、かつ、sample_noカラムに指定の文字列から始まるレコードが何件あるか、というSQLになります。“`count_number.sql
CREATE
Lambda関数のスケーラビリティについてまとめてみた
# はじめに
SAA(AWS Certified Solutions Architect – Associate)取得に向けて勉強を進めていく中でLambdaのスケーラビリティについてよくわからなかったため、まとめてみました。
資格取得を目指すだけの方は「Lambdaにはスケーラビリティがある」という認識だけで十分だと考えています。ただ、知識があって損することはないと思うのでそのような方でもできれば最後まで読んでいただけると幸いです。※Lambdaに関して資格勉強で学習しているだけで実際に触ったことはありません。
## 目次
**1.Lambdaとは**
**2.スケーラビリティとは**
**3.Lambdaのスケーラビリティについて**
**3-1.同時実行数とは**
**3-2.同時実行数の上限(クォータ)について**
**3-3.同時実行数の算出方法について**
**3-4.同時実行数と1秒あたりのリクエスト数の違いについて**
**3-5.スケーリングレートについて**
**3-6.プロビジョニングされた同時実行について**
**4.まとめ**
**5.参考文献
Python+AWS LambdaでWEBスクレイピングAPIを作成してみた
# Lambdaを使ってAPIを作りたい
![Screenshot 2024-08-30 131834.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722467/7fe54343-ed11-6453-664a-2bf239577cde.png)前から気になっていたAWSのサービス、Lambdaを使ってAPIを作成することができました。
APIで取得した内容をstreamlitで実行して表示すると下記のようになります。
https://otaru.gr.jp/fall
*”fall”は季節によって変わります。
小樽の観光サイトのイベントのタイトル、画像、開催時期、終了時期をスクレイピングしてjson形式で返します。![Screenshot 2024-09-02 150516.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722467/1a95b829-ffcb-a1cc-efcb-b9744401f9d0.png
AWS Lambdaを使ってHULFT Squareを実行してみた
# はじめに
こんにちは。すぎもんです:grinning:
以前、「[コマンドを使って外部からHULFT Squareを実行する方法](https://qiita.com/sugimon/items/beeaaa615d448848ff72)」をご紹介しました。
HULFT Squareは他のクラウド製品と合わせて活用することでサーバーを持たずに稼働させることが出来ます。そこで今回はサーバーレスコンピューティングサービスであるAWS Lambdaを使用して、HULFT Square を実行することが出来るか試してみます。
これにより、AWSや他のサービスから任意のタイミングでHULFT Squareを実行させることが出来ます。# 今回やること
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/4effa46b-f975-710d-c4c5-80375e9a1e0a.png)
今回は、AWSのLambdaを使用してHULFT Squareを実行してみたいと思います。
SES+SNS+Lambdaを使ってバウンスメール通知機能を実装しよう!
## 概要
SESを使ってメールを送信した際に存在しないメールアドレスの場合に検知できる機能をSES+SNS+Lambdaを使って実装する方法について解説します## 前提
– Pythonを使ってLambdaのコードを作成します## 実装
今回は
– S3
– Lambda
– SNSの3種類のリソースをCloudFormationを使って構築します
### S3の構築
Lambda用のzipファイルを格納するS3バケットを作成します“`yaml
AWSTemplateFormatVersion: 2010-09-09
Description: “S3 Bucket Factory Settings Stack”# ————————————-
# Metadata
# ————————————-
Metadata:
AWS::CloudFormation::Interface:
# パラメータの並び順
ParameterGroups:
LocalStackにAWS SAMでデプロイしたLambdaにAndroidからアクセスしてみた
## はじめに
– AWS SAM CLI for LocalStack を使ってアプリをLocalStackにデプロイできる
– Dockerでhttpdを起動した端末とスマホが同じネットワークにいれば、スマホのブラウザからWebページを閲覧できる…ということから、「Dockerで動いているLocalStackにデプロイしたLambda関数へ、同じネットワークのAndroidアプリからアクセスできるのでは?」などと思いつきました。試してみたところ、一応できたのでここに残しておきます
AWSとスマホアプリを連携させるケースを、不具合の混入や費用などの心配なくローカルで好き勝手に試したい、という方の参考になれば幸いですちなみに当方はAndroid専門なので、iOSについては言及しておりません。申し訳ありませんが、ご了承ください
### 追記
私のGitHubに以下の3点を含むレポジトリを共有しております。よければご参考ください
– LocalStackコンテナを起動するための docker-compose.yaml
– 簡単なSAMプロジェクト
– Lambda関数を呼び
ChatGPTに質問しながらLambda関数を作成する
# はじめに
今回、Lambda@Edge で利用する Lambda 関数を用意する必要があったのでそのコードを ChatGPT に書いてもらうことにしました。https://openai.com/chatgpt/
# 構成イメージ
今回は CloudFront + S3 という一般的な構成をベースに導入します。
また、ベースの構成はすでに用意済みの状態で、そこに Lambda@Edge を追加する内容となります。
![スクリーンショット 2024-08-28 10.16.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/f434b3b4-bad4-ff54-7ac2-302db02f0383.png)# 要件
CloudFront の場合だとデフォルトルートは `index.html` の補完を設定することができますが、
その他のパスでは補完がされません。
> 通常
> ○ https://cloudfronturl/ → https://cloudfronturl/inde
Amazon Bedrockの新機能「Prompt Flows」Lambdaノードを使ってみた
# はじめに
今回はAmazon Bedrockの新機能「Prompt Flows」のLambdaノードを使って、ユーザーから入力を受け取り、それをLambda関数で処理し、結果を返すシンプルなアプリケーションを作成してみました。
作成してみて分かったことも共有します。「Prompt Flows」は、ノードを配置して生成AIのワークフローを開発・管理できるサービスです。
https://aws.amazon.com/jp/bedrock/prompt-flows/
# 導入
アプリケーションの全体像は以下の通りです。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806967/b2b1ae34-3da9-a237-c134-3d8933937439.png)
**①文字列の入力**
**②Lambda関数での処理**
**③処理結果の出力**
という流れになっています。**①文字列の入力**
Flow inputでは、文字列を入力してもらいます。
後ほど記述しますが、今
100本ノックしてみたい中堅エンジニア 【AWS】~Lambdaについて簡単に機能紹介~ 3/100
# はじめに
本記事では何かと利用することが多いLambdaについて、説明していきます。
# Lambdaとは?
– サーバーをプロビジョニングまたは管理することなくコードを実行できるイベント駆動型サービスです
– AWSでサーバーレスアプリーションを作りたいってなったら、必ずと言ってもいいほど出てきます:::note info
:x: サーバーレス = `サーバが存在しない`
:o: サーバーレス = `サーバの管理をAWSが行う`
:::では、Lambdaの各機能について紹介します
# 関数
Lambdaはまず関数を作るところから始まります。
関数は、Lambdaでコードを実行するために呼び出すことが出来る一機能になります。
作成し、任意のAWSサービスや処理から呼び出すことで処理を実行します、関数は以下の3つから作成します。
– `一から作成`:一からコードを書いてLambda関数を実装する場合に選択します。基本はこちらを選択することになると思います
– `設計図の使用`:AWSが用意したサンプルコードをベースに実装する場合に選択します。Lambdaを初めて