- 1. [OCI]AWS LambdaのファンクションをAutonomous DatabaseからSQLファンクションとして呼び出してみた
- 2. Amazon BedrockをPythonスクリプトから利用してみた
- 3. AWS Lambda × Ruby 「ランタイムに合わせたbundle install面倒くさい…」「デプロイパッケージが大きすぎて…」という困り事
- 4. Python Lambda DynamoDB ServerlessFrameworkでAPI作ってみた(ローカル開発)
- 5. 動いているEC2を全部問答無用で停止するLambda
- 6. Lambdaオーソライザーで独自認証処理を実装する
- 7. Lambda実装で意識すべきこと
- 8. SAM で PuLPをローカル起動した時に苦労した話
- 9. [AWS] ゼロから始めてLambdaでメールを送信するまで
- 10. Amazon Bedrock を利用してスマートホームスキルを起動するパーソナルアシスタントAIっぽいコードを書いた
- 11. Lambda × SQSでのサーバーレスアーキテクチャの構築
- 12. Serverless Framework + AWS LambdaでのChatGPT APIの作成方法(github actionsでの自動deploy)
- 13. 複数originからのCORSを許可する
- 14. Linebot × ChatGPT × Amazon Polly が織り成す楽しい自動対話の世界
- 15. 【AWS】CloudWatchEvents→(SNS→)Lambda→Slackへ通知する場合のLambda関数コード
- 16. AWS SAMを使ってTypeScriptでImage形式のLambdaを起動する
- 17. LambdaからDynamoDBに接続してみる
- 18. AWS LambdaからOCIリソースのAPI操作(Secrets Managerを使用)
- 19. 【Python】Switchbot Hub2の気温・湿度をCloudWatchに定期的に送信する【AWS Lamba】
- 20. API Gatewayとlambdaを使用してみる
[OCI]AWS LambdaのファンクションをAutonomous DatabaseからSQLファンクションとして呼び出してみた
先日の機能追加で、OCI FunctionsのファンクションをAutonomous DatabaseからSQLファンクションとして呼び出すことができるようになりました。
OCI FunctionsのファンクションをSQLファンクションとして呼び出すには、DBMS_CLOUD_FUNCTIONパッケージを使用して設定を行います。
今回は、AWS Lambdaにデフォルトで用意されている「Hello World」を「HelloWorld」という名前のファンクションとしてデプロイし、AWS Lambdaの「HelloWorld」ファンクションをAutonomous DatabaseからSQLファンクションとして呼び出してみました。
なお、今回はadminユーザとしてAutonomous Databaseに接続して検証を行いました
# 1.クレデンシャルの作成
DBMS_CLOUD.CREATE_CREDENTIALプロシージャで、DBMS_CLOUD_FUNCTIONパッケージで使用するクレデンシャルを作成します。
クレデンシャルAWS_CREDをAWS IAMユーザのアクセスキ
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.7RUN 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`のところは`latest`
な
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
Lambda × SQSでのサーバーレスアーキテクチャの構築
## はじめに
先日、AWSのLambdaとSQSを用いた、サーバーレスな設計で、あるアプリケーションを作成したので、その時のアーキテクチャや、実装面で工夫した点をまとめました!
基本的なアーキテクチャですが、前提知識が少し必要なので、やや中級者向けの記事になります!こういう処理を走らせたいけど、お金がかかるしサーバーを動かし続けたくないなあ、、
という方は、ぜひlambdaを活用してみてはいかがでしょうか!## アプリの概要
作成したアプリは、大枠では下記の処理を順番に実行するものです。
1. 処理する対象のURL一覧を取得する処理
2. URLに登録されている文章を取得する処理
3. 文章を要約する処理
4. 要約された文章を、S3に登録する処理周期を設定したEventBridgeをトリガーとして、この処理を開始します。
2番目以降の処理から、lambdaの同時実行の力とSQSの特性を活かして、並行処理を実施します。## アーキテクチャ
![スクリーンショット 2023-10-01 15.53.15.png](https://qiita-image-store.s3
Serverless Framework + AWS LambdaでのChatGPT APIの作成方法(github actionsでの自動deploy)
こんにちは。プログラミングスクール[Happiness Chain](https://happiness-chain.com/)でメンターをしているryoです。
今回、Pyton on Django + Next.jsのアプリにて、ChatGPTを機能として盛り込むため、serverless framework + AWS Lambdaにて、ChatGPT APIを作成しましたのでそちらの手順を紹介します。
## serveless frameworkのプロジェクトを作成
※Node.jsとServerless Frameworkをインストールしていない場合はインストールします。“`
sls create –template aws-python3 –name chatgpt-api –path chatgpt-api
“`
言語はpythonのため、テンプレートはaws-python3を使用します。
上記実行にて、handler.pyとserverless.ymlが含まれたディレクトリが作成されます。## serverless.ymlを編集
最終的な内容は以下
複数originからのCORSを許可する
## はじめに
業務でAWS SAM(lambdaプロキシ統合)にて作成されたAPIに対し、複数originからのアクセスを許可するという作業があったためメモとして残します。
また今回の状況は開発環境と本番環境、両方からアクセスしたい場合などにも役立つ内容かと思います。## 状況再現
AWSの[公式チュートリアル](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html)よりSAMの簡単なAPIを作成します。諸々作業を終え、生成されたURLにcurlすると以下のような結果になると思います。
“`bash
$ curl https://xxxxxxx.execute-api.us-west-2.amazonaws.com/Prod/hello/{“message”: “hello world”}
“`ではブラウザからアクセスしてみます。
今回はlocalhost(`ht
Linebot × ChatGPT × Amazon Polly が織り成す楽しい自動対話の世界
# ChatGPT使って何か作りたい
ChatGPTが出てきてからAI(人工知能)への興味や関心を抱く方が非常に増えましたね。
私も魅力にハマった一人です。ChatGPTを初めて利用した時の感動と驚き、これを使ってどんなことができるようになるんだろう!とワクワク感がたまりませんでした。ChatGPTを使って自分も何か作りたいなぁと思い、考えたのが自動対話アプリです。
本当は、、AIアバターを使って、音声入出力できて、性格や口調なんかもカスタマイズできて、、と色々夢物語を描いてみたんですが、どうやって作れば良いか見当もつかなかった。。なので、まずはミニマムにテキスト&音声応答する対話アプリを考えてみました。
下のイメージで作ります。(作ったやつです…)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3567948/d821f782-938f-9e41-2ad4-b640ef488dfe.png)# 構成
大好きなサーバーレスサービス駆使していきます。
* フロン
【AWS】CloudWatchEvents→(SNS→)Lambda→Slackへ通知する場合のLambda関数コード
# 概要
“`
AWS Batch -> CloudWatch -> SNS -> Lambda -> Slack
“`AWS Batchが`Failed`になった場合にSlackへ通知する流れを作成しました。
本記事では、Lambda関数に記載するコードを紹介します。※Role含め、これらのリソースをCloudFormationで一括作成する記事も別途投稿します。
# 通知フロー
以下の流れで処理が行われます。AWS Batch:ジョブ実行結果(ステータス)が`Failed`になる
↓
CloudWatchEvents:`Failed`の情報を収集し、トリガーイベントとしてSNSに送信
↓
SNS:CloudWatchから受信したエラー情報をSNSメッセージとしてパブリッシュ
↓
Lambda:SNSから受信したメッセージをトリガーとして起動(Lambda関数がSNSトピックにサブスクライブされており、SNSメッセージがこの関数に送信される)
↓
Lambda関数:ステータスが`”FAILED”`である場合、Slack通知メッセージを構築し、指定されたSlackウ
AWS SAMを使ってTypeScriptでImage形式のLambdaを起動する
## 概要
– AWS SAMの `sam init` 使ってLambdaの言語にTypeScript指定する場合にlambdaのZip形式にのみ Templdateファイルが対応しているようだったので、 Image形式に対応させた際の手順のメモ
– 公式ドキュメント
– https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/what-is-sam.html## 準備
– 参考資料: https://dev.classmethod.jp/articles/typescript-native-support-in-the-aws-sam-cli/
– `What package type would you like to use?` の聞かれた際の選択肢 `1 – Zip`を選択すると、 後続の`Select your starter template` と聞かれた際に Typescript を指定できるが、 `2 – Image` を選択すると j
LambdaからDynamoDBに接続してみる
## 目的
AWS Certified Developer – Associateの勉強をしている中で
理解が浅いサービスについて実際に使用してみます今回はLambdaからDynamoDBに接続してデータを取得するまでをやってみます
DynamoDBのデータ取得方法の違いについても確認しますLambdaとDynamoDBは以下で作成したものを使用します
・https://qiita.com/tsubaki_019475/items/70ab982f3ee329978383
・https://qiita.com/tsubaki_019475/items/f40c65b43103f4a9f8e4## 手順
– ロール付与
– Lambda関数の実行
– API Gatewayを使用した接続## ロール付与
Lambda関数の権限をデフォルトで作成した場合、DynamoDBの権限がないため設定を追加します
**1. Lambdaのページに移動、左のメニューから関数を選択**
**2. 作成したlambda関数を選択**
今回は事前に作成していたtest_lambdaを選択して
AWS LambdaからOCIリソースのAPI操作(Secrets Managerを使用)
## 概要
AWS Lambdaを使ってOCIリソースのAPI操作(Computeの開始操作)を行いました。
サーバレスにすることによってEventbridge等を使った時刻起動やイベント起動等でOCIリソース操作可能になります。
また、OCI資格情報をSecret Managerを使用することによって資格情報をコード外に保存しています。EC2を使った操作はこちらを参照ください。
[AWS環境からOCIリソースのAPI操作(Secrets Managerを使用)](https://qiita.com/tktk2712/items/26217b46d767569212d9)## 構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2730992/cf52fbe0-f463-4b04-d47d-3c176496890c.png)## 設定手順
* OCI資格情報をSecrets Managerへ配置
以下の手順については[AWS環境からOCIリソースのAPI操作(Secrets
【Python】Switchbot Hub2の気温・湿度をCloudWatchに定期的に送信する【AWS Lamba】
季節の変わり目ということで、自宅の気温と湿度をCloudWatchに保存したくなりました。
そこで最小限の労力でPythonを書いて、Switchbot ハブ2の気温と湿度(とついでに照度)をCloudWatchに送信しようと思います。
さらにEventBridgeとLambdaで5分ごとに定期実行します。
![dashboard.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/502255/ab3df0bc-b206-97f9-9ea0-509137916abb.png)# GitHubリポジトリ
全てのソースコードを下記で公開しています。
https://github.com/tippy3/switchbot-hub2-custom-metrics
# #1 Switchbot API用のトークンを取得する
まずはコーディング前の準備です。
[公式サポートページ](https://support.switch-bot.com/hc/ja/articles/12822710195351
API Gatewayとlambdaを使用してみる
## 目的
AWS Certified Developer – Associateの勉強をしている中で
理解が浅いサービスについて実際に使用してみます今回はAPI GatewayとLambdaを使用して、リクエストを送れるまでをやってみます
## 手順
– Lambda関数の作成
– API Gatewayの設定## Lambda関数の作成
**1. Lambdaのページに移動、左のメニューから関数を選択**
**2. 右上の関数の作成を選択**![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1997750/f26b8a57-ac66-56fb-9ae7-e47d2e259681.png)
**3. 下の設定で作成(記載していないものはデフォルト設定です)**
関数の作成:一から作成
基本的な情報
関数名:test_lambda
ランタイム:Pythonコードは作成時に用意されているサンプルをそのまま使用します
“`
import jsondef lambda