- 1. AWSLambdaを使用してRDSからCSVを取得してメール送信
- 2. 【AWS CDK / SQS+Lambda】SQSからのLambda呼び出しについて検証してみた
- 3. AWS Lambda(Python)からOpenAIのGPT4のAPIを呼び出してみた
- 4. 【AWS CDK入門】AWS CDKでAPI Gateway + Lambdaを構築してみた
- 5. CloudFront + Lambda@Edgeを利用して、user-agentに応じて異なるwebページを表示させる
- 6. AWS LambdaでECRのコンテナイメージを指定したら、エラーが出た。
- 7. LangChainをAPI化するLangServeをLambda上で動作させるのはめちゃ簡単デス
- 8. 【Ruby】Procの基礎を理解する
- 9. Lambda Node.js 16 EOL 対応とは / AWS
- 10. Misskeyに定期投稿するbotをAWS LabmdaとEventBridgeで作る
- 11. 未来のレジ:AWS Rekognitionと画像分析の力
- 12. ネットに繋がっていないはずのVPC Lambdaをどうして呼び出せちゃうんですか
- 13. 災害ボランティア情報クローラーを作ってLambdaで更新差分チェックをした
- 14. terraform-aws-modules/lambda/awsとPoetryを使ってLambda Layerを作成
- 15. 【AWS】Lambda関数のレイヤー作成と利用【Lambda】
- 16. AL2 ベースの Lambda 上で Selenium4 を使う CDK Stack
- 17. ハッカソン参加時の備忘録 ~ 第3回:AWS LambdaとAWS RDS(MySQL)を連携させてみよう ~(1)
- 18. Amplifyで作ったAppSyncへLambdaからmutateするとSubscribeに失敗する
- 19. boto3でAWS Batchジョブ定義の最新リビジョンを取得するときにハマった
- 20. サクっとchaliceでlambdaをデプロイするまで
AWSLambdaを使用してRDSからCSVを取得してメール送信
# 1.はじめに
はじめまして!株式会社TechoesインフラチームのYです!
今年の4月で2年目を迎える初心者のクラウドエンジニアです。
今回からTechoesの採用強化、学習内容のアウトプットを目的としてQiitaで技術ブログを書いていこうと思います。
第1回目として最近学習したAWSLambdaを使ってRDSからCSVを取得してメール送信する手順を投稿します。# 2.前提
– 言語:Python 3.10
– ライブラリ:pymysql
※layerとしてS3に保管
– RDS:Aurora MySQL
– RDSの認証情報はSecretManagerから取得
– メール送信にはSESを使用
# 3. CFNテンプレート
Lambda関数を作成・管理するテンプレートです。レイヤーはあらかじめS3に保管しておいたものを使用します。
“`yaml:lambda.yaml
Resources:
LambdaRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
【AWS CDK / SQS+Lambda】SQSからのLambda呼び出しについて検証してみた
# はじめに
SQSトリガーのLambda実行について、色々と検証してみたくなったので試してみた。## 対象とする読者
* SQSの基本は知ってるけど、細かい動作まで知りたい人
* SQSトリガーのLambda実行環境をcdkで構築したい人# 結論)わかったこと
* SQSのキューがFIFOの場合、紐づくデッドレターキュー(DLQ)も強制FIFO
* LambdaのOnSuccess/OnFailureに紐づけるキューはFIFO不可
* LambdaのDLQもFIFO不可
* 最大受信回数到達時、Lambdaエラー→可視性タイムアウト→DLQへ送信の順番
* SQSからのLambda実行は非同期呼び出しではない
→ LambdaのOnSuccess/OnFailure送信先やDLQは効かない# 検証環境構築
以下の環境を構築する。
AWS Lambda(Python)からOpenAIのGPT4のAPIを呼び出してみた
[Supership](https://supership.jp/)の名畑です。[スナックバス江](https://snackbasue.com/)は肩の力を抜いて見られるのでいいですね。年齢を重ねる毎にこういう作品が好きになっていきます。
## はじめに
[AWS(Amazon Web Services)](https://aws.amazon.com/jp/)でWebアプリを作ることがあるのですが、その過程で触れてきたものについて、せっかくなので要点だけを抽出して残しておくことにしました。
特に目新しい内容はありませんが、**AWS**や**OpenAI**のアカウント作成も含めて一通りの流れを残すので、いい具合の備忘になればと。
今回は[Lambda](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)を経由して[OpenAI](https://openai.com/)の**API**を叩くまでをまとめます。
## Lambdaとは
> AWS Lambda は、サーバーをプロビジョニングま
【AWS CDK入門】AWS CDKでAPI Gateway + Lambdaを構築してみた
# はじめに
AWS CDKってドキュメント見てもよくわからん…ってなったので、実際に動かしてみた。
すると、CDKすげええええぇってなったので、その感動を共有したくて記事を書いてみた。### 対象とする読者
* AWS CDKとはなんぞやって人
* AWS CDKをお金をかけずに動かしてみたい人# AWS CDK のこれだけ知っておけばOK
AWSのIaC (コードでインフラを管理)といえば、CloudFormation!
→ しかし、以下の課題が・・・
* YAML/JSONなので、ループや条件分岐などを用いたリソース定義が書けない
* 大規模なインフラだと、一から十まで書くの大変これらを解決するのが、AWS CDK!
→ CloudFormation用のテンプレートをプログラム言語から生成しちゃおう:::note
* TypeScriptやPythonなどでリソースを定義するのでループなど自由自在
* ライブラリでリソースが抽象化されているので記述量が大幅減
(抽象化 = REST APIを作るといったパターンが用意されている)
:::# AWS CD
CloudFront + Lambda@Edgeを利用して、user-agentに応じて異なるwebページを表示させる
CloudFront + S3でウェブページを表示する仕組みは以前作ったことがありますが、
「**AWS上の仕組みを使ってスマートフォンとPCからのアクセスで、異なるwebページを表示させることってできるのかな?**」と思ったので、実践してみました。## 目標
・スマートフォンからのアクセス時は「スマートフォン専用サイト」
・PCからのアクセス時は「PC専用サイト」を表示させる## 条件
・user-agentに「iPhone」「Android」が含まれている場合にスマートフォン、含まれていない場合はPCからのアクセスと判断する
・表示させるのはS3に配置したhtmlファイル## 構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2969669/018162c8-072d-e62e-0585-2ab732d79111.png)## 流れ
①S3に2つのhtmlファイルを配置する
②Lambda@Edgeを作成する
③CloudFrontのディストリビューションを作成する
AWS LambdaでECRのコンテナイメージを指定したら、エラーが出た。
こんにちは、ユーゴです。今回は、私がコンテナイメージからLambdaを作ろうとした時に遭遇したエラーと解決策を紹介します。
難易度は、初歩レベルです。# 問題
以下のようなエラーが出る
![スクリーンショット 2024-01-21 15.44.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/9f3108ea-4f10-fccc-bd2c-22b0f44d2666.png)> Source image xxxxxxxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/xxxxxxxx is not valid. Provide a valid source image.
# 原因
リポジトリ自体のURIを指定してた
![スクリーンショット 2024-01-21 15.45.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2607452/8349e5bc-a
LangChainをAPI化するLangServeをLambda上で動作させるのはめちゃ簡単デス
少し前にLangChain開発元から新しいツールとしてLangServeというものがリリースされています。
https://blog.langchain.dev/introducing-langserve/
> LangServe is the easiest and best way to deploy any any LangChain chain/agent/runnable.
生成系AIを使ったAPIを簡単に作成し利用できる仕組みで、プロダクション環境でどんどんLangChainを使ってねというメッセージと捉えました。
イメージとしてはこんな仕組みです。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/63dc3abd-a710-3717-b6b0-ffc45585644e.png)
FastAPI上で動作し、API仕様が定められている感じです。
* Invoke API
単一の入力で処理を実行する
* Batch API
複数の入力で処理を実行する
*
【Ruby】Procの基礎を理解する
# Procクラス
https://docs.ruby-lang.org/ja/latest/class/Proc.html– ブロックをオブジェクトとして扱いたい時に使用するクラス
– ブロック
– メソッドの引数として渡すことが出来る処理のまとまり
– `do .. end`, `{ .. }`
– Procは、クロージャに相当する“`rb
i = 100
pr = Proc.new { i += 1000 } # proc { i += 1000 } も同様p pr.call #=> 1100
p i #=> 1100p pr.call #=> 2100
p i #=> 2100
“`# クロージャとは
>[手続きをオブジェクトとして扱う機能があります。このオブジェクト化された手続きのことをクロージャと呼びます。](https://docs.ruby-lang.org/ja/latest/doc/spec=2fintro.html#:~:text=%E5%88%B6%E5%BE%A1%E6%A7%8B%E9%80%A0%E3%81%
Lambda Node.js 16 EOL 対応とは / AWS
# Node.js よりも前に自分が EOL
気が付けば2024年になりました。
昨年は途中で気持ちが折れたものの現役ビジネスマンとして
有効期限が切れないように今年もよろしくお願いいたします。# Lambda のランタイムを探る
今更次郎さんではありますが
現在新規に作成する Node.js は v20 が初期設定になっているみたいかつて環境構築時に最新であった Node.js 16 は
気持ちに含まれる OpenSSL1.1.1 が 2023年9月11日にEOL で完了。ただやさしい AWSでは気にせずサポートを継続してくれておりました
ただ気が付けば 2024年6月12日が廃止日。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3136487/f7038555-3dca-97bc-b28f-75ff53fa834f.png)
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.ht
Misskeyに定期投稿するbotをAWS LabmdaとEventBridgeで作る
# はじめに
サクッと作れます。
「イベント開催時までのカウントダウンをしてMisskeyを盛り上げたい」などにお役立てください。## 技術
Python
AWS lambda
AWS EventBridge
## 作業手順1. misskeyでAPIキーを取得する
1. Lambdaにアップロードするファイルを作る
1. Lambdaの実行環境を整える
1. EventBridgeで定期実行設定
1. Lambdaにファイルをアップロードして動作確認
—# 制作
## 1. misskeyでAPIキーを取得1. 設定 > API >アクセストークンの発行を押下
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/505609/6280c2db-292b-7e68-f3c9-fc3ce45f2fe2.png)2. 全部許可しちゃう(適宜必要なものを許可すれば良い)
![image.png](https://qiita-image-store.s3.ap-northeas
未来のレジ:AWS Rekognitionと画像分析の力
# はじめに
日本の人口減少とAIの進化が目まぐるしい昨今ですが、単純作業は無人化されていくだろうという推論のもと、未来レジについて考察してみた!
# やりたいこと
Amazon Rekognitionを用いて、画像認識した商品を、データベースにある価格表と照らし合わせて商品の価格を表示する。
これを構成図で書くとこんな感じ。![構成図.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2840619/a4cc4730-7f4d-af56-249b-a591886fc8a6.jpeg)
# やってみた
さて、数々の困難を乗り越えほぼ完成したのですが
膨大な構築作業となるので需要がありそうでしたら続きをまた書きます。続きが気になる方は、いいね、コメントいただけますと幸いです
ネットに繋がっていないはずのVPC Lambdaをどうして呼び出せちゃうんですか
# はじめに
VPC Lambdaをプライベートサブネットに配置し、手元のPCのターミナルからaws lambda invokeコマンドを実行すると呼び出すことができます。Lambdaがネットに繋がってないのになんで叩けるんや…と思ったので少し調べて見ました。# VPC Lambdaの構造
VPC Lambdaとは言いつつ、Lambdaが実行されるのは**ユーザーが作成したVPC内ではありません**。
AWS Lambda Service VPC というLambda Service管理のVPCがあり、そこにLambdaが配置されています。かわりにユーザーが作成したVPCにはENIが作成されます。LambdaはENIを経由して、ユーザーが用意したVPC内のリソースにアクセスします。
このENIのことをHyperplane ENIと言うそうです(なんかかっこいいですね)。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2703223/51eb67a6-0a13-0379-1184
災害ボランティア情報クローラーを作ってLambdaで更新差分チェックをした
今後も似たようなことをやりたくなることはありそうなので、備忘録的にもここに記載
クローラーや差分チェックの話ではなくLambdaの定期実行の話# やったこと
災害ボランティアの更新情報があると良いなぁと思ったため、その情報を取得するための定期的な情報取得で更新があるかを確認しようというものです。
https://docs.google.com/spreadsheets/d/1ToG7uRymeSZbEJbecd-wvBb3XtXP6t2iXsBAfrwhtd4/
こちらにあるリンク集のURLで、更新があったかどうかを確認を行います。
更新があったか、なので更新前の状態を取っておく必要があります。
更新前の状態と結果のファイルが生成されます。結果のファイルから見られるようにしたサイトが下記になります。
https://miyawa-tarou.com/lab/volunteer_links.php
# コード
https://github.com/miyawa-tarou/volunteer_crawler
言語はPython
URLリストは公開しているSprea
terraform-aws-modules/lambda/awsとPoetryを使ってLambda Layerを作成
### 課題
Terraformの `terraform-aws-modules/lambda/aws` と `poetry` を利用してLambda Layerを作成したい場合の方法です。
基本はドキュメントの例にあるように `create_layer = true` を設定すれば良いのですが、そのままドキュメント通りに実装すると、`Unable to import module` となります。
https://registry.terraform.io/modules/terraform-aws-modules/lambda/aws/latest
これは、こちらに記載のある `python` ディレクトリ配下にモジュールをインストールする構造を実現できません。
https://docs.aws.amazon.com/lambda/latest/dg/packaging-layers.html
### 実現方法
`poetry_install` と一緒に、`prefix_in_zip = “python”` とするとLambda Layerとして以下のように定
【AWS】Lambda関数のレイヤー作成と利用【Lambda】
## はじめに
AWS Lambda Layers(レイヤー)を使用すると複数のLambda関数で共通のコードやライブラリを共有できます。これによりコードの再利用性を向上させ、Lambda関数間で共通の機能やライブラリを簡単に管理できます。
今回の記事ではこのAWSLambdaLayerの作成、設定方法、レイヤーを使うメリットについて記載しています。## レイヤーの作成/設定手順(ローカル環境で作成する場合)
### 1. Lambda Layer用のプログラムの作成:
#### ①Pythonコードの作成
・ここでは文字列を返すだけのコードを実装しています
![2_Code作成.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192949/8fa74653-7d1e-93f1-029f-4a66d382befc.png)#### ②依存関係を取得:
・コードが依存している外部パッケージがあれば、これらを取得します。通常、pipを使用して仮想環境で必要なパッケージをインストールします。
・pyt
AL2 ベースの Lambda 上で Selenium4 を使う CDK Stack
# 概要
Amazon Linux2 ベースイメージの AWS Lambda で、Seleniumを利用したWebクローリング処理をCDKでデプロイするサンプルコードを書いたので紹介します。本記事のタグの技術要素を普段から利用されている方は、特に本記事の解説を読んで頂く必要はありません。コードを覗いてみてください。
https://github.com/coleyon/amazonlinux2-py310-selenium4x-cdk-example
参考にさせて頂いたコードはこちらです。ありがとうございます。
https://github.com/umihico/docker-selenium-lambda
# 背景
APIの開発がすぐにはできない社内のWebアプリでページを表示し、内容に応じて複数ある内の一つのボタンをポチっとしたいケースがありましたので、Seleniumを利用する事にしました。
特に大規模な処理に使うわけではないのですが、将来的に Stepfunctions や APIGateway 経由で叩けるように拡張できるようにしたかったので、Lambdaで動
ハッカソン参加時の備忘録 ~ 第3回:AWS LambdaとAWS RDS(MySQL)を連携させてみよう ~(1)
こんにちは。ITエンジニアのきゅうです。
第3回目は業務アプリケーションでは必ずと言っていいほど使うデータベースに接続させてみたいと思います。そもそもAWSには様々なデータベース(以降DB)が用意されており、
特にNonSQLをAWSはプッシュしている様に思いますが、
今回は使い慣れたRDSの中でもMySQLを使用していきたいと思います。
以下、今回作成するアーキテクチャイメージになります。
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3618971/8b73423b-f55c-73be-cd20-c430198e107f.png)# VPCの作成
“`
使用するサービス:VPC
使用する機能:VPC
“`
### 1.VPCの作成
RDSはVPCを設定する必要があるので、事前にVPCを作成しておきます。
AWSにログインしたら、まずは検索ボックスより「VPC」と入力し、開かれた『VPC』のダッシュボードより「VPCを作成」ボタンをクリックします。### 2.VPCの設定をす
Amplifyで作ったAppSyncへLambdaからmutateするとSubscribeに失敗する
# 事象
掲題のとおり。
さらにWebSocketをデバッグツールで見ると、4エラーがサブスクリプションイベントとして受信されていた。
“`json
[
{
“message”: “Cannot return null for non-nullable type: ‘AWSDateTime’ within parent ‘Hoge’ (/onCreateHoge/createdAt)”,
“path”: [
“onCreateHoge”,
“createdAt”
]
},
{
“message”: “Cannot return null for non-nullable type: ‘AWSDateTime’ within parent ‘Hoge’ (/onCreateHoge/updatedAt)”,
“path”: [
“onCreateHoge”,
“updatedAt”
]
},
{
“message”: “Cannot return null for
boto3でAWS Batchジョブ定義の最新リビジョンを取得するときにハマった
# はじめに
Lambda経由でBatchを実行しようとしたら古いリビジョンのジョブ定義が呼ばれてしまった。
困ったのは**同条件でも最新リビジョンが取れてしまうことがあった**という点。
同じコードを実行しているのに挙動が変わるので、原因がコードにあるのか、それとも他にあるのか、という段階から当たりをつけていくことになり、迷走しました。# 目次
1. [原因](#原因)
1. [コード](#コード)
1. [解決方法](#解決方法)
1. [最大100件の制限を忘れない](#最大100件の制限を忘れない)原因はコードにありました。
“`python
client.describe_job_definitions()
“`
このdescribe_job_definitions()は
アカウントの同一リージョンに存在するすべてのジョブ定義から最大 100 件のジョブ定義のみを取得するメソッドでした。
一方アカウントに存在するジョブは200件を超えていました。
同じコードでも最新リビジョンが取れてしまうことがあったのは最大100
サクっとchaliceでlambdaをデプロイするまで
# はじめに
サブシステムの開発などでスピード感をもって **lambda** をリリースしたい時がよくあります。
割と「あれ、どうやって環境構築したっけ?」ってなることが多いので、まとめることにしました。**sam**でもいいですし、何を使ってデプロイするかはその組織や案件によって様々考えられると思いますが、私の場合は **chalice** でデプロイすることが多いので、今回は **chalice** でデプロイするまでの流れを記述します。
# 技術
– python 3.12.1
– chalice 1.30.0# 前提
AWSアカウントを所有していること# 環境構築
1\. direnvインストール
goコンパイラが入っている場合
“`bash
~/ $ git clone https://github.com/direnv/direnv
~/ $ cd direnv
direnv $ sudo make install
“`macの場合
“`zsh
~/ $ brew install direnv
~/ $ brew install openssl r