- 1. Lambda関数を定期的に実行するEventBridge SchedulerをTerraformで作る
- 2. AWSにおける脆弱性対策に便利そうなサービス Amazon Inspector についてざっくりまとめる
- 3. S3にファイルがアップロードされたらLambdaからAutonomous DatabaseのPL/SQLプロシージャを実行してObject Storageにファイルをコピーする
- 4. AWS Lambdaにレイヤーを追加する
- 5. Lambda で Prisma 使って Migrate する
- 6. GmailトリガーでAWSのLambdaを起動する
- 7. AWS Textractを使用したS3アップロードトリガーの自動テキスト抽出
- 8. 【LangChain編】FAQがAIの力でパワーアップ!誰でもナレッジ情報を自由自在に活用できる仕組みをAmazon Bedrock(RAG)+ LangChain + GASで構築
- 9. LocalStack に Lambda 関数を作成して実行する
- 10. Lambda式の理解
- 11. BedrockとPollyを使ってシャドーイングアプリを作ってみた
- 12. AWS SAMを用いてRemixアプリケーションをLambdaへデプロイする
- 13. Lambdaの実行中に、追加データを送ってみる
- 14. AWS Lambda にPythonウェブサーバーを立てる最小のDockerfileを書いた
- 15. Terraformを使ったLambda関数のコンテナイメージ構築
- 16. AWS NAT ゲートウェイ を理解した上で起動&停止 Lambda を用意する
- 17. AWS Lambda Layersを自動更新するGitHub Actions
- 18. AWS Step Functionsでランダムアルファベットに基づくLambda関数の実行
- 19. DockerイメージをLambda関数のデプロイパッケージとして使用する
- 20. 不要なリソースの稼働時間、コストを削減する方法
Lambda関数を定期的に実行するEventBridge SchedulerをTerraformで作る
# 概要
最近はEventBridgeではなくSchedulerのほうが推奨されているらしいので、やってみました。参考URL -> https://pages.awscloud.com/rs/112-TZM-766/images/AWS-Black-Belt_2023_Amazon-EventBridge-Scheduler_0930_v1.pdf (P.9参照)
# 環境
– Terraform 1.9.1
– Terraform AWS Provider 5.36.0# コード
“`terraform
# Lambda関数
resource “aws_lambda_function” “sample” {
# 省略
}# EventBridge Scheduler使用するIAMロール
resource “aws_iam_role” “sample_scheduler” {
name = “sample-scheduler-role”
assume_role_policy = jsonencode({
Version = “2012-10-17”,
AWSにおける脆弱性対策に便利そうなサービス Amazon Inspector についてざっくりまとめる
## この記事について
この記事は、Amazon Inspectorの利用を検討する上で調べた内容のまとめです。
## Amazon Inspector とは?
Amazon Inspectorは、以下のAWSリソースを自動的に検出し、既知のソフトウェアの脆弱性や意図しないネットワークへの露出がないかスキャンするサービスです。
– Amazon EC2インスタンス
– Amazon ECR内のコンテナイメージ
– AWS Lambda関数継続的なスキャンにより、潜在的なセキュリティリスクを早期に発見し、対策を講じることが可能になります。
**EC2, ECR, Lambdaの脆弱性対策について検討している人には、一考の価値があるサービスかと思います。**## 主な機能
### 1. ハイブリッドスキャンモード
Amazon Inspectorを新規に有効化した場合、デフォルトでハイブリッドスキャンモードが有効になります。
– SSMエージェントがインストールされているインスタンス:エージェントベースのスキャン
– SSMエージェントがインストールされていないインス
S3にファイルがアップロードされたらLambdaからAutonomous DatabaseのPL/SQLプロシージャを実行してObject Storageにファイルをコピーする
# はじめに
自己学習を兼ねて、Amazon S3にファルがアップロードされたら、それをトリガーにしてLambdaファンクションが起動し、LambdaファンクションがAutonomous Databaseに接続してアップロードされたファイルをAmazon S3からOCI Object Storageに移動するPL/SQLプロシージャを実行するという仕組みを構築してみました。
処理の流れのイメージは以下のようになります。
1. Amazon S3のバケットにファイルをアップロード
2. Amazon S3バケットのオブジェクト作成イベントをLambdaに通知
3. LambdaからAutonomous Databaseにアクセス
4. Amazon S3にアップロードされたファイルをOCI Object Storageに移動するPL/SQLプロシージャをLambdaから実行
5. PL/SQLプロシージャによって、Amazon S3にアップロードされたファイルがOCI Object Storageに移動される
※なお、Python、Lambdaに関して初心者ですので、最低
AWS Lambdaにレイヤーを追加する
## やること
– ローカル環境でlambda関数で使用するライブラリをインストール
– ライブラリをzip化
– lambda関数にレイヤーを設定## 環境
– lambda
– Python
– Windows(WSL,ubuntu)## ライブラリを用意
##### lambda関数で使用するライブラリをインストールする。ここではsqlalchemyとしておく。
ローカル環境でvenv仮想環境を構築して、sqlalchemyをインストール。
“`shell
python -m venv venv
source venv/bin/activate
pip install sqlalchemy
deactivate
“`ライブラリをzip化
“`shell
# 適当なディレクトリにpythonディレクトを作成
mkdir /home/hoge/tmp/python
# 仮想環境でインストールしたライブラリをコピー
cp -r venv/lib /home/hoge/tmp/python/
# zip化
cd /home/hoge/tmp
zip -r lay
Lambda で Prisma 使って Migrate する
## やりたいこと
AWS で RDS 作ったけど、テーブル作ったりするのどうしよー
という事で、今回は [Prisma](https://www.prisma.io/) を AWS Lambda に入れて、migrate を実行してみました。1. ローカルで `prisma migrate dev` を実行して migration ファイルを作成
2. AWS Lambda で `prisma migrate deploy` を実行して Amazon RDS に適応ということをやろうと思います。こうすることで、
– AWS 上にサーバーを立てることなく DB のテーブル作成が可能
– Prisma の migration ファイルを管理することで、複数人での開発や、他環境への適応も楽になるはず。
ちなみに、私は Amplify を使って Lambda を作成しました。## Lambda のコード
RDS のユーザ名、パスワードは Secrets Manager にある前提です。
以下の環境変数の設定が必要です。– DATABASE_SECRET_ARN: S
GmailトリガーでAWSのLambdaを起動する
非エンジニアのバックオフィスが頑張るシリーズです。
今回は会社に関係なく個人的なニーズでやってます。今どき個人でもLambda関数のひとつやふたつ、もっているのが常識ですよね🙃
届いたメールでLambdaが起動したらきっと便利なはず!
# やりたいこと
Gmailで特定条件のメールが来たら、Lambdaを起動したい
# 具体的な方針
1. Gmailで特定条件のフィルタを作成しラベルをつける
1. GASでGmail API を叩いてラベルのついたメールがあったらAWS API Gateway を叩く
1. API Gateway から Lambda を起動する
# 作成編
今回は既に問題なく動く Lambda関数があって、デプロイ・テスト完了しているものとします。
## Gmailのフィルタ設定
まずGmailで特定のラベルをつけるフィルタを設定します。(説明割愛)
## API Gateway の準備
今回は単純にAPIを叩くだけで、パラメータ等の引き渡しはしませんので、簡単に作成します。
## API Gateway 作成
「APIを作成」ボタンを押下します。
![image.
AWS Textractを使用したS3アップロードトリガーの自動テキスト抽出
この記事では、AWS SAMを使用してS3バケットにファイルがアップロードされた際に自動的にAWS Textractを利用してテキストを抽出するLambda関数を作成する方法を説明します。
このテンプレートは以下のリソースを作成します。S3バケット: ファイルのアップロードをトリガーするための入力バケットです。
バケット名は{AccountId}-{Region}-input-bucketという形式で生成されます。Lambda関数: S3バケットにファイルがアップロードされるとトリガーされる関数です。
この関数はPython 3.11で動作し、Textractを使用してアップロードされたファイルからテキストを抽出します。IAMロール: Lambda関数が適切な権限を持つためのロールです。
このロールには、Lambdaの基本実行権限、S3へのフルアクセス権限、Textractへのフルアクセス権限が含まれます。このテンプレートの構成と実装方法を解説し、最後に、実際に動作確認を行い、S3バケットにファイルをアップロードしてTextractによるテキスト抽出が成功することを
【LangChain編】FAQがAIの力でパワーアップ!誰でもナレッジ情報を自由自在に活用できる仕組みをAmazon Bedrock(RAG)+ LangChain + GASで構築
# はじめに
こんにちは!CBcloudのRyoです:grinning:私の所属するCBcloudでは、物流ラストワンマイルの配送プラットフォーム「ピックゴー」を運用しており、荷物を送りたい方、荷物を届けてくれる方を24時間365日、サービスを通してつなげています!
https://pickgo.town/?utm_source=google&utm_medium=cpc&utm_campaign=brand&utm_id=749340152&utm_term=pickgo&af_pid=google&af_c=brand&gad_source=1&gclid=CjwKCAjwyJqzBhBaEiwAWDRJVBRiSmk6aRJqjngMWLKe1uuwT-EGw6Ktv9Vu7EG8o7545efU0FJaeBoCKuMQAvD_BwE
今回は以前より投稿しているRAGを使ったAI構築のLangchain編となります
Bedrockやナレッジベース・エージェントの説明は前の記事にありますので気になる方はそちらを参照ください
完成品編
https://qiit
LocalStack に Lambda 関数を作成して実行する
## このエントリについて
– [こちらのエントリ](https://qiita.com/outerlet/items/8199c2f4eb7cbc678f16) と同じく、以前残したメモを供養する目的で書きました
– LocalStack はv3がリリース済みですが、ここに書いたのはv2の使用時に調べた設定やコマンドです。v3のコンテナでも通用することを確認したうえで書いていますが、v3に最適化したわけでないことはご承知おきください
– LocalStack の CloudWatch Logs を使って動作確認していますが、操作は全てCLIでやっています。コンソールなどで確認できるのかも知れませんが、そのあたりは調べきれておらず、割愛させてください
– `aws lambda` のコマンドリファレンスは [こちら](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/index.html “https://awscli.amazonaws.com/v2/documentation/api
Lambda式の理解
# 関数型インターフェスとLambda
Javaでは変数として関数(処理の実装)を受け取るための変数が用意されています。
関数型インタフェースの用途を理解することでLambda式も理解できるかと思います。|変数型|サンプル|
|—-|—-|
|String|”abcdefg”|
|Integer|123456|
|関数型インタフェース|x+yの結果を返す関数|関数型インタフェースについてはjava.util.functionパッケージ内で準備されています。
関数型インタフェースの概要についていくつか説明します。|関数型インタフェース|メソッド|概要|
|—|—|—|
|Function\|R apply(T t)|入力値Tを受け取り、結果Rを返却|
|Predicate\|boolena test(T t)|入力値Tを受け取り、評価結果booleanを返却|
|Consumer\|void accept(T t)|入力値Tを受け取る|
|Supplier\|T get()|結果Tを返却| ## Function\
の
BedrockとPollyを使ってシャドーイングアプリを作ってみた
## はじめに
本記事では、BedrockとPollyを軸にシャドーイングアプリを作成した際の備忘録です。
個人で使用することを想定したアプリであるため、セキュリティ面はあまり考慮していませんのでご了承ください。## アプリの概要
1. Bedrock先生にシャドーイング用の英文テキストを生成してもらう
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1371880/392855d6-2b04-b13f-eaab-5e3bcc5e0394.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1371880/9b8a7fe0-9aa5-c323-2a6a-8173d1725d8e.png)2. 生成してもらった英文テキストをPolly先生が音声データに変換してもらう
![image.png](https://qiita-image-store.s3.ap-northeast-1.a
AWS SAMを用いてRemixアプリケーションをLambdaへデプロイする
## はじめに
[aws-lambda-web-adapter](https://github.com/awslabs/aws-lambda-web-adapter)を使って、とても簡単にRemixで作られたアプリケーションをLambdaにデプロイできたのでその手順をまとめました。
完成品はこちらのリポジトリにあります。
https://github.com/monjara/remix-sam-lambda-example
## 必要なもの
– SAM CLI
– Node.js
– Docker## 階層構造
以下のような階層でプロジェクトを作成します。
“`sh
.
├── remix-app/ # Remixのアプリケーション
│ ├── (Remixのファイル群)
│ ├── Dockerfile # buildしたアプリケーションを実行するためのDockerfile
│ └── run.sh # remix-serveを実行するスクリプト
└── template.yaml # SAMのテンプレートファイル
“`## Remixプロジェクト
Lambdaの実行中に、追加データを送ってみる
# この記事について
よくあるLambdaは次の図のような動きをします。
リクエストを投げるとLambdaの処理が始まって、処理が完了すると結果が返ります。![buffered-response.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233180/ce7aad3b-8911-f739-6139-bda8439d2cf5.png)
この記事では、次の図のようなことをする方法を紹介します。
実行中のLambdaに対して、追加のデータを送信します。![buffered-response-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/233180/7604e9ef-75fe-5792-39e2-b319983f68c5.png)
# 利用する環境
Lambdaの実装言語: TypeScript
ランタイム: Node.js 18.x# 何が嬉しいのか
双方向通信をするだけならAPI Gatewa
AWS Lambda にPythonウェブサーバーを立てる最小のDockerfileを書いた
関数URLにアクセスすれば
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/118083/3231bf48-ede2-f3f8-7dca-8fb3780a2abb.png)これが動くなら言語、フレームワーク問わずどんなウェブサーバーも動かせそうですね
“`Dockerfile
FROM public.ecr.aws/lambda/python:3.12
COPY –from=public.ecr.aws/awsguru/aws-lambda-adapter:0.8.3 /lambda-adapter /opt/extensions/lambda-adapter
ENV PORT=8080
RUN printf “\n\
import os, http.server, socketserver\n\
class MyHandler(http.server.SimpleHTTPRequestHandler):\n\
def do_GET(self):\n\
se
Terraformを使ったLambda関数のコンテナイメージ構築
# はじめに
AWS Lambdaは、サーバーレスでイベント駆動型のコンピューティングサービスです。従来のLambda関数ではzipファイルでコードをアップロードしていましたが、コンテナイメージを使用することで、より柔軟で強力な開発・デプロイが可能になります。
本記事では、Infrastructure as CodeツールであるTerraformを用いて、Lambda関数として実行するコンテナイメージを構築し、AWS環境へデプロイする手順を解説します。制作したレポジトリはこちらです。
https://github.com/sugiyama404/practice_lambda_docker
参考にしたサイト
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-image.html#python-image-instructions
# 目的
Lambda関数をコンテナイメージで実行することにより、柔軟性とパフォーマンスを向上させることを目指します。
# インフラ構成
![aws.png](https:/
AWS NAT ゲートウェイ を理解した上で起動&停止 Lambda を用意する
# 実現したいこと
既存のAWSのバックエンドシステムにおいて、コスト削減のため開発環境とステージング環境のNATゲートウェイ(NAT Gateway)を夜間と休日の間は停止させるべく、NATゲートウェイを起動・停止させるLambdaを作成します。# 待て、まだコードを書こうとするな
「NATゲートウェイ 自動 停止」とかで検索すると少ないながらもいくつか記事が出てきますが、理解せずにそれをまるまるコピペして実行させるだけではうまくいかないことが多いですし、望まないNAT削除をしてしまう可能性があります。
NATゲートウェイ、ルートテーブル、Elastic IPなどが自分の開発しているシステムではどのように設定されていて、どのリソースを操作すれば良いかをちゃんと理解する必要がありました。こちらは開発していたシステムの構成図を、NATゲートウェイ周りだけを抽出して描いたものです。
手描きでごめんなさい。(手で描いた方が頭に残ると思って。)
これを基にNATゲートウェイ周りを説明します。![IMG_0214.jpg](https://qiita-image-store.s3.a
AWS Lambda Layersを自動更新するGitHub Actions
# はじめに
あの若干面倒なAWS LambdaのLayersをGithubActionsで自動更新するプロセスを組みましたので参考にしていただければ!!(備忘録も兼ねて)
また、本記事内ではアクセスキーとシークレットキーを使った認証ではなく、OIDC認証で実施していますので以下の記事を参考にしていただければ問題ないかと思います。
https://qiita.com/frei_aqua/items/c284a1249dac84c881cb
# 前提
– Python
– Pipenv環境
– Lambda関数を作成済み
– Layersも紐づけ済み(設定オプション的に紐づけもコマンドで行けそうか?要検証)# 本体
お急ぎの方もいるかと思いますので先にymlを貼っておきます。
“`yaml
name: Layer Updateon:
push:
branches:
– main
paths:
– “Pipfile”env:
REGION_NAME: your-region
FUNCTION_NAME: 対象のf
AWS Step Functionsでランダムアルファベットに基づくLambda関数の実行
AWS Step Functionsは、分散システムの調整や状態管理を簡単にするための強力なツールです。今回は、Step Functionsを使って、ランダムなアルファベットを生成し、その結果に基づいて異なるLambda関数を実行する方法をご紹介します。このプロセスを通じて、StepFunction の基礎の基礎を学びます。
具体的には、まずランダムなアルファベット「A」、「B」、「C」を生成するLambda関数を呼び出し、その結果に基づいて「A_Process」、「B_Process」、「C_Process」のいずれかのプロセスを実行します。それぞれのプロセスは別々のLambda関数で処理され、最終的に結果を出力するLambda関数が呼び出されます。この一連の流れをStep Functionsでどのように実装するかを詳しく解説します。
### Step Function の構成
完成時の Step Function の構成は以下の通りです。
![stepfunctions_graph (2).png](https://qiita-image-store.s3.ap-northea
DockerイメージをLambda関数のデプロイパッケージとして使用する
# 手順
## Dockerfileの作成
“`Dockerfile:Dockerfile
# 使用するベースイメージを指定
FROM public.ecr.aws/lambda/python:3.12# 必要なパッケージをインストール
COPY requirements.txt ./
RUN pip install -r requirements.txt# Lambda関数のコードをコピー
COPY app.py ./# Lambda関数のハンドラを指定
CMD [“app.lambda_handler”]
“`## Lambda関数のコードを作成
“`app.py
def lambda_handler(event, context):
return {
‘statusCode’: 200,
‘body’: ‘Hello from Docker Lambda!’
}
“`## 必要なパッケージを記載したrequirements.txtの作成
“`requirements.txt
# 例:reques
不要なリソースの稼働時間、コストを削減する方法
## はじめに
今回は、**不要なリソースの稼働時間、コストを削減する方法**について、整理しました。今回ご紹介する内容を活用すると、毎回、必要な時ににインスタンスを起動したり、停止したりする手間が減るので、アプリケーション開発に集中する事が出来ると思います。## **想定されるケース**
**開発チームとテストチームは、営業日の営業時間中に作業しますが、本番環境は 24 時間、365日稼働しています。最小限の運用労力でコストを削減するために何をすべきでしょうか?**## **ソリューション**
最小限の運用労力でコストを削減するために、開発およびテスト環境のリソースを営業時間外に停止し、営業時間中に再起動することが効果的です。これにより、不要なリソースの稼働時間を削減し、コストを削減できます。営業日の夕方に実行される Amazon EventBridge ルール`StopInstancesRule`を作成します。タグに基づいてインスタンスを停止する AWS Lambda 関数`StopInstancesFunction`を呼び出すようにルールを設定します。営業日の午前中