Lambda関連のことを調べてみた2022年06月09日

Lambda関連のことを調べてみた2022年06月09日
目次

誰よりも易しくAWS LambdaにHello World!!

# はじめに
WEBアプリ的なのをさっくり作ってみたくなりいろいろ方法調べてたのですが、
サーバ周りのこと全くわからんな…となったので
サーバレスなやつならさっくりいけるんちゃうか!(安直)
と思い、AWSの機能組み合わせればなんかできそう!という感触を得たので
まずはLambda触ってみますという記事です。

本格的なアプリ作りこむ前にいくつか実験したいことがあるの
できたところからちまちま記事にしていけたらと思います。

# AWS Lambdaとは
公式の概要は[こちら](https://aws.amazon.com/jp/lambda/)

私のざっくりとしたイメージは、
AWS他サービスでのイベントなどをトリガとしてなんらかの処理を行うものを
特に実行環境用意することなく用意できちゃう!というものです。
またサポートしている言語としてJava、Go、PowerShell、Node.js、C#、Python、Ruby があり
お好きな言語で書けちゃうというのもありがたポイントな気がします。
公式によると「関数の作成にその他のプログラミング言語を使用できるようにするための R

元記事を表示

lambda から OpenSearch ( ElasticSearch )にqueryする

# はじめに
定期的にOpenSearchからデータ(ドキュメントの件数)を取得し、cloudwatchのカスタムメトリクスとして設定したかったので、lambdaからOpenSearchのデータ取得することを検討しました。curlの実行事例は多くありますが、lambda(python)はあまりなかったのでメモしておきます。

# lambdaの設定
lambdaがOpenSearchにアクセスできる必要があるため、OpenSearchと同じVPCに配置しておきます。また、セキュリティグループを設定します。

# OpenSearchに対してQueryする
pythonで書きました。専用ライブラリなどはなく、普通にjsonでhttpリクエストします。
query条件に応じて、URLとBodyを設定します。curlでリクエストできていれば、同じ内容でリクエストすればOK。

“` py
import json
import boto3
from urllib import request

def lambda_handler(event, context):

#URL

元記事を表示

SQSのキューをトリガーにしてLambdaでメッセージを受信する(Python)

## はじめに
[S3をトリガーにしてLambdaでSQSにメッセージを送信する](https://qiita.com/ybsh2891/items/55a2c95a15234acd64d7)の続きとして、SQSのキューに入ったメッセージをLambdaで取得する方法のメモ。

## 目標
図のように、SQSをトリガーにして、Lambdaを起動させる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1259842/0c31e192-bcc3-6325-7737-c610b4e790ec.png)

## 1. SQSでキューを作成する
### キューの新規作成
キューを新規作成する。詳細は[こちら](https://qiita.com/ybsh2891/items/55a2c95a15234acd64d7#1-sqs%E3%81%A7%E3%82%AD%E3%83%A5%E3%83%BC%E3%82%92%E4%BD%9C%E6%88%90%E3%81%99%E3%82%8B)を参照。

元記事を表示

S3をトリガーにしてLambdaでSQSにメッセージを送信する(Python)

## はじめに
ひとまず、S3に新しいファイルを保存した際にLambdaを起動したり、SQSにメッセージをキューイングしたりしたときの手順。初歩的な部分から書いています。ところどころぼかしあります。
SQSにキューイングして処理する部分については[こちら](https://qiita.com/ybsh2891/items/c137660f72007b73dbe1)。

## 目標
図の通り、S3にcsvファイルが入ったらLambda経由からSQSにメッセージを投げる仕組みを作成する。
![s3tosqs.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1259842/904ab2ec-148b-906a-f3df-d3d47bf61789.jpeg)

## 1. SQSでキューを作成する
### Amazon SQSでキューを作成
「キューを作成」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1

元記事を表示

AIで一問一答を自動生成するAPIを作った話【Creating an AI-powered Q&A API】

# 完成品
![スクリーンショット 2022-06-03 18.42.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2503518/6227f908-5d69-626d-2bbd-5a3e24333225.png)

# 関連記事
[テレワーク孤立を解消する、なんでも相談Botをチャットに入れる方法](https://qiita.com/ssc-yshikeda/items/acae1fa00319ba3c4d97)
同じOpenAIのAPIを使っています。おすすめです。
本記事のタイトルも考えてもらいました。
![スクリーンショット 2022-06-03 19.12.54.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2503518/480d64ba-4acd-c2fa-957b-3c87e7c54565.png)

# 一問一答を自動生成したいという夢
私は一問一答形式の勉強が好きです。
テンポよく学習し、その

元記事を表示

[AWS Lambda] Pythonで外部モジュール(Pillow)を使う

# AWS Lambdaで外部モジュールを追加する方法を情報まとめた
AWS Lambdaだと使えないライブラリ(モジュール)がありますね。追加が必要な場面がありますので外部モジュールの追加についてまとめます。

![amazon_awslambda_logo_icon_167887.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/260345/f2d6c424-010e-6845-9656-63ee0a4e6716.png)

今回LambdaでS3にアップされた画像いじりたいのでで`Pillow`使おうとしました。
モジュールをzipでアップすればいいのは知っていたのでpip installでデータ取得できたらzipにしてOKでしょ!
と思ってテストを実行したら

“`
[ERROR] Runtime.ImportModuleError: Unable to import module ‘lambda_function’: No module named ‘PIL’
“`

とエラー。pip in

元記事を表示

ローカルにてLambda関数を組む二つ方法まとめ(VSCode,Pycharmなど)

方法としては下記の2種類です。

# 1、Dockerを利用してローカルで実行
手順は[この記事](https://qiita.com/zukakosan/items/9c01aba5ff537382c856)の通りですが、実際設定・実行する時は二つ問題が発見しました。
①VSCodeにの`app.py`ファイルには`Run Locally | Debug Locally | Configure`が表示せず、代わりに`AWS: Add Debug Configuration | AWS: Edit Debug Configuration`が表示しました。記事の[ここに書いている内容](https://qiita.com/zukakosan/items/9c01aba5ff537382c856#vscodeでlambdaをローカルテスト)と違います。なんか仕様変更らしいです。
`Add Debug Configuration`或いは`Edit Debug Configuration`をクリックしたら、`launch.json`デバッグ設定を追加しまして、`Edit SAM Debug C

元記事を表示

【boto3】API Gateway経由で一定時間以上起動しているEC2インスタンスを検知し、ユーザーに通知する

# はじめに

ご覧いただきありがとうございます。

業務の中でAmazon SageMakerを利用しているお客様と話すことがあります。
使用するノートブックインスタンスのスペックが高いので、起動し続けるとお金がかかります。

連続稼働時間を検知して自動通知を行えないかと試行錯誤する中で、そもそも普段使用しているEC2インスタンスの連続稼働時間を検知してユーザー通知する方法についても検討を行いました。

Lambdaを使用して「EC2インスタンスが一定時間以上稼働しているか確認して、1時間以上稼働していたらユーザー通知を行う」という検証を行ってみました。

# 概要

(★)がついているセクションは、手を動かして頂く項目です。

1. 今回の構成
2. 下準備(★)
3. EC2の連続稼働時間を検知するには?(★)
4. EC2をSysmtes Managerで扱えるようにする(★)
5. LambdaからEC2の連続稼働時間を取得する(★)
6. 稼働時間が一定時間を超えた場合、SNS通知を管理者に送る(★)
7. API Gatewayを経由した手動実行(★)
8. (おまけ

元記事を表示

平日に起動するLambda関数を作成してみた

## 概要

平日の営業時間は処理を実行したいが、土日祝日は処理を動かしたくないケースがあるかと思います。
そこで平日のみLambdaを実行し、土日祝日はLambdaを実行しないようにする構成をCloudFormationで作成します。

## 今回の構成を作成する前に

まずは、月~金に処理を実行し、土日は処理を実行しない場合の構成をCloudFormationで作成してみます。

### 構成
構成としては以下のようなシンプルな形になります。

![構成図-1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/87924/78cd9af3-d899-dd43-3133-902f7c0122a3.png)

### リソースの作成に使用するファイル
リソースの作成には以下のテンプレートを使用します。

“`template.yaml
AWSTemplateFormatVersion: ‘2010-09-09’
Description: “Periodic Execution Function Templ

元記事を表示

インターネットと通信するLambda関数はプライベートサブネットに配置する必要があるという一見矛盾した話

正確には「VPC内に配置したLabmda関数がインターネットと通信する場合」の話しです。
Lambda関数をVPC内に配置するときはこうしろっていうのは検索すればすぐ出てくるのですが、理由が書かれてない記事が多いので取り上げてみました。

## 背景
Security Hubを導入したところ準拠すべきセキュリティルールの中に「Lambda関数はVPC内に配置せよ」とあったので、適当なVPCの適当なパブリックサブネットに配置した。

## 事象
EC2を自動起動停止させるLambda関数が「Task timed out after XX.XX seconds」で動かなくなった。

## 対応1 (解決せず)
タイムアウトを伸ばしてみた。→解決せず
元々タイムアウト3秒で正常に動いていたが、エラーメッセージがタイムアウトなので30秒まで伸ばしてみたが、それでもタイムアウトする。

## 原因
今回言いたかったのはこれ。
実はLambda関数はパブリックサブネットに配置してもパブリックIPが払い出されないらしい。
AWSのドキュメントに下記の記述があった。

[VPC 内のリソースにアクセス

元記事を表示

lambda_runtimeのレスポンスオブジェクト作成に使えるクレートを作った話

ServerlessFramework のプラグインである [serverless-rust](https://www.serverless.com/plugins/serverless-rust) を使用して、API GatewayとAWS Lambdaを使ったAPIを作成しようとしていた。

Rustでラムダ関数を作成するのに便利なクレートはないだろうか?と調べたところ、[lambda_runtime](https://crates.io/crates/lambda_runtime) なるものを見つけた。
おおこれは便利だ、とサンプルコードをそのまま使用してみた。何かあれば修正してデプロイすれば良いし、無料枠を潰すほど実行することもないだろう。できればデプロイにかかる時間を有料枠で買えればよかったが…

[紆余曲折](https://qiita.com/mwataame/items/5247a1deb98e68561413)あったものの、serverlessコマンドで無事APIを作成することはできたようだ。
試しに実行してみよう。

“`
$ curl https://xx

元記事を表示

今さらRustランタイムを使用してAWS Lambdaで関数を作成してみたのだが…

### はじめに

– 基本的にAWSのラムダはRuby2.7ランタイムでServerlessFrameworkを用いてデプロイしている。
– Rust言語でラムダ関数をデプロイできると聞いていたものの試したことはなく、思い出したのでせっかうだから試してみたら、意外と躓いてしまった。
– 結果的に大した話ではなかったのだが、同じ沼にはまってしまっている人がいないとも限らないので残しておく。

### 実行環境

– Ubuntu20.04 on WSL2
– rustup 1.24.3 (ce5817a94 2021-05-31)
– cargo 1.56.0 (4ed5d137b 2021-10-04)
– serverless@3.4.0
– serverless-rust@0.3.8

# 普通にラムダ関数を作る

### コードの用意

AWSがRust向けのSDKを提供してくれているので、いつもお世話になっているrusotoではなく、lambda_runtimeというクレートを使用する。

“`toml:Cargo.toml
[package]
name = “lambda

元記事を表示

【AWS】関数URLを利用して外部からLambda関数を呼び出す

# 1.はじめに
どうも、ARIの名古屋支社に勤務している愛知県民です♪
(/・ω・)/

2022年4月6日にLambda関数に「関数URL」という機能が追加されたようです。

https://aws.amazon.com/jp/about-aws/whats-new/2022/04/aws-lambda-function-urls-built-in-https-endpoints/

一言でいうと、API Gatewayの設定なしで外部からLambda関数を呼べるみたいです!
そこで今回は**Lambda関数の関数URLの使い方を説明したいと思います♪**
AWSについて勉強中の方の参考になれば幸いです。
(*^^)v

# 2.用語の説明
## 2.1.Lambdaとは
LambdaとはAWSのサービスの1つで、コードを書くだけで即実行ができるサービスのことです。
サーバの設定等が不要なため、便利です。

ただし、15分以上続けて実行することはできないため、
複雑なアプリケーションの場合はEC2やECRでの実行が必要となります。

# 3.前提条件
* Lambda関数が作成済で

元記事を表示

S3トリガのLambdaを作成する際の注意点について

## 事象
今回、AWS S3にファイルがputされたことをトリガに起動するLambdaを作成したのですが、ファイルサイズが大きいファイルを該当のS3バケットにアップロードした際にイベント通知がされずLambdaが起動しないというトラブルがありました。
その原因と対策を共有させて頂きます。

## 原因
そもそもS3には様々なイベント通知のタイプが存在します。

S3トリガのLambdaを作成する場合は、トリガーとしてS3バケットに対してどのようなアクションがあった時に通知を送るかを設定する必要があります。

今回の場合は、S3にファイルが配置(PUT)された時にLambdaを起動させたかったので、以下のPUTのイベントタイプを設定しました。

イベントタイプ:s3:ObjectCreated:Put

AWSのドキュメントを見て頂くと全てのイベント通知のタイプを確認できます。
https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/notification-how-to-event-types-and-destinati

元記事を表示

Lambdaの説明とlambdaのlayersの作り方

## lambdaとは

AWS Lambda は、サーバーレスでイベント駆動型のコンピューティングサービスであり、サーバーのプロビジョニングや管理をすることなく、事実上あらゆるタイプのアプリケーションやバックエンドサービスのコードを実行することができます。インフラストラクチャのプロビジョニングや管理をすることなくコードを実行コードを書いて、.zip ファイルやコンテナイメージとしてアップロードするだけです。

### サーバーレス

サーバーではなくて、その場でコードを実行する環境です、trigger(s3,SQSなど)で実行しても良い、定期実行もCloudwatchイベントからでも出来ます、サーバーと違って使ってる分だけを支払いします。同時実行も1秒で1000件まで出来ますのでインフラが楽です。

### 使い方

Lambdaを作るには割と簡単です!名前と言語とアーキテクチャを選べたらもうコード修正とテストが出来ます。

名前はエンドポイントになりますので気をつけてお名乗りください。

環境としては色々の言語は出来ます。

![Screen Shot 2022-05-27 a

元記事を表示

【AWS CDK】API GatewayからLambdaを通さずに直接DynamoDBにアクセスしGetItemするAPIを作ってみた

DynamoDBから値を取ってきて返すAPIを作成するにあたり、Lambdaを通さずに直接DynamoDBから値を取れることを知ったので試してみました。

## 作るもの
API GatewayからLambdaを通さずにDynamoDBに直接アクセスし、API Gateway + DynamoDBでgetItemするAPIを作成します。
今回は、`GET books/{title}`を叩くと以下のような形でDynamoDBに保存されている値を整形して返却してくれるようなAPIを作成していきます。

“`
{
“title”: “how_to_book”,
“price”: 1000
}
“`

## 構成
シンプルな構成です。
![architecture.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2699394/f6843e74-d9fa-7672-cdd6-c58da1869fb4.png)

## 環境
“`
cdk –version
2.10.0 (build e5b301

元記事を表示

SpringBoot(+MyBatis)を用いてLambda + APIGatewayのAPIを製造する

SpringBootをLambda関数に実装してAPIGatewayでクライアント側から呼び出すAPIを製造する機会があり、何回か障壁にぶち当たったので、簡単な手順や注意点を備忘録としてまとめておくことにしました。
今回はMyBatisをORマッパーとして採用しましたが、JPAなどでも問題なく同様の手順で製造できるかと思われます。
バックエンド中心の話になります。

今回はAWS CodeStarでLambda+SpringBoot環境を自動生成しています。
 参考URL:https://qiita.com/ogu1101/items/b30a5ccbc28085462dff

# pom.xml
Codestarで自動生成されるJavaプロジェクトを使用したため、最初から何点か依存するライブラリの記述は書かれていましたが、私の方で以下を追加しました。

#### SpringBootのバージョンについて
今回自動生成されたプロジェクトのSpringBootのバージョンが2.0.3でしたが、2.3.0までアップグレードできることを確認しました。
2.4.0以上になると、デプロイ時に失敗

元記事を表示

Lambda Node ランタイム v12 → v14 update 備忘録

# はじめに
Lambda Node ランタイム v12が2022/04でサポートが終わるため、v14に更新しないといけないProjectが存在していました。
その際の手順として備忘録を残したいと思います。
ただ、本記事ではv14へ上げるというよりは、ランタイムのバージョンを上げる際にどういうことをやったのかを記載したいと思います。

# 環境
– ローカル環境端末
– macOS Big Sur
– AWS SAM CLI 
– Docker
– Lambda ソース環境
– AWS SAM で構築を実施
– ApiGateway & Lambda(TypeScript)を構築
– TypeScriptのためwebpackで実行ソースを作成(トランスコンパイル)している
– 利用しているnodeModules群はすべて最新のVersionに更新済み

# 手順
私の環境での対応としては以下の流れで実施しました。
1. AWS SAM Template.yamlでNodeRuntimeのVersionを更新
2. AWSアカウントにデプロイを実施
3. AW

元記事を表示

SQS、SNS、SNS+SQSからのイベントを比較してみた

## はじめに
業務でLambdaと組み合わせてSQSやSNSをよく使うのですが、イベントを正しくハンドリングする必要があります。
イベントの構造についてドキュメント等があるかもしれませんが、検証した方が早いと思い、自分で検証環境を作って確認してみました。

## 概要

以下によるイベントの構造をLambdaでログ出力して検証します。

– SQS
– SNS
– SNS + SQS

## 設定

### Lambda

以下のLambdaを作成し、イベントをログ出力します。
“`index.js
exports.handler = async (event) => {
console.log(`event: ${JSON.stringify(event)}`);
const response = {
statusCode: 200,
body: JSON.stringify(‘Hello from Lambda!’),
};
return response;
};
“`

### IAM
LambdaがSQSの

元記事を表示

Lambda 関数で EC2 インスタンス作成時にエンコードされた認証メッセージが出力された時の対処方法

権限が足りないのは明かです。ただ、Action, Resource がわからないので、対応できません。

エンコードされたメッセージをデコードすることにより、対応ができました。

“`
$ aws sts decode-authorization-message –encoded-message
“`

関数を作成した時に作成した Lambda の実行ロールに、最小特権のベストプラクティスに則り、一つ一つ出力されたものを追加していきました。

“`
…(snip)…
“Effect”: “Allow”,
“Action”: [
“ec2:“,
…(snip)…
],
“Resource”: [
“,
“,
“,
…(snip)…
]
“`

なお

元記事を表示

OTHERカテゴリの最新記事