- 1. RのWeb APIをLambdaで作る
- 2. Amazon BedrockをAWS Lambda上で呼び出してみた(API化)
- 3. 【AWS】CLIでCloudWatchのカスタムダッシュボードを作成する
- 4. Python3.11×Lambda×Seleniumを動かす方法(docker-selenium-lambda)
- 5. AWS LambdaとAWS Amplifyを使ってカレンダーアプリを作った
- 6. AWS Lambda 用のイメージから作成されたコンテナにVSCodeからAttachする際のエラー解決
- 7. AWS Lambdaでseleniumを使う方法
- 8. LambdaをRで動かすlambdr
- 9. AWS Lambda+PythonでExcelファイルにPlantUMLを埋め込む
- 10. LambdaのコンテナのイメージをECRのlatestへ更新する
- 11. [OCI]AWS LambdaのファンクションをAutonomous DatabaseからSQLファンクションとして呼び出してみた
- 12. Amazon BedrockをPythonスクリプトから利用してみた
- 13. AWS Lambda × Ruby 「ランタイムに合わせたbundle install面倒くさい…」「デプロイパッケージが大きすぎて…」という困り事
- 14. Python Lambda DynamoDB ServerlessFrameworkでAPI作ってみた(ローカル開発)
- 15. 動いているEC2を全部問答無用で停止するLambda
- 16. Lambdaオーソライザーで独自認証処理を実装する
- 17. Lambda実装で意識すべきこと
- 18. SAM で PuLPをローカル起動した時に苦労した話
- 19. [AWS] ゼロから始めてLambdaでメールを送信するまで
- 20. Amazon Bedrock を利用してスマートホームスキルを起動するパーソナルアシスタントAIっぽいコードを書いた
RのWeb APIをLambdaで作る
# はじめに
前回、LambdaをRで動かす`lambdr`を紹介しました。
https://qiita.com/a_b_/items/aec53d51d40781c18b89
以前から、ちょくちょくRをREST API化するplumberをコンテナサービスで動かしてきました。
ですが、Lambdaで同じコンテナは動かせないため、`lambdr`を使って、Function URLで似たようなものを作ってみました。# 概要
以下の事をやっています。
– lambdrを使って、RをLambdaで動かします
– LambdaのFunction URLを使って、Web APIにします
– API Gatewayでも同じようにできるはずです
– 動かす処理はPOSTで指定します
– plumberのように、URLパスでの指定はできませんでした…# 参考
https://cran.r-project.org/web/packages/lambdr/lambdr.pdf
https://rdrr.io/github/mdneuzerling/lambdr/man
Amazon BedrockをAWS Lambda上で呼び出してみた(API化)
# はじめに
こんにちは、はやぴー(@HayaP)です。[前回の記事](https://qiita.com/HayaP/items/3395a0d6e1007448fca8)ではPythonスクリプトからAmazon Bedrockを利用してみましたが、今回はAWS LambdaからAmazon Bedrockを動かしてみたいと思います。
# 前提
前提として、Amazon BedrockでJurassic-2 Midが使用可能になっていることが必要です。
実施手順は、過去の記事[Amazon BedrockをPythonスクリプトから利用してみた
](https://qiita.com/HayaP/items/3395a0d6e1007448fca8)にありますので、ご参照ください。# TL;DR (忙しい人用)
– Amazon BedrockのJurassic-2 MidモデルをAWS Lambdaから利用する手順を解説。
– Lambda関数はPython 3.11ランタイムとarm64アーキテクチャで作成。
– IAMロールを作成し、LambdaにアタッチしてBed
【AWS】CLIでCloudWatchのカスタムダッシュボードを作成する
## はじめに
CLIでCloudWatchのカスタムダッシュボードを作成する手順。CLI操作用のIAMユーザ作成とか認証情報の設定は割愛。
1はカスタムダッシュボードはどんな感じかっていう話なので本題は2。## 1. CloudWatchカスタムダッシュボードはこんな感じ(GUIで作ってみる)
CloudWatch -> ダッシュボード -> ダッシュボードの作成で画面右上の`+`か、`+ 最初のウィジェットを追加`をクリックする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3458266/e1182efc-fe2f-25ab-6006-f25cfa0d628b.png)好きな形式を選ぶ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3458266/2987986d-9033-59cc-bd1b-12c0fa51451e.png)Lambdaの実行時間のグラフ。他に確認し
Python3.11×Lambda×Seleniumを動かす方法(docker-selenium-lambda)
## はじめに
Python3.7がLambdaで利用できなくなるということで、新しくPython3.xのバージョンアップを行ってSeleniumを動かうための環境を作ったので、メモを残しておきます。## 変更前のLambdaの環境
環境はこんな感じ
* Python3.7
* SeleniumとWebDriverはLayerで追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1736577/e0856f3b-43fa-50ba-a845-d46f97d13077.png)## 実現したい環境
* Python3.11
* Seleniumを動かす環境
※本当はRequestとBeautifulSoupで処理したほうが早いと思ったけど、
今の機能を踏襲する意味で変更しないこととしました。### Python3.8以降へそのまま移行できない理由
調べてみるとヒットしますが、Python3.7以前と3.8以降では動くOSが違うようです。
![image.png](https
AWS LambdaとAWS Amplifyを使ってカレンダーアプリを作った
# はじめに
カレンダーを作った話のあと、やっぱりAPIとして生やしたくなりますね。
オレオレカレンダーAPIを生やしてしまえば、改造したく成ったら勝手に改造できるし、他人様のAPI使うよりも便利なはずなので(EOLも自分で決められるし)QoL最高だなと思ったのでやってみた。カレンダーの記事は以下を参照してください。
https://qiita.com/segfo/items/59706ec9abacae367bd3
え?
– 過去の祝日が考慮されてない?
– 出来事に応じて祝日が追加されない?オープンソースの強みを活かしましょう!
# やりたいこと
– LambdaにカレンダーAPIを生やす
– `{“year”:2023,”month”:6}`みたいなリクエストをPOSTで送る
– 第N週とか第N月曜日とか、めんどい系の処理をしなきゃいけない情報はまるっと載せてJSONでレスポンスする。
– 1月まるっと取ってLocalStorageにキャッシュしとけばいい。
– 特定の年をまるっと送る みたいなAPIは今回は対象外とする。
AWS Lambda 用のイメージから作成されたコンテナにVSCodeからAttachする際のエラー解決
# 目的
AWS Lambda 用のイメージから作成されたコンテナにVSCodeの「Remote – Containers」拡張機能からAttachする際、以下のようなエラーが発生し、接続できませんでした。“`terminal
tar: command not found
tar (grandchild): gzip: Cannot exec: No such file or directory
“`その解決方法の備忘録です。
# 問題
以下のようなDockerfileがあります。
イメージにはAWS公式のリポジトリから取得した**public.ecr.aws/lambda/python:3.11**を使用します。“`dockerfile
FROM public.ecr.aws/lambda/python:3.11 as dev# requirements.txtを使用して関数の依存関係をインストールする。
COPY requirements.txt .
RUN pip3 install -r requirements.txt –target “${LAM
AWS Lambdaでseleniumを使う方法
# はじめに
備忘録がてらAWS Lambdaでseleniumを使う方法を記載していきます。
– seleniumはサードパーティのライブラリなのでlambda layerでの利用が必須
– また、headless chromium (GUIがないgoogle chromeのようなもの)とchromedriverの導入も必須
– 以下のウェブサイトが非常に参考になるので基本的にはこれを見ればいい
– [AWS Lambda上でheadless-chromiumを動かすときのchromedriverとheadless-chromiumのバージョンの組み合わせ調査 | Create it Myself](https://create-it-myself.com/research/research-combination-of-chromedriver-and-headless-chromium-versions/)
– ライブラリ等の条件
– Python 3.7 (3.7はAmazon Linux、3.8以降はAmazon Linux 2という違いがあり、それが影響
LambdaをRで動かすlambdr
# はじめに
AWS LambdaをRで動かせるようにした`lambdr`なるものを作った方がいらっしゃいました。https://github.com/mdneuzerling/lambdr
今回はこれを動かしてみました。
# 概要
– LambdをRで動かせます
– 非公式なので、利用は自己責任で参考に、PHPでLambdaを動かす事例が公式で記事になっています。これと同様のものをRで作っています。
https://aws.amazon.com/jp/builders-flash/202106/new-lambda-container-development-3/?awsf.filter-name=*all
# やってみた
## 環境
いつものCloud9です。t2.microでやりました。ストレージがギリギリです。他のものが入っているとエラーになりますので容量にはご注意ください。## コンテナ作成とPUSH
まずはコンテナをbuildします。
“`bash
# プロジェクトディレクトリ作成
mkdir test-lambdr && cd tes
AWS Lambda+PythonでExcelファイルにPlantUMLを埋め込む
# はじめに
AWS Lambda+PythonでExcelファイルにPlantUMLを埋め込もうとして苦戦したのでメモ
手こずったところ
– plantwebを自前でレイヤー作成
– requestsのインポートでエラー
https://qiita.com/HLHHS11/items/c26f1632a141a1dcc7a72023/12/4以降AWS CloudShell環境がAmazon Linux 2からAmazon Linux 2023に更新されていく予定なので、この情報は使えなくなる可能性があります
# 準備 – plantwebのレイヤー
### AWS CloudShellでPython3.10環境をビルド
AWS CloudShellでPython3.10環境をビルドします。AWS CloudShellのデフォルトでは3.7です。
OpenSSL 1.1.1をインストール
“`sh:
sudo yum install openssl11 openssl11-devel
“`Python3.10をインストール
“`sh:
sudo yum
LambdaのコンテナのイメージをECRのlatestへ更新する
## 作成済みLambdaのコンテナの更新
マネジメントコンソールからLambdaコンテナを更新しに行くと、
イメージの登録が完了するまでにそれなりに時間がかかる。
CLIで楽にやりたい。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/54100/6bd8f28f-27fe-d6d1-062b-1ffd42eb6c02.png)
Lambdaのマネコンから登録されているイメージURIを見に行くと、
`レジストリURI@sha256`のURIとなっている。
この部分をCLIで更新する。### 手段1. ハッシュ値による更新
`aws ecr describe-images`を使ってハッシュを取得し、URIを生成する。
生成したURLで`aws lambda update-function-code`する。
“`bash:ecr_deploy.bash
accountID=”アカウントID”;
ecrRepoName=”ECRイメージ名”;
aws ecr get-login-pa
[OCI]AWS LambdaのファンクションをAutonomous DatabaseからSQLファンクションとして呼び出してみた
# はじめに
先日の機能追加で、AWS LambdaのファンクションをAutonomous DatabaseからSQLファンクションとして呼び出すことができるようになりました。
AWS LambdaのファンクションをSQLファンクションとして呼び出すには、DBMS_CLOUD_FUNCTIONパッケージを使用して設定を行います。
今回は、AWS Lambdaにデフォルトで用意されている「Hello World」を「HelloWorld」という名前のファンクションとしてデプロイし、AWS Lambdaの「HelloWorld」ファンクションをAutonomous DatabaseからSQLファンクションとして呼び出してみました。
OCI FunctionsのファンクションをAutonomous DatabaseからSQLファンクションとして呼び出す場合の記事はこちら。
https://qiita.com/500InternalServerError/items/ac17dbd10ec887301dc5
なお、今回はadminユーザとしてAutonomous Databaseに
Amazon BedrockをPythonスクリプトから利用してみた
# はじめに
こんにちは、はやぴー(@HayaP)です。
ついに、Amazon BedrockがGAされましたね!
東京リージョンでも、一部のモデルが使用可能になりました。今回はPythonスクリプトでAmazon Bedrockを利用してみます。
理由として、Lambdaから実行するケースや、Webアプリケーションに組み込むケースが多そうだなぁと感じているからです。(Lambdaで実行するハンズオンは別で記事を書く予定です)# 対象読者
– Amazon Bedrockに興味がある方
– Pythonスクリプトで、Amazon Bedrockを利用したい方
– AWS Lambdaでの実装を考えている方(Lambdaのハンズオンではありません)# TL;DR (忙しい人用)
– Amazon Bedrockは、モデル毎に(マネージメントコンソールなどで)初期設定が必要
– Boto3を使えば、比較的簡単に実装できる(基本コピペでOK)
– Claude系は、全リージョン共通で許可制(現時点)
– 東京リージョンで使えるモデルは、us-east-1と比べてまだまだ少な
AWS Lambda × Ruby 「ランタイムに合わせたbundle install面倒くさい…」「デプロイパッケージが大きすぎて…」という困り事
# AWS Lambdaでライブラリを利用するのって地味に面倒くさい
AWS lambdaでライブラリを利用するときに面倒だと思った以下2点についての対処法
– zipフォルダを用意するまで
– 「デプロイパッケージが大きすぎて、インラインコード編集を有効にできません。…」の回避## zipフォルダを用意するまで
### Dockerfileを準備
“`Dockerfile:Dockerfile
# AWS Lambdaで利用するランタイムのバージョンを指定する
FROM ruby:2.7WORKDIR mkdir /var/www
# /var/wwwの部分は/appなどなんでも良い
COPY /app/* /var/wwwRUN bundle config –local set path ‘vendor/bundle’
RUN bundle install
“`
### docker container を起動
`$ docker image build -t XXX:YYY`
`XXX`のところは`sample_app`
`YYY`のところは`lates
Python Lambda DynamoDB ServerlessFrameworkでAPI作ってみた(ローカル開発)
# はじめに
Python / Lambda / DynamoDB / ServerlessFramework でのAPI開発手順を記しておきます。AWSの方から「Lambda × Pythonは起動が速く(コールドスタートが起きない)相性がいい」と伺っていたので、デプロイして計測するのが楽しみです!
# 環境
– macOS Ventura
– Python 3.11.4
– ServerlessFramework 3.34.0
– npm 8.19.2
– node v18.18.0“`terminal: バージョン確認コマンド
$ python3 –version
$ python3 -m pip -V
“`# Lambda作成
## 1. 事前準備
“`terminal:
$ mkdir project-v1 #プロジェクト用ルートディレクトリ作成
$ npm install -g serverless #必要なプラグインのインストール
$ npm install –save serverless-iam-roles-per-function serve
動いているEC2を全部問答無用で停止するLambda
## さくっとコピペでどうぞ
“`python:python
import json
import boto3client = boto3.client(‘ec2’)
def lambda_handler(event, context):
response = client.describe_instances(
Filters=[
{
‘Name’: ‘instance-state-code’,
‘Values’: [
’16’,
]
},
]
)
targetInstances = []
for i in response[‘Reservations’]:
targetInstances.append(i[‘Instances’][0][‘InstanceId’])if not targetI
Lambdaオーソライザーで独自認証処理を実装する
# この記事について
API Gatewayのアクセス制御の仕組みの1つに「Lambdaオーソライザー」という機能があります。
今回はLambdaオーソライザーを使って、
クエリパラメータ「type」の値によって後継のAPIを実行するかどうかを判断する使い方をしてみたいと思います。
Lambdaオーソライザーを作成して動きを確認することを目的としているので、
LambdaオーソライザーやAPI Gatewayの仕様に関しては説明をしません。
AWS公式HPで補足をお願いします。
[API Gateway Lambda オーソライザーを使用する](https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/apigateway-use-lambda-authorizer.html#api-gateway-lambda-authorizer-flow)# 対象者
* Lambdaオーソライザーを作成したことがなく、サクッと挙動を確認してみたい。# API Gatewayの準備
サンプルAPIを利用して、R
Lambda実装で意識すべきこと
実行頻度が低ければ、あまり問題になることはないかもしれません。
ですが負荷試験をやるようなシステムの場合、途端にエラー祭りとなる可能性があります。自身が経験したことも踏まえ、紹介したいと思います。
:::note warn
Lambdaの実行環境は Node.js 前提で話しています(これしか経験ない)
時折紹介するコード例は全て typescript です
:::# ライフサイクル
Lambdaはサーバーレスのコンピューティングサービスです。
そのため、といっていいかわかりませんが、開発したコードが実行されるサーバーが常時起動されているわけではないです。
(後述しますが、常時起動設定が可能な`Provisioned Concurrency`という機能も存在します)以下の流れでLambdaは実行されます。
1. 関数実行のリクエストが送信されると**実行環境の初期化**が行われる
2. **ハンドラ関数**として定義し export した箇所が実行される
3. 関数の呼び出し後、しばらく放置されると(確か5分くらい)**実行環境が破棄**される補足:ハンドラ関数
SAM で PuLPをローカル起動した時に苦労した話
# 背景
AWS Lambdaを利用してバックエンド開発を行っていた際、ローカルサーバーを起動した時にエラーが発生。PythonランタイムでPuLPと呼ばれるライブラリを使用していたのだが、デプロイ環境やpytest時には問題なく計算できるのに、ローカルサーバー起動時のみ計算できない。# 目的
AWS SAM にてPythonランタイムのLambda関数でPuLPライブラリを用いる際、ローカルサーバーでのプログラム実行時に発生した`’PULP_CBC_CMD: Not Available`による`PulpSolverError`を調査した結果、原因と、間に合わせだが解決方法が分かったので共有する。
なお、私のデバイスのみでしか発生しない、もしくは解決しない可能性もある。# 結論
## 原因
`sam build`実行時に生成される`\.aws-sam\build\pulp\solverdir\cbc\linux\64\`内の`cbc`というファイルのパーミッションが`-rw-r–r–`になっている。
このcbcファイルは`-rwxr-xr-x`でなければ使用できず、
[AWS] ゼロから始めてLambdaでメールを送信するまで
:::note info
このドキュメントについて
ゼロからスタートして、AWS Lambdaを使って、あるURLを叩くとHTMLを吐き出しつつメールを送信するプログラムを実装します。
:::# 概要と準備
Lambdaというサーバレスな仕組みを使って、これまでPHPで作っていたようなWebアプリの実装をするとします。PHPで作られたWebアプリの基本構成は「Web3層構造」と呼ばれるものです。基本的には以下の機能が求められます
1. あるURLを叩くとプログラムが起動する
1. 必要な情報をデータベースに問い合わせる
1. 必要に応じてユーザにメール送信する
1. 結果をHTMLで返し、ユーザはブラウザでそれを表示するこれらの機能がLambdaで実装できるなら、WebサーバとPHPで作られていたシステムをLambdaで代替する事ができます。
で、いったんデータベースの事は忘れましょう。『URLを叩くとプログラムが動き、その中でメール送信ができ、また結果のHTMLを吐き出して、URLを叩いたユーザのWebブラウザ上に表示する』というここを実装してみます。
ゼロからスタ
Amazon Bedrock を利用してスマートホームスキルを起動するパーソナルアシスタントAIっぽいコードを書いた
# 何の記事?
– 最近GAした Amazon Bedrock をpythonのSDK(boto3)から実行してみる
– [前回記事](https://qiita.com/hamanuman/items/51bb3974c7550670a2de)の続き
– この中で、プロンプトエンジニアリングっぽくClaude-v2にユーザの意図を判定してもらい、後続の処理を選択してもうらう
– 後続の処理の中で再度ユーザの意図をCluade-v2に判定してもらい処理のパラメータを生成する
– 後続処理としては下記を行う
1. 単純なチャットの対話
1. 画像生成AIでの画像生成
1. ALexa SmartHomeSkillの内部処理であるLambdaの呼び出し# Code
“` personal_assistant.py
import boto3
import json
import base64
import sys
from datetime import datetimesample_prompt = “A photograph of an dog on the top of a