Lambda関連のことを調べてみた

Lambda関連のことを調べてみた
目次

Python+AWS LambdaでWEBスクレイピングAPIを作成してみた

# Lambdaを使ってAPIを作りたい
![Screenshot 2024-08-30 131834.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/722467/7fe54343-ed11-6453-664a-2bf239577cde.png)

前から気になっていたAWSのサービス、Lambdaを使ってAPIを作成することができました。
コードはPythonで書いており、市町村の観光情報をスクレイピングして取得してjson形式で取得できるAPIです。

どんな風に作ったか説明していきます。

# Pythonコード
## 必要なライラブリ
“`python
import json
import requests
from bs4 import BeautifulSoup
import urllib3
“`
json形式で取得するため、json
webスクレイピングに使用するrequests,BeautifulSpoup
SSL証明書がないという警告を無視するためのurlib3
(↑公開するなら対

元記事を表示

AWS Lambdaを使ってHULFT Squareを実行してみた

# はじめに

こんにちは。すぎもんです:grinning:
以前、「[コマンドを使って外部からHULFT Squareを実行する方法](https://qiita.com/sugimon/items/beeaaa615d448848ff72)」をご紹介しました。
HULFT Squareは他のクラウド製品と合わせて活用することでサーバーを持たずに稼働させることが出来ます。

そこで今回はサーバーレスコンピューティングサービスであるAWS Lambdaを使用して、HULFT Square を実行することが出来るか試してみます。
これにより、AWSや他のサービスから任意のタイミングでHULFT Squareを実行させることが出来ます。

# 今回やること
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458288/4effa46b-f975-710d-c4c5-80375e9a1e0a.png)
今回は、AWSのLambdaを使用してHULFT Squareを実行してみたいと思います。

元記事を表示

SES+SNS+Lambdaを使ってバウンスメール通知機能を実装しよう!

## 概要
SESを使ってメールを送信した際に存在しないメールアドレスの場合に検知できる機能をSES+SNS+Lambdaを使って実装する方法について解説します

## 前提
– Pythonを使ってLambdaのコードを作成します

## 実装
今回は
– S3
– Lambda
– SNS

の3種類のリソースをCloudFormationを使って構築します

### S3の構築
Lambda用のzipファイルを格納するS3バケットを作成します

“`yaml
AWSTemplateFormatVersion: 2010-09-09
Description: “S3 Bucket Factory Settings Stack”

# ————————————-
# Metadata
# ————————————-
Metadata:
AWS::CloudFormation::Interface:
# パラメータの並び順
ParameterGroups:

元記事を表示

LocalStackにAWS SAMでデプロイしたLambdaにAndroidからアクセスしてみた

## はじめに

– AWS SAM CLI for LocalStack を使ってアプリをLocalStackにデプロイできる
– Dockerでhttpdを起動した端末とスマホが同じネットワークにいれば、スマホのブラウザからWebページを閲覧できる

…ということから、「Dockerで動いているLocalStackにデプロイしたLambda関数へ、同じネットワークのAndroidアプリからアクセスできるのでは?」などと思いつきました。試してみたところ、一応できたのでここに残しておきます
AWSとスマホアプリを連携させるケースを、不具合の混入や費用などの心配なくローカルで好き勝手に試したい、という方の参考になれば幸いです

ちなみに当方はAndroid専門なので、iOSについては言及しておりません。申し訳ありませんが、ご了承ください

### 追記

私のGitHubに以下の3点を含むレポジトリを共有しております。よければご参考ください

– LocalStackコンテナを起動するための docker-compose.yaml
– 簡単なSAMプロジェクト
– Lambda関数を呼び

元記事を表示

ChatGPTに質問しながらLambda関数を作成する

# はじめに
今回、Lambda@Edge で利用する Lambda 関数を用意する必要があったのでそのコードを ChatGPT に書いてもらうことにしました。

https://openai.com/chatgpt/

# 構成イメージ
今回は CloudFront + S3 という一般的な構成をベースに導入します。
また、ベースの構成はすでに用意済みの状態で、そこに Lambda@Edge を追加する内容となります。
![スクリーンショット 2024-08-28 10.16.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/82090/f434b3b4-bad4-ff54-7ac2-302db02f0383.png)

# 要件
CloudFront の場合だとデフォルトルートは `index.html` の補完を設定することができますが、
その他のパスでは補完がされません。
> 通常
> ○ https://cloudfronturl/ → https://cloudfronturl/inde

元記事を表示

Amazon Bedrockの新機能「Prompt Flows」Lambdaノードを使ってみた

# はじめに
今回はAmazon Bedrockの新機能「Prompt Flows」のLambdaノードを使って、ユーザーから入力を受け取り、それをLambda関数で処理し、結果を返すシンプルなアプリケーションを作成してみました。
作成してみて分かったことも共有します。

「Prompt Flows」は、ノードを配置して生成AIのワークフローを開発・管理できるサービスです。

https://aws.amazon.com/jp/bedrock/prompt-flows/

# 導入
アプリケーションの全体像は以下の通りです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3806967/b2b1ae34-3da9-a237-c134-3d8933937439.png)

**①文字列の入力**
**②Lambda関数での処理**
**③処理結果の出力**
という流れになっています。

**①文字列の入力**
Flow inputでは、文字列を入力してもらいます。
後ほど記述しますが、今

元記事を表示

100本ノックしてみたい中堅エンジニア 【AWS】~Lambdaについて簡単に機能紹介~ 3/100

# はじめに

本記事では何かと利用することが多いLambdaについて、説明していきます。

# Lambdaとは?

– サーバーをプロビジョニングまたは管理することなくコードを実行できるイベント駆動型サービスです
– AWSでサーバーレスアプリーションを作りたいってなったら、必ずと言ってもいいほど出てきます

:::note info
:x: サーバーレス = `サーバが存在しない`
:o: サーバーレス = `サーバの管理をAWSが行う`
:::

では、Lambdaの各機能について紹介します

# 関数

Lambdaはまず関数を作るところから始まります。
関数は、Lambdaでコードを実行するために呼び出すことが出来る一機能になります。
作成し、任意のAWSサービスや処理から呼び出すことで処理を実行します、

関数は以下の3つから作成します。
– `一から作成`:一からコードを書いてLambda関数を実装する場合に選択します。基本はこちらを選択することになると思います
– `設計図の使用`:AWSが用意したサンプルコードをベースに実装する場合に選択します。Lambdaを初めて

元記事を表示

Lambdaをコンテナイメージとしてデプロイする方法

従来のZIPファイルによるデプロイに代わり、Dockerイメージを使ってLambdaをデプロイする方法をメモ

## ファイル
“`:構成
.
├── Dockerfile
├── app.py
└── requirements.txt
“`

“`docker:Dockerfile
# ベースイメージとして公式のAWS Lambda Python 3.8ランタイムを使用
FROM –platform=linux/amd64 public.ecr.aws/lambda/python:3.8

# Lambda関数コードをコンテナにコピー
COPY app.py ${LAMBDA_TASK_ROOT}

# 必要なパッケージをインストール
COPY requirements.txt ./
RUN pip install -r requirements.txt

# Lambdaハンドラーを指定
CMD [“app.lambda_handler”]

“`

※M1 Mac上でビルドする場合、FROMに「–platform=linux/amd64」を指定してあげないと、

元記事を表示

記事紹介:API に Lambda Monolith (別名:Lambdalith) を使うべきか?

## 序文
バックエンドAPIから非同期処理を切り出したくLambdaで設計した際に、以下のようなディスカッションをした。

*「1つのLambdaに色々な処理を詰め込むモノリスLambdaはアンチパターンと言われているけど、処理ごとに作るのも開発速度が遅くなってしんどそう」*

その際にとても良い記事を見つけることが出来たのでメモ代わり&日本語の検索導線を増やしたい気持ちで紹介記事を起稿。

## 本題

https://rehanvdm.com/blog/should-you-use-a-lambda-monolith-lambdalith-for-the-api

紹介記事冒頭の意訳

*この投稿では、モノリスのLambda API関数(別名Lambdalith)について、APIエンドポイントごとの単一目的のLambda関数と比較して、賛否両論を検討する。
“ベストプラクティス”に挑戦し、APIに関しては多くの場合モノリスLambda関数の方が優れていると主張する。*

*【重要】
この投稿は、APIに面したLambda関数にのみ適用できる。
それ以外のものには、単一目的の関

元記事を表示

CloudFormationを使ってLambdaとSQSを作成しよう!

## 概要
CloudFormationを使って非同期処理でよく使用するLambdaとSQSを作成する方法について解説していきます

## 実装
– Lambdaを格納するS3
– SQS
– SQSのメッセージをトリガーに実行するLambda

の3種類のリソースをCloudFormationで作成します

## Lambdaを格納するS3
Lambdaを格納するS3を作成していきます
バケット内のオブジェクトは非公開にします

“`yaml
AWSTemplateFormatVersion: 2010-09-09
Description: “S3 Bucket For Lambda”

# ————————————-
# Metadata
# ————————————-
Metadata:
AWS::CloudFormation::Interface:
# パラメータの並び順
ParameterGroups:
– Label:
def

元記事を表示

GitHubActionsでLambdaとLambdaレイヤーの構築をしていて躓いた。

# はじめに
今回はGitHubActionsを利用してLambdaとLambdaレイヤーを構築します。
LambdaとLambdaレイヤーを紐づける際に上手くいかなかった箇所や解決方法を備忘録として残していきたいと思います。

# 目次
・つまづいたところ
・解決方法
・事前準備
・LambdaレイヤーのCloudFormation
・LambdaのCloudFormation
・Lambdaレイヤー構築のGithubActions
・Lambda構築のGithubActions
・動作確認
・最後に
・参考

# つまづいたところ
Lambdaレイヤーを複数のLambdaに紐づけることとなり、
GitHubActionsでLambdaレイヤーとLambdaのCFnテンプレートを分けて構築することになりました。
そのため、Lambdaを構築する際にLambdaレイヤーの情報をテンプレート外から取得することになったのですが、Outputsで対応した際にバージョンまで取得することができず、躓いてしまいました。

# 解決方法
デプロイをGitHubActionsを活用していたため、バージ

元記事を表示

Node.jsランタイムでSJISのcsvファイルを出力するLambda

# 一覧データをcsv出力
データベースにはUTF-8で保管されているものの、
「ファイルの文字コードは **Shift-JIS** で(Excelでそのまま開きたいから)」
という要件があったとします。

今回は **AWS Lambda(Node.jsランタイム)** で構築したアプリケーションだったので、その例です。

ポイントは以下2点です。
1. UTF-8からShift-JISへのエンコード
1. Lambdaペイロード制限を考慮してS3署名付きURLを利用

## まずはcsvデータを生成
csv形式へのパースには[Papa Parse](https://www.papaparse.com/)を、エンコードには[encoding.js](https://github.com/polygonplanet/encoding.js)を使うことにしました。
“`npm install“`しておきます。

DBから取得したデータ配列を渡して、csv形式&SJISエンコードした文字列を返す処理です。
“`javascript
const Papa = require(‘papa

元記事を表示

【Nuxt 3とLambdaでTypeScriptの型を共有】:🔰エンジニアが感じたモノレポ構造の威力

## はじめに
こんにちは。入社2年目、実務経験約半年の駆け出しフロントエンドエンジニアです。日々の業務では主にNuxt、Vue、AWS、TypeScriptを使って開発を行っています。

今回は、最近の開発で採用した「モノレポ構造」を通じて、型の共有がどのように役立つかについてお話しします。駆け出しのエンジニアの方にとって、少しでも参考になる情報をお届けできれば嬉しいです。

## 現在の開発環境
私の現在の開発環境は以下の通りです:

– フロントエンド: Nuxt 3
– バックエンド: AWS Lambda (Node.js)
– 共通言語: TypeScript

## 直面していた悩み
フロントとバックで別々のリポジトリに分かれていると、同じ型を使いたいのに、変更があるたびに手作業で同期しなければならず、とても面倒だなあと思っていました。
結果として、型の不一致が原因でエラーが発生したりして、開発スピードが落ちることもありました。

## 型共有の課題とモノレポ構造との出会い
フロントエンドとバックエンドで型を共有する一般的な方法としては、以下のようなものがあります:

1

元記事を表示

API GatewayでLambdaを呼び出してCORS対応する方法

# はじめに
こんにちは、もちもちMAXです。
今回はAPI Gatewayでプロキシ統合したLambdaを呼び出す時にCORS対応する方法を説明します。作成するのはREST APIで適当なパラメータをbodyに格納してPOSTできるところまでをやっています。

# 手順
ざっくりとした手順は下記の通りです。
1.API GatewayでLambda関数を紐づけたREST APIを構築
2.Lambda関数にCORS対応を追加
3.CORS対応確認

# Lambda関数の作成
各手順の説明の前に、今回呼び出すAPIの実体であるLambda関数を作成します。
![image (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/463753/97bb1fea-bbf5-6d0b-9f3c-f46a575f60f2.png)

Lambda関数のコードは下記の通りです。
“`Python
import json

def lambda_handler(event, context):
# OPT

元記事を表示

Amplify Gen2 でLambdaを定義したらesbuildされてソースがコンソール上で見えなくなる

## はじめに

Qiitaのアカウントを初めて作成してみて、投稿記事第一号です。
関西の製造業で働いてAWSを勉強中のエンジニアのヤタクマと申します。

今回、Amplify Gen2 を触り始めてAPI GatewayやLambdaといったバックエンド環境をTypeScriptで定義できるというのは便利だなと思い、触ってみたときのメモです。

もともと、Lambdaをpythonで構築していた過去がありSAMを使うとローカルと同じソースがコンソールでも展開されているのでそれと同じ感覚で Amplify Gen2によりCDKでLambdaを定義して試していたら勝手が異なっていたため自分なりに調べていたことのメモです。

## 環境情報

* AWS Amplify Gen2
* Lambda (Nodejs 20)
* 使用言語 TypeScript

## やったこと

1. Amplify Gen2 のチュートリアルの手順したがって、amplify-next-templateのソースをgithub上でとりこみ、Amplify上でデプロイを行いました

https://docs.a

元記事を表示

【Terraform初心者】Lambdaの関数URLを構築してみた

# はじめに
Terraformで今後インフラの構築を行うので、手始めとしてLambdaを作ってみました。

### そもそも「Terraformの書き方がわからん…」って話をしてみる
Lambdaの構築を行う前にQiitaやZennなど、いくつかの記事を見てみました。
しかし、どの記事を見ても「なんでこのパラメータが必要ななんだ…?」と疑問に思ってしまい、Terraformってみんなどういう風に書いていってるかが全然わかりませんでした。
なので、自分のやり方としては、はじめにAWSコンソールで構築してみたり、公式ドキュメントを見ながら、これが「必須パラメータなんだな」とか参考にしていました。
なので、以下の記事に不適切な書き方?が載ってるかもしれないのでコメントで教えていただけると助かります!!!

# 本編
### やること
– Lambda関数はzip形式にしてアップロード
– Lambdaを構築してから関数URLを作成する
– CURLコマンドで動作を確認

## 環境
“` bash
$ terraform version
Terraform v1.5.1
on d

元記事を表示

【AWS】EC2内部でIPアドレスを変更するソフトウェアへの対応方法

# はじめに
 現場で、オンプレの**内部でIPアドレスを変更する仕組みを持つメールサーバ**をAWSのEC2に移行する際、大きな問題点がありましたので解決策とともに紹介します。

# 対象読者

– AWSを使用する現場に従事している方
– AWSの資格勉強をしている方
– AWSに興味がある方

# 1. 問題点

### **AWSでは内部でのIPアドレス変更に対応できない**
内部でプライベートIPアドレスを変更した場合でも、AWS側のネットワークインターフェースのIPアドレスは変わらないのでインスタンス同士が通信できなくなります。

今回の現場では、複数のEC2インスタンスでクラスターを作り、ソフトウェアのIPアドレス変更で障害時に自動でフォールバックするようなシステムにて問題が起きました。

# 2. 解決策

### **CloudWatchとLambdaを使用して対応**
AWSでは内部でのIPアドレス変更を検知できないので、内部ソフトウェアのトリガーとなるものをAWS側(CloudWatch)で監視し、Lambdaを使ってIPアドレスを付け替える必要がありました

元記事を表示

【AWS】Lambda関数削除手順【Lambda】

1). Lambdaを開き、削除対象の関数のラジオボタンを押し、「アクション」から「削除」を選択します。
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3817084/bbcde979-f26b-8bc1-9ea2-b6d17051ee2f.jpeg)

2). 赤枠に「削除」と入力し、「削除」を押します。
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3817084/a399c879-2cb7-4fb7-2863-b1e384e5f296.jpeg)

3). 正常に削除されたことを確認して「閉じる」を押して完了です。
![3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3817084/77b2d509-ea72-ee8a-e93f-7f02bca959c0.jpeg)

元記事を表示

【Lambda】pythonの画像処理ライブラリのPillowをインポートするのに手間取った話

どうもこんにちは。

今回は、AWS Lambdaを使用してPillowをインポートしようとした時につまづいたのでメモしておきます。

# Pillowってなに?

そもそもPillowって何って話ですが、以下の記事にはこのように記載されていました。

> OpenCVのようにコンピュータービジョン系の高度な画像処理(顔検出やオプティカルフローなど)はできないが、リサイズ(拡大・縮小)や回転、トリミング(部分切り出し)のような単純な処理が簡単にできる。

https://note.nkmk.me/python-pillow-basic/

ほうほう…

今回は、base64エンコードされた画像データをバイナリデータに変換し、さらにバイナリデータから画像を読み込んで画像オブジェクトに変換してS3に保存するというなんともめんどくさい処理をする必要があるので、Pillowを使用しています。

“`python
# 画像生成試してます
response = bedrock_runtime.invoke_model(
body=body,
modelId=”amazon.t

元記事を表示

AWS LambdaでHIPHOPを配信するLINEbotをつくる

AWSの勉強のために、AWS Lambda+LINEのMessaging API+spotifyAPIでおすすめのHIPHOPを配信するLINEbotを作成しました。

AWS、Messaging API、spotifyAPIのいずれも触ったことがない状態からのスタートでしたが、形にすることができたので開発の方法を紹介していきたいと思います。

## 1.完成したもの
まずは今回開発したプロダクト(?)を紹介します。
開発したのはLINEの公式アカウントで、何かしらのテキストを送信すると曲のアーティスト名、曲名、spotifyのURLが返ってくるというものです。

送信される曲は、プレイリストの中からランダムで選択されています。

処理の全体の流れは以下のようになります。
1.ユーザーがLINE公式アカウントにメッセージを

元記事を表示

OTHERカテゴリの最新記事