- 1. カスタムリソースを使用してS3内オブジェクトを削除
- 2. AWS Lambda 関数のランタイムを一気に更新する
- 3. Slack連携による生産性向上の施策(その3)〜AWS Lambda編〜
- 4. InstanceRestarter(インスタンスをリスタートするやーつー)
- 5. AWS Lambda用のTypeScriptコードをTerraformでデプロイする備忘録
- 6. Lambda実行時のログ出力方法(Python)
- 7. Agents for Amazon Bedrock の簡素化された作成方法を試す
- 8. custom-resource-apigw-cw-roleがnode16.xランタイムでデプロイされる件
- 9. APIを呼び出すLambdaで、リクエストヘッダーを全部送るとRuntime.MarshalErrorが起きる
- 10. AWS LambdaでPlaywrightを動かす
- 11. Excel の LAMBDA 関数でDECODEURL作成
- 12. Lambda layersの作成方法 (Cloud9で簡単作成)
- 13. 【Bedrock×Lambda】高精度なハイブリッド検索RAGをサーバレスで実装(Slack連携も可)
- 14. 【Lambda】手動実行する際、意図せず2重実行される事象について
- 15. AWS Lambda で CloudWatch アラームの自動有効化/無効化を行う方法
- 16. サーバレスアーキテクチャによる静的ウェブサイト構築
- 17. LINEBOT でClaude 3 に問い合わせできるようにしてみる (AmazonBedrock)
- 18. Slack連携による生産性向上の施策(その2)〜Slack App編〜
- 19. Lambdaで定時刻に呟くDiscord Botを作る
- 20. #AWS S3にアップロードされたZIPファイル自動解凍
カスタムリソースを使用してS3内オブジェクトを削除
下記の記事でCloudFormationのスタックを削除しても、S3にオブジェクトが存在すると削除できなかった。
カスタムリソースでLambdaを使用してオブジェクトを削除するようにする。https://qiita.com/kutinasi_hobby/items/496fe8ed149d72673b10
今回作成するLambdaはほかのCloudFormationでも使用することがあると思うので、別のyamlファイルとして作成する。
注意:上記記事で作成したyamlファイルでスタックを作成する前に下記ファイルでLambda(カスタムリソース)を作成しておく必要がある。### Lambda用yaml作成
こちらの記事を参考に作成https://qiita.com/hiyanger/items/5b00cb5ebc7128b178c0
※LambdaFunction の Runtime: python3.7 が現在 python3.12になっているので変更
“`yaml
LambdaFunction:
Type: AWS::Lambda::Functio
AWS Lambda 関数のランタイムを一気に更新する
こんにちは
沢山の AWS Lambda 関数のランタイムを更新する必要が出てきたので、今回はその内容についてお伝えします。:::note warn
**大前提**
基本的にマイナーバージョンアップであれば後方互換性があるので、問題は出にくいかもしれません。
しかし、問題が出て困るような環境(例:本番環境、利用者が多いなど)では、本仕組みを使わずに、動作確認してから個別に更新することをお勧めします。
:::## ことの発端
わたしが管理している AWS ルートユーザーのメールアドレスに、以下のようなメールが届きました。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/548623/9c0590f9-6f21-4e4d-e7be-3eb4f823ba74.png)
2024 年 10 月 14 日で Python3.8 のサポートが終了になるので、それまでに更新対応してくださいね!というものです。
このアカウントは、 Python3.8 時代にたくさんの AWS Lambda
Slack連携による生産性向上の施策(その3)〜AWS Lambda編〜
# はじめに
こちらの記事は三部構成になっております。
– [Slack連携による生産性向上の施策(その1)〜Workflow Builder編〜](https://qiita.com/oc-arimura/items/ff4c194c617a9d309d9c)
– [Slack連携による生産性向上の施策(その2)〜Slack App編〜](https://qiita.com/oc-arimura/items/fdb6b1faca5ea1150b3a)
– [Slack連携による生産性向上の施策(その3)〜AWS Lambda編〜](https://qiita.com/oc-arimura/items/e9fb983b411b68fd941a)また、全ての記事の内容を含んだ動画も用意しております。
動画で確認したい方は[コチラ](https://www.youtube.com/watch?v=JE7ZVJ9yE9Q)まで。
※動画開始50分頃からの内容になります。# AWS Lambda編の概要
ここの説明になります
![スクリーンショット 2024-04-16 16.29.3
InstanceRestarter(インスタンスをリスタートするやーつー)
# 概要
必要にかられて、こんなものを作ったのでメモがてら。
1. EventBridgeから定期的に
1. Lambdaを起動して
1. 指定された名前に合致するインスタンスに対して
1. reboot(またはterminate)のリクエストを出す# 作成手順
## IAM
1. ロールを作成
1. 信頼されたエンティティを選択
1. 信頼されたエンティティタイプ → AWSのサービス
1. ユースケース → Lambda
1. 許可を追加
1. 許可ポリシー
1. (何もしなくてOK)
1. 許可の境界を設定
1. 許可の境界なしでロールを作成(デフォルト)
1. 名前、確認、および作成
1. ロールの詳細
1. ロール名 → それなりの名前(`InstanceRestarter-role`等)
1. 説明 → お好きに
1. 作成したロールを選択
1. 許可タ
AWS Lambda用のTypeScriptコードをTerraformでデプロイする備忘録
# はじめに
TypeScriptをよく使うので、TypeScriptでLambdaを書きたいなというのと、Terraformを使ってみたいなということで書きました。VSCodeのDev Containersを用いてコンテナで開発する前提で書いています。
ECRは料金がかかるため、zipファイルでデプロイする方法をとっています。# Githubリポジトリ
下記にサンプルコードを置いています。https://github.com/tanakalucky/typescript-lambda-sample
# フォルダ構成
最終的なフォルダ構成は以下になります。
“`
.
├── Dockerfile
├── README.md
├── docker-compose.yml
├── package-lock.json
├── package.json
├── src
│ └── index.ts
├── terraform
│ ├── iam.tf
│ ├── lambda.tf
│ ├── main.tf
│ ├── terraform.tfvars
│
Lambda実行時のログ出力方法(Python)
# 概要
Lambda実行時のログ出力方法を簡単に記す。
ロググループの作成や紐づけ方法は記載しない。(気が乗れば追記するやも)# 実行環境
Python3.11“`python:lambda_function.py
import logging# logger初期化
logger = logging.getLogger()
logger.setLevel(logging.INFO)def lambda_handler(event, context):
“””
– 基本的なlog出力Args:
– event: Lambda event
– context: Lambda実行コンテキスト
Return:
なし
“””
logger.info(‘INFOログ’)
logger.warn(‘WARNINGログ’)
logger.error(‘ERRORログ’)
“`
Agents for Amazon Bedrock の簡素化された作成方法を試す
## はじめに
2024/4/23 に突如降り注いできた Amazon Bedrock のアプデ祭りすごいことになっていますね。この記事では Agent for Amazon Bedrock の簡素化された作成方法についてとりあげます。https://aws.amazon.com/jp/about-aws/whats-new/2024/04/amazon-bedrock-agents-agent-creation-return-control-capability/
https://aws.amazon.com/jp/blogs/aws/agents-for-amazon-bedrock-introducing-a-simplified-creation-and-configuration-experience/
これまでは OpenAPI スキーマを用意して、Agent が呼び出すことのできる API 操作を定義する必要がありました。今回のアップデートで OpenAPI スキーマの作成が不要で、より簡単かつ迅速に Agent を構成できるようになりました。
## OpenA
custom-resource-apigw-cw-roleがnode16.xランタイムでデプロイされる件
## いきさつ
ある日AWSからnode16のサポート終了のお知らせが届きました。> …
LambdaでのNode.js 16のサポートは2024年6月12日に終了します
…自分のLambdaを眺めていると、`xxx-custom-resource-apigw-cw-role`node16ランタイムがいました。
これはServerless frameworkでデプロイしたときに自動生成されるもので、API GatewayのCloudWatch Logsのロールを作成するために使用されるらしい。
slsのバージョンを上げればいけそうだな〜と思い現在のバージョンを確認すると`3.38.0`。これは記事執筆時点での最新バージョンです。えぇ…。調べてみると以下のやりとりが:
https://github.com/serverless/serverless/issues/12307ざっくり、こんな流れでした:
– サーバーレスフレームワークを介して作成されたcustom-resource-apigw-cw-role lambdaのランタイムを変更するにはどうすれば
APIを呼び出すLambdaで、リクエストヘッダーを全部送るとRuntime.MarshalErrorが起きる
# 起こったこと
自分で開発したAPIを叩いて、戻ってきたレスポンスをそのまま返すAWS Lambdaを作っていたのですが、固定のヘッダーをつけてリクエストするときは問題なく呼び出せるのに、API Gatewayに渡されたリクエストヘッダーをそのままつけてリクエストすると、原因どころか発生箇所すらもよく分からないエラーが起きるようになりました。
“`python:lambda_function.py
import json
import urllib.requestdef lambda_handler(event, context):
headers = event.get(‘headers’)
request_body = event.get(‘body’).encode(‘utf-8’)# リクエスト送信
req = urllib.request.Request(‘https://xxxx/api/v1/yyyy’, headers=headers, method=’POST’, data=request_body)
with
AWS LambdaでPlaywrightを動かす
今まで https://github.com/JupiterOne/playwright-aws-lambda を使わせてもらっていたのですが、コードを更新すると急に動かなくなってしまい https://github.com/Sparticuz/chromium に乗り換えたので導入メモです。
ほとんどREADMEに記載の通りです。
“`
npm init
npm install –save playwright-core
npm install –save-dev @sparticuz/chromium
“`– node_modulesフォルダをzip化
– 50MBを超えるのでS3にアップ
– Lambdaのレイヤーを作成
– 先ほどS3にアップしたzipのURLを指定
– x86_64とNode.js 18.xを指定
– Lambdaの関数を作成
– 先ほど作成したカスタムレイヤーを追加
– 設定→一般設定からメモリを2000MB程度、タイムアウトを2分程度に増やす
– コードソースのindex.mjsをindex.jsに変
Excel の LAMBDA 関数でDECODEURL作成
# はじめに
既に至るところで指摘されていますが、EXCELにはENCODEURL関数はありますが、なぜかDECODEURL関数はありません。
しかし、Teams や Sharepoint でファイル情報を共有する際、パーセントエンコーディングされた文字列をデコードしたいと思いこそすれ、エンコードしたいとは思いません。だって、ブラウザのアドレスバーに入力すれば勝手にエンコードしてくれますもん。当ページでは、ENCODEURL関数の対になるDECODEURL関数の作り方を紹介します。
使い方は簡単で、以下のLAMBDA関数をコピーし、Excelのメニューバー「数式」⇒「名前の管理」⇒名前の管理ダイアログで『新規作成』ボタンをクリックし、名前にDECODEURLと設定して「参照範囲」に数式を貼り付けて登録するだけでOKです。“`text:DECODEURL
=LAMBDA(txt,
LET(
Z, LAMBDA(f, LET(g, LAMBDA(x, f(LAMBDA(v, u, LET(xx, x(x), xx(v, u) )))), g(g))),
Lambda layersの作成方法 (Cloud9で簡単作成)
## 初めに
Lambdaを開発する上で、どうしても追加ライブラリが必要になることがあります
そういう時は、layers機能を使い、対応しますが、今回Cloud9で四苦八苦したので、
備忘録として、残します## 対応したい内容
– jwtライブラリが必要になった為、layers機能で対応する## Cloud9でLayerを作成する
#### Cloud9 起動
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747609/c456a765-5a59-2138-c53f-175215c32676.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747609/4ab5b832-b1b7-0fc6-746f-ade3b5bc648c.png)AmazonLinux2023で、起動していきます。
Cloud9の管理コンソールに入ります。
![image.png](https
【Bedrock×Lambda】高精度なハイブリッド検索RAGをサーバレスで実装(Slack連携も可)
# はじめに
近年、**大規模言語モデル(LLM)** の発展により、LLMを活用する機会が増加しています。
その中でも、LLMを組み込んだ仕組みの一つとして、**RAG(Retrieval-Augmented Generation)** が注目を集めています。本記事では、はじめに、**検索精度を向上させたRAGアーキテクチャ**を紹介します。
次に、それを**AWS上で実装する方法**について紹介します。本記事で紹介したアーキテクチャの実装に用いるソースコードはGitHubで公開しています。
https://github.com/Naoki0513/hybrid-rag-container
# 検索精度を向上させたRAGアーキテクチャ
## RAGの概要と検索手法
RAGの用途としては、社内文書など非公開ドキュメントを読み込ませ、そこから回答できる社内専用AIチャットボットなどが考えられます。
そのため、RAGの精度向上のためには、ナレッジベースから検索する際に必要なドキュメントを的確に取得できるかが重要な要素の一つとなります。
RAGにおける検索手法には、様々
【Lambda】手動実行する際、意図せず2重実行される事象について
## 発生事象
EC2インスタンスのイメージバックアップを取得するLambda関数をLambda コンソールの [テスト] 画面にて関数のテストを実行した際に、1 度のテスト実行操作に対して関数が 2 回呼び出されました。
⇒バックアップ処理自体は問題なく完了したが、CloudWatchアラームにてエラーとして検知されてしまいました。■Lambda実行時、CloudWatchに出力されたログ
![Lambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3691986/42606099-c306-b525-e53e-33f86025ab8e.png)
同時刻に2つのログストリームが生成され、片方のログは成功、もう片方は失敗という内容でした。Lambdaの仕様として、同期呼び出しとしてLambdaを実行すれば多重実行を防げるといったような情報も確認しましたが、同期実行(CloudShellからの実行)でも2重実行されてしまいました。
※参考
https://docs.aws.amazon.com
AWS Lambda で CloudWatch アラームの自動有効化/無効化を行う方法
この記事では、AWS Lambdaを使用してCloudWatchアラームを自動的に有効化または無効化する方法を詳しく説明します。
AWS EventBridgeとCloudFormationも活用し、完全に自動化されたソリューションを構築する方法について解説します。#### 1. Lambda関数の概要
**cloudwatch-alarm-autostop** と **cloudwatch-alarm-autostart** という2つのLambda関数を作成します。
これらの関数は、CloudWatchのアラームを特定のタグに基づいて有効または無効にします。##### cloudwatch-alarm-autostop
このLambda関数は、タグ `Alarm-AutoStop` の値が `yes` のアラームを無効にします。“`python
import boto3def lambda_handler(event, context):
cloudwatch = boto3.client(‘cloudwatch’)
nt = None
サーバレスアーキテクチャによる静的ウェブサイト構築
# はじめに
このリポジトリは、S3、API Gateway、Lambda、RDS、IAMを利用したサーバレス構築の概要を説明します。この構築は、Terraformを使用してIaC (Infrastructure as Code) を実現し、静的ウェブサイトのホスティング、APIゲートウェイによるリバースプロキシ、Lambda関数の実行、RDSデータベースの利用を実現します。以下がレポジトリです。
https://github.com/sugiyama404/practice_lambda
参考記事
https://qiita.com/suzuki-navi/items/6a896a6577deaa858210
# 構成
サーバレスアーキテクチャ構成図:
![aws.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/731268/2ead2e19-4c1d-4802-
LINEBOT でClaude 3 に問い合わせできるようにしてみる (AmazonBedrock)
# 今回作成する成果物
– AmazonBedrock (Claude 3 Sonnet)にLINEBOTから質問をできるようにする### 参考サイト
https://www.ryucom.co.jp/blog/aws/4713/https://qiita.com/taku-0728/items/c80bcf65aba318ac6db0
https://developers.line.biz/ja/docs/messaging-api/receiving-messages/#verify-signature
## 構成図
![LINEBOT×Claude_アーキテクチャー図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3747609/4c129bf7-e163-e78b-5317-0eae68c3bae1.jpeg)
## 前提
– AmazonBedrockでClaude 3 Sonnetが利用できるアカウントをすでに所有している
– AWSのリージョンは、バージニア北部(us-ea
Slack連携による生産性向上の施策(その2)〜Slack App編〜
# はじめに
こちらの記事は三部構成になっております。
– [Slack連携による生産性向上の施策(その1)〜Workflow Builder編〜](https://qiita.com/oc-arimura/items/ff4c194c617a9d309d9c)
– [Slack連携による生産性向上の施策(その2)〜Slack App編〜](https://qiita.com/oc-arimura/items/fdb6b1faca5ea1150b3a)
– [Slack連携による生産性向上の施策(その3)〜AWS Lambda編〜](https://qiita.com/oc-arimura/items/e9fb983b411b68fd941a)また、全ての記事の内容を含んだ動画も用意しております。
動画で確認したい方は[コチラ](https://www.youtube.com/watch?v=JE7ZVJ9yE9Q)まで。
※動画開始50分頃からの内容になります。# Slack App登録の前に
Slack Appから呼び出されるAPIの準備をします。
## Lambda関数作
Lambdaで定時刻に呟くDiscord Botを作る
# やりたいこと
AWSのLambdaを用いて、毎分0秒に「やっほー」と呟くDiscordのBotを作成します。
## 本記事の対象者
* とりあえずLambdaで何かしてみたい方
* サーバーレスでBotを作ってみたい方## 前提条件
Discordの開発者ポータルからアプリ作成+Bot作成は済んでおり、**Botトークン**が取得できている状態(まだない方は、簡単なのでぜひ取得してみてください)
![スクリーンショット 2024-04-07 17.48.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3287737/9613f259-3894-b6e8-227e-fc337b3a4c2e.png)
↑こちらの画面のToken発行ボタンから取得するものです。
※Botのアイコン画像は[ぷしおメーカー](https://vps1-net000.sfc.keio.ac.jp/pushiomaker/)様で作成しました。# 1. 関数の作成
1. Lambdaコンソールを開く
1. 「
#AWS S3にアップロードされたZIPファイル自動解凍
# S3にアップロードされたZIPファイル自動解凍について:
Cloudfrontに繋いでいるS3へのファイルアップロードを簡素化するため、Zipファイル格納用S3に新しいZipファイルのアップロードが検知されたら、対象Lambdaが有効化され、Zipファイル格納用S3からZipファイルをダウンロードして解凍し、Cloudfront用S3にアップロードします。本記事はそれを実現するlambdaを紹介いたします。
# 処理フロー:
1. Zip格納用S3にZipファイルのアップロードが検知された
↓
2. 自動解凍&アップロードLambdaを呼び出す
↓
3. (Lambda) Zip格納用S3から対象Zipファイルをダウンロードする
↓
4. (Lambda) 対象Zipファイルを解凍する
↓
5. (Lambda) 解凍した資材一式をCloudfront用S3にアップロードする
↓
終了# Lambda作成:
以下の手順を踏んで作成します1. AWSコンソール画面の上部にある検索欄から「Lambda」を入力し、検索する
2. Lambda詳細画面の左メニューの「関数」を