- 1. ChatGPT風に会話が成り立つLINEボット on AWS Lambda
- 2. ChatGPTで「Lambdaにて15分以上の処理を行いたい」場合の解決策を聞いてみた【メモ】
- 3. エンジニアインターン15日目
- 4. 【個人開発】LINEでURLを送るとNotionに保存してくれるLINEBot「記事のストックくん」を作りました。
- 5. AWS LambdaのコードエディタでDeploy時の困りごと
- 6. AWS CDK Lambda + DynamoDB (Part2)
- 7. VueのaxiosでAWS Lambdaで作成したAPIを実行する方法
- 8. multipart/form-dataで、日本語ファイル名が文字化けする(API Gateway, Lambda構成)
- 9. 【Lambda Typescript】技術のトレンドを追うために簡単なアプリケーションをつくりました
- 10. LINE Messaging APIとOpenAI APIを連携させる
- 11. 【React】Webアプリケーションの関連付け
- 12. AWS Lambdaを使ってメール整形してみた
- 13. AWS Step Functions と lambda を使用しアプリケーションエラーに対処する(AWSハンズオン)
- 14. 1.StepFunctionで呼び出すLambdaの作成
- 15. [AWS SAM]LambdaでScrapyクローラーを定期実行させる
- 16. Configルールに準拠していないと、自動で修正する関数を2つ作成してみた
- 17. AWS SAMのLambdaでS3へのPut権限をつける
- 18. エンジニアインターン14日目
- 19. AWS Lambda Layer の作り方 – Python編
- 20. AWS S3のobject createを感知してlambda関数を実行する(EventBridge使用)
- 21. AWS S3のobject createを感知してlambda関数を実行する(EventBridge不使用)
ChatGPT風に会話が成り立つLINEボット on AWS Lambda
# はじめに
ChatGPTのもとになっているOpenAIを使ったチャットボットを作ってる人はたくさんいるものの、ステートフルに会話を成り立たせてる例がなかったので作ってみました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/85204/3292c6fa-d1c5-c6dc-d7e4-25bd4cae38b3.png)
会話をデータベースに保存しないと実現できないので、割と面倒ですが、LambdaとDynamoDBを使えばそこそこシンプルに実現可能です。
“`mermaid
sequenceDiagram
User ->> LINE: Message
LINE ->> Lambda: UserID, Message
Lambda ->> DynamoDB: UserID
DynamoDB ->> Lambda: 会話
Lambda ->> OpenAI: 会話 + Message
OpenAI ->> Lambda: Response
ChatGPTで「Lambdaにて15分以上の処理を行いたい」場合の解決策を聞いてみた【メモ】
## 質問
AWS Lambdaで15分以上時間のかかる処理を解決するには?## 回答
AWS Lambdaは、最大実行時間が15分まで制限されています。15分以上かかる処理を実行する場合は、以下のような方法が考えられます。AWS Step Functionsを使用する:AWS Step Functionsを使用して、Lambda関数を複数のステップに分割し、ステップごとに異なるLambda関数を実行することができます。
AWS Fargateを使用する:AWS Fargateを使用して、コンテナベースのアプリケーションを実行できます。AWS Lambdaと同様に、Fargateもイベント駆動型であり、必要に応じてスケールアップ/ダウンすることができます。
別のサービスに処理をオフロードする:処理をAWS Lambdaから別のサービスにオフロードすることで、処理時間を短縮できる場合があります。たとえば、長時間のバッチ処理を実行する場合は、AWS Batchを使用することができます。
処理を分割する:処理を小さなタスクに分割して、それぞれを別々のLambda関数で処理するこ
エンジニアインターン15日目
今日は今月に入って任されていたスクレイピングの機能を何とか完成することができた。ほぼ先輩エンジニアのおかげだけどね…(笑)今回の機能を実装することにあたって、エラーを解決するコツをなんとなくだがつかめた気がする。logのエラー文を読みながら原因を探り、googleでエラーを検索し、解決していく。しかし、この順番は独学でプログラミングをしていたころからわかっていたことだった。でも、できていなかった。今回の機能を作っていく中でこのことをすごく実感し、そして、成長できたと思う。
作っていく中で、if文を書くところで、当てはまらなかった場合にreturnを返すことができていなかったため、空のsql文を実行してしまい負担がかかるコードを書いてしまっていた。その場で処理を終わらせたい場合にはreturnを返し次の操作を実行しないようにすることが大事!あと、lambdaの関数urlを利用するときにパラメータで渡した値がdeployしないと重複して結果が返って来てしまう現象が発生した。そこで、渡すurlの初期値を空の状態 url = “” にしたら解決できた。
やはり毎日エラーと戦う日々だ。だが、エン
【個人開発】LINEでURLを送るとNotionに保存してくれるLINEBot「記事のストックくん」を作りました。
**「この記事、後で読み返したい!」**
そんなとき、みなさんどうしてますか?僕ははてぶやTwitter、Podcastをよく使うのですが
「今じっくり読める状態じゃないから、とりあえず保存しておきたい!」みたいなことが結構あります。いや、ありました。このLINEBotを作るまでは…
今回は **「LINEBot 〇〇くん」第二弾「記事のストックくん」** のご紹介です。
>↓第一弾はこちら
【個人開発】ごみのお知らせをしてくれるLINEBot「ごみのお知らせくん」を作りました。
[https://qiita.com/wallkickers/items/7bf00de66f802503f957](https://qiita.com/wallkickers/items/7
AWS LambdaのコードエディタでDeploy時の困りごと
# Deployボタンを押して保存したはずなのに
AWS Lambdaでは、いくつかの言語でWeb上のコードエディタで直接コードが編集できます。
ある程度のコードを書いた後、保存するときに押すのが **Deploy** ボタンです。
以前から **Deployボタンを押す直前に入力したいくつかの文字が保存されない** 場合がある問題(バグっぽいもの)があり、悩まされています。
## 再現方法とログ
いつも再現できるか分かりませんが、手元では以下のように実施して一発で再現できました。
Pythonで、一から作成として、普通にサンプルのプログラムを作成します。
そこに、以下の1行を追記します。
“`python
print(‘abcdefghijklmnopqrstuvwxyz’)
“`まず1回目の **Deploy** ボタンを押します。
z の後に、今度は大文字で “`ABCDEFGHIJKLMNOPQRSTUVWXYZ“` を追記して、2回目の **Deploy** ボタンを押して更新します。
コードとしては以下が入力された状態です。
“`pyth
AWS CDK Lambda + DynamoDB (Part2)
本記事は[Part1](https://qiita.com/kennyQiita/items/907b563048428e8264a1)の続きになります。
## 環境情報
* 作業環境はAWS Cloud9を利用
* cdk versionは2.63.2## はじめに 作成イメージ
Part1で作成したLambda(Hello Lambda)の前段にHitCounter Lambdaを作成します。Hit Counter LambdaはAPI Gatewayからリクエストを受け取り、Hello Lambdaをinvokeします。Hello Lambdaからレスポンスを受け取り、DynamoDBにアクセスしてHit回数をカウントアップします。
![hit-counter.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/484097/ac9e5c1a-1f5b-ec50-2648-92daf0506807.png)
では早速手を動かしていきましょう。## HitCounterの作成
### HitCo
VueのaxiosでAWS Lambdaで作成したAPIを実行する方法
## はじめに
VueのaxiosでAWS Lambdaで作成したAPIを実行してみました。
大まかな流れは以下のとおりです。1. Lambda関数の作成
1. API Gatewayの設定
1. Pythonから叩く
1. CORSの設定
1. VueからAPIを叩くでは、やっていきましょう。
## 開発環境
– Windows 11
– Vue 2.7.14
– Node.js 14.17.5
– Python 3.11.0## 実装
### 1.Lambda関数の作成
AWS Management Consoleにサインインして、Lambdaサービスを開きます。「関数の作成」ボタンをクリックし、必要な情報を入力していきます。
今回は、t-tsuchiyama-helloworldという関数を作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3124507/db4087e4-eb34-f8b4-7ea6-0796b732d826.png)t-tsuc
multipart/form-dataで、日本語ファイル名が文字化けする(API Gateway, Lambda構成)
### はじめに
API Gateway, AWS Lambda構成で、multipart/form-dataを使ってファイル送信をした際に、日本語ファイルが文字化けする事象に遭遇しました。その対応方法についてまとめます。
—
### 対象となる読者
multipart/form-dataを使って日本語ファイルを送信したが、ファイルが文字化けして困っている方
—
### Lambda実行環境
– Node.js 18.x
– multipart/form-dataで送信したデータのバックエンド処置には [nachomazzara/parse-multipart-data](https://github.com/nachomazzara/parse-multipart-data)を使用—
### 結論
最初に結論だけ述べると、フロント側でファイル名をエンコードして、データ送信することで文字化けを回避することが出来ました。
バックエンドでの処理を模索しましたが、解決出来なかったため、もし解決方法ご存知の方がいらっしゃれば、コメントいただけると嬉しいです。
【Lambda Typescript】技術のトレンドを追うために簡単なアプリケーションをつくりました
## これはなに?
Qiitaのトレンドを取得するLambda関数を作成したのでそのメモを兼ねた記事です。
TypescriptでLambdaを書いています。## 開発環境
### バックバックエンド
TypeScript@4.9.5
– @types/node
– axios
– nodemailer### クラウド
AWS
– Lambda
– Eventbrige## 何がしたかったのか?
– 朝通勤する時間など隙間時間で技術記事に触れる習慣を作りたいと思った。
– TypeScriptをバックエンドで使って練習したい。
– Lambdaを使った開発をやってみたかった。## 作成した機能の概要
### TypeScript側
[Qiitaトレンドを取得できるAPI](https://qiita.com/HelloRusk/items/803f9599cde72810f1a8)(リンク先の記事で紹介されているもの)からJSONを取得し、記事のタイトルとURLを取得する。メールで送信するために成形する。nodemailerを利用してgmailで送信する。###
LINE Messaging APIとOpenAI APIを連携させる
# やったこと
最近はやってるOpenAI・ChatGPTにLINE経由で質問して回答を受け取れるようにしました!
接続イメージは以下の通り。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/820066/1a882039-2c7c-3d7f-61d1-ae5ba32f5dad.png)# LINE Messaging APIとOpenAIの準備
### LINE Messaging API
[公式のガイド](https://developers.line.biz/ja/docs/messaging-api/getting-started/)に沿って、[LINE Developer Consle](https://developers.line.biz/console/)上でMessaging APIを作成します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/820066/cb2c4
【React】Webアプリケーションの関連付け
React axiosとAWS Lambdaを用いて、webページからwebアプリを実行する方法を紹介する。
## フロントエンド(React)の作成
1. axiosをインストールする
“`
npm install axios –save
“`
1. axiosをimportして、webアプリのURLへPOSTする
“`react
import React from ‘react’
import axios from ‘axios’const Breadcrumbs = () => {
const [responseData, setResponseData] = React.useState(null)
const handleSubmission = async (event) => {
try {
await axios
.post(
‘https://***********************
AWS Lambdaを使ってメール整形してみた
## ◆はじめに
今回、とあるプロジェクトでCloudWatch Alarmから(正確にはAWS SNSですが) 出るアラームの
メール整形をLambdaを使用してやってみました。使った言語はPythonです。
## ◆構成
簡単にですが構成の説明です。
単純な構成ですが、何しかしらの理由で発報したCloudWatch Alarmが、
SNSを使用してLambdaに飛ばしLambdaを使用してアラームの中身を整形。
LambdaがSNSを使用して任意のメールアドレスにアラームを
送信という流れです。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689346/f1af5301-8919-5977-78e2-0a24a1a050b2.png)
## ◆注意
今回は、Lambdaのコードの説明のみ行いますので、実際のLambdaの設定やCloudWatch及び
SNSの設定方法は省略しますのでご了承して頂ければと思います (すみません…)
## ◆Py
AWS Step Functions と lambda を使用しアプリケーションエラーに対処する(AWSハンズオン)
AWS Lambdaに記述するエラー処理コードの量を減らすために、AWS Step Functions を使用して関数のエラー処理をサポートするサーバーレスワークフローを作成していきます。
Lambdaの言語はPythonです。
ちなみに今回はAWSの公式にあるハンズオンを実施したものになります。# 目次
- StepFunctionで呼び出すLambdaの作成
- Stepfunctionの作成
- 実行結果
1.StepFunctionで呼び出すLambdaの作成
まずはLambdaの作成をクリックしてLambdaを作成していきます。
今回は自前のコードを入力するので「一から作成」をクリックして関数名とランタイムを選択していきます。
[AWS SAM]LambdaでScrapyクローラーを定期実行させる
[AWS SAM(AWS サーバーレスアプリケーションモデル)](https://aws.amazon.com/jp/serverless/sam/)を使ってサーバーレスなクローラーを作り、定期実行させて結果をS3に保存することができたので、やり方をまとめておきます。
なお、Lambdaは最大でも15分の処理しか実行できないため、小さめなクローラーを想定しています。以下の3ステップで実装します。
1. [SAMのHello Worldチュートリアル](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html)をやる
1. `template.yaml`, `requirements.txt`などを修正する
1. `app.py`にクローラーを実装する## SAMのHello Worldチュートリアルをやる
ここは公式チュートリアルで詳細に説明されているので省略します。
これをや
Configルールに準拠していないと、自動で修正する関数を2つ作成してみた
## はじめに
Lambdaの勉強もかねて、表題のような自動化を試してみました。
作成した処理は以下となります。①特定のタグがアタッチされていないと、自動でそのタグをアタッチする処理
➁特定のIAMロールがアタッチされていないと、自動でそのIAMロールをアタッチする処理## 手順
本処理のフローとしては
①Configでルール検知
➁SSM AutomationでLambdaに処理を渡す
③Lambdaで処理を実施となります。
順番に設定していきます。
※ConfigとSSM Automationについては概要レベルの説明になります。## configの設定
まずConfigの設定をしていきます。
今回はセットアップが終わっている前提で話を進めます。##### ルールの設定
Configには、AWSマネージドルールが存在し、今回はそちらを使用することになります。
※下はタグ付けのルールを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2666121/7c5a1a3
AWS SAMのLambdaでS3へのPut権限をつける
AWS SAMでLambdaの構築が便利になったものの、`Hello World Example`で作成されるテンプレにはS3の権限がついていません。
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html
なので、S3にオブジェクトを読み書きさせたいときには、下のように`template.yaml`を編集して権限をつける必要があります。
“`diff_yaml
Globals:
Function:
Timeout: 3
MemorySize: 1000+Parameters:
+ S3BucketName:
+ Type: String
+ Default: “アクセスしたいバケット名”Resources:
HelloWorldFunction:
Type: AWS::Serverless::Function
Pro
エンジニアインターン14日目
今日はlambdaのfunction urlを使ってDBから条件に当てはまる情報を取得する仕組みを構築した。lambda_handleの関数を構築する際に、sql文のミスが目立ってしまった。サニタイズの仕方も間違っていて、時間をかけてしまった。sql = “select * from list where id = (%)”% id と入力したら直った。しかも先輩エンジニアがエラーの場所のヒントをくれたおかげだった。時間をかけすぎて自分が情けなかった…まだまだ成長できる!がんばろ!
AWS Lambda Layer の作り方 – Python編
## Install python libraries
“`shell
mkdir python
pip install -t python yahoo_fin stockstats
zip -r9 layer.zip python
“`## Create Lambda layer and upload zip file
“`
aws lambda publish-layer-version \
–layer-name python-layer \
–license-info “MIT” \
–zip-file fileb://layer.zip \
–compatible-runtimes python3.7 python3.8
“`
AWS S3のobject createを感知してlambda関数を実行する(EventBridge使用)
# 概要
– S3の特定のバケットにオブジェクトがアップロード(create)されたことを感知して、そのオブジェクトの内容をconsole.logに出力するlambda関数を実行する方法をEventBridgeを使い実装してみる。
# 注意
– 本作業を実施することでAWSにて料金が発生する可能性があります。
– 料金アラートなどを予め設定し高額請求にはくれぐれもご注意ください。
– 筆者は一切の責任を負いかねます。# 前提
– 下記記事の内容は実施済みのものとして話をすすめる。
https://qiita.com/miriwo/items/4ab4dd1ca49bfa7c9387
– 条件は上記の記事と全く同じで任意のバケット(筆者の場合miriwo-testバケット)にinフォルダを作成し、そこにファイルアップロードイベントが発生した場合lamba関数でキャッチし、ログに出力する。
# 準備
– IAMロール、S3、lambdaはすでに前提の記事で設定済みのものを使用する。
| 項目 | 内容 | 備考 |
| — | — | —
AWS S3のobject createを感知してlambda関数を実行する(EventBridge不使用)
# 概要
– S3の特定のバケットにオブジェクトがアップロード(create)されたことを感知して、そのオブジェクトの内容をconsole.logに出力するlambda関数を実行する方法をEventBridgeを使わず実装してみる。
# 注意
– 本作業を実施することでAWSにて料金が発生する可能性があります。
– 料金アラートなどを予め設定し高額請求にはくれぐれもご注意ください。
– 筆者は一切の責任を負いかねます。# 準備
## IAMロール
1. 下記の情報でIAMロールを作成する。
| 項目 | 内容 | 備考 |
| — | — | — |
| 信頼されたエンティティタイプ | AWSのサービス | |
| ユースケース | Lambda | |
| 許可ポリシー | AWSLambdaBasicExecutionRole
AWSXRayDaemonWriteAccess
AmazonS3FullAccess | |
| ロール名 | get-s3-object-lambda-ro