過去にQiitaに投稿した内容のアーカイブです。
Amazon Bedrockでエージェントを構築できるAgents for Amazon Bedrockという機能があります。この機能はLambdaで構築するのですが、構築に際して次のものが必要です。
過去にQiitaに投稿した内容のアーカイブです。
Amazon Bedrockでエージェントを構築できるAgents for Amazon Bedrockという機能があります。この機能はLambdaで構築するのですが、構築に際して次のものが必要です。
過去にQiitaに投稿した内容のアーカイブです。
少し前にLangChain開発元から新しいツールとしてLangServeというものがリリースされています。
AWS Lambdaのメモリ容量を10240MBに指定するとエラーが発生しました。
'MemorySize' value failed to satisfy constraint: Member must have value less than or equal to 3008
注意書きはメモリを 128MB~10240 MB に設定する
とあるので、10240MBに指定できそうです。また、10241MBに設定するとエラー表示になります。
re:Invent 2022の期間中にLambdaのコールドスタート問題を解消する大きなアップデートが発表されました。
New – Lambda SnapStart で Lambda 関数を高速化
過去に検証した内容のように、特にJavaの場合のコールドスタートに時間がかかる問題があり、この解消に有効とのことです。
追加費用もなく利用できるとのことなので、常に有効化でよいのではないかと考えていたのですが、いくつか制限がありそうです。
過去にQiitaに投稿した内容のアーカイブです。
あけましておめでとうございます。
AWS Lambdaがコンテナイメージをサポートしたので、Puppeteerでキャプチャを取るLambdaをつくてみました。
クラスメソッドさんの以下の記事の通りで、ローカルでの実行はうまくいきましたが、Lambdaへのデプロイするとうまく動作しませんでした。(Chromeの起動タイミングでエラー?)
Lambda コンテナイメージで Puppeteer を使ってみた | Developers.IO https://dev.classmethod.jp/articles/try-using-puppeteer-with-a-lambda-container-image/
試行錯誤の結果が、こちらとなります。
全体はこちらにアップロード済みです。 https://github.com/moritalous/m5core2-yweather/tree/master/lambda
クラスメソッドさんはGoogle Chromeとpuppeteer-coreの組み合わせでしたが、puppeteer単体で動かしたかったので、インストールするパッケージを変えました。
インストールするパッケージはこちらを参考にしました。
日本語フォントgoogle-noto-sans-japanese-fonts
もインストールします。
FROM amazon/aws-lambda-nodejs:12
RUN yum -y install libX11 libXcomposite libXcursor libXdamage libXext libXi libXtst cups-libs libXScrnSaver libXrandr alsa-lib pango atk at-spi2-atk gtk3 google-noto-sans-japanese-fonts
COPY app.js package*.json ./
RUN npm install
CMD [ "app.lambdaHandler" ]
依存ライブラリーはpuppeteer
とsharp
です。
sharp
は取得したスクリーンショットをリサイズするために追加しました。
"dependencies": {
"puppeteer": "^5.5.0",
"sharp": "^0.27.0"
}
puppeteer.launch
に指定するargs
について
ローカルでの実行の場合は--no-sandbox
と--disable-setuid-sandbox
の指定だけでうまくいきましたが、Lambda上ではエラーになりました。
/tmpディレクトリ以外が読み取り専用だからではないでしょうか?
試行錯誤した結果、こんな感じです。
const browser = await puppeteer.launch({
headless: true,
args: [
'--no-sandbox',
'--disable-setuid-sandbox',
'-–disable-dev-shm-usage',
'--disable-gpu',
'--no-first-run',
'--no-zygote',
'--single-process',
]
});
キャプチャを撮って、リサイズして、PNGにしました。 API Gateway経由で返却したので、Base64エンコードしてレスポンスにセットします。
buff = await page.screenshot({
clip: rect
});
buff = await sharp(buff).resize(320, 240).png().toBuffer();
base64 = buff.toString('base64');
await browser.close();
const response = {
statusCode: 200,
headers: {
'Content-Length': Buffer.byteLength(base64),
'Content-Type': 'image/png',
'Content-disposition': 'attachment;filename=weather.png'
},
isBase64Encoded: true,
body: base64
};
Lambdaのコンテナイメージサポートですが、
ということのようです。
はじめはGitHub Container Registryで試してだめで、次にECRのパブリックで試してだめでした。。
$ aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin [AWSアカウントID].dkr.ecr.ap-northeast-1.amazonaws.com
$ docker build -t [AWSアカウントID].dkr.ecr.ap-northeast-1.amazonaws.com/[リポジトリ名]:latest .
$ docker push [AWSアカウントID].dkr.ecr.ap-northeast-1.amazonaws.com/[リポジトリ名]:latest
基本的にウィザードに従うだけです。
一点注意ですが、ECRに新しいイメージをプッシュするたびに、Lambdaで使用するイメージを指定し直す必要があります。 sha256ダイジェストの値を見ているようで、latestタグだとしても毎回指定する必要があります。
Lambdaの画面でトリガーを追加します。かんたんです。 REST APIだと昔はバイナリサポートを有効化するとか色々手順があった気がしますが、何もしなくてもPNGイメージの返却ができました。
ヤフーの天気をPNG画像にしてみました。