Lambda関連のことを調べてみた2023年01月31日

Lambda関連のことを調べてみた2023年01月31日
目次

Lambda関数からAmazon SQSにデータを送信する時ハマったこと

# はじめに
Lambda関数からAmazon SQSにデータを送信する時、ハマったことがあったので備忘録として残しておく。

# 前提条件
– Lambda関数からAmazon SQSにデータを送信する
– Lambda関数はVPC内のプライベートサブネットに設置している
– Lambda関数のIAMロールはAmazon SQSに対してフルアクセス権限を付与している
– Lambda関数はNode.jsで作成

# 起こったこと
上記前提条件のもとLambda関数を実行するとタイムアウトしてしまった。
そのときのソースと実行結果はこちら
AWS公式サンプルソースのほぼコピペ
https://docs.aws.amazon.com/ja_jp/sdk-for-javascript/v2/developer-guide/sqs-examples-send-receive-messages.html

“`js
var AWS = require(‘aws-sdk’);
AWS.config.update({region: ‘ap-northeast-1’});

var sqs = n

元記事を表示

AWS lambdaでEmacs key bindingを使う

# きっかけ
MacBookでAWS Lambdaでコーディング中

「下の行に移動しよう。`ctrl` + `N`を連打っと。」

(新しいファイルが大量に作成された)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950855/3a93d02b-0e68-2d3b-2c0c-4de1b1ebfd55.png)

「おいいぃぃぃぃい!!!!」

# やったこと
LambdaのPreferenceを起動
– 歯車アイコンをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950855/2be1ced5-f8bf-e699-966c-3512e5ffdbd9.png)

画像のように「Emacs」を選択。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2950855/2e06a2

元記事を表示

【EC2】Lambdaから時刻指定でEC2を自動起動・停止を時刻実現する

# EC2の自動起動・停止を実現したい!

https://qiita.com/YujiHamada3/items/3caccdaded527548432b

上記記事の改良版です。上記記事では自動起動・停止をhour単位でしか指定できず、一日に一度しか指定できませんでした。
それに加えて今回は
– 時刻まで指定できる(10分ごと)
– 複数時刻を指定できる
– 平日指定できる

の機能を追加しました。
今回はLambdaを何度も呼び出したくないので10分ごとにしましたが、Lambdaを毎分呼び出せば、分指定までできるようになります。

# EC2のタグの設定
![スクリーンショット 2023-01-30 16.56.03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/290902/8f66b619-198e-9555-a157-2849073dde15.png)

タグはこの様に設定します。
これだと
平日16時30分に起動して16時40分に停止する。
平日16時50分に起動して17時00分に停止する

元記事を表示

【別アカウントのLambda】を実行可能なLambdaをNode18 + AWS SDK for JavaScript v3で構築してみる

## 先に結論だけ知りたい人のために (クロスアカウントでLambdaからLambdaをコールする方法)

この記事の要点を列挙するよ。

– 実行環境がNode18のLambdaにはAWS SDK for JavaScript v3が最初からインストールされていて便利だよ
– Invoke APIで別アカウントのLambdaをコールするよ
– コールされる対象の【別アカウントのLambda】には、リソースベースのポリシーが必要だよ
– コールする側のLambdaには、アイデンティティベースのポリシーが必要だよ

“`json:コールされる対象の【別アカウントのLambda】に付与するリソースベースのポリシー
{
“Version”: “2012-10-17”,
“Id”: “default”,
“Statement”: [
{
“Sid”: “[任意の名前]”,
“Effect”: “Allow”,
“Principal”: {
“AWS”: “arn:aws:iam::[呼び出す側のAWSアカウントI

元記事を表示

VPCアクセス可能なlambda関数をamplifyで作成する方法 発展版 ~ env毎にVPCを切替可能とする

先に以下の記事を投稿しました

https://qiita.com/kujiraza/items/458629d5a3d210ad45ad

この記事ではamplifyで1つのenvしか用いない前提で記載しています。
本記事ではこの記事(以降元記事と記載します)を発展させて、envを複数用意した場合にenv毎に別のVPCに接続するための手順を記載します。

# やること

[元記事の手順](https://qiita.com/kujiraza/items/458629d5a3d210ad45ad#%E6%89%8B%E9%A0%86)をベースとして、以下の部分を変更してlambdaを作成します。

– セキュリティグループIDとサブネットグループIDをパラメータ化し、値は別ファイルに設定する
– 値の設定先としてenv毎にパラメータを指定できる`amplify/team-provider-info.json`を使用する

# 前提

`amplify add env`により、devに加えてstgを作成済みとします。 これ以外は[元記事の前提](https://qiita.com/ku

元記事を表示

VPCアクセス可能なlambda関数をamplifyで作成する方法

欲しい情報にたどり着くまでに苦労したので残しておきます。

# やること

amplifyで作成したバックエンド用lambda関数に対して、コンソール画面からVPCの設定を変更すると、`amplify push` や `amplify publish`コマンドを実行するタイミングでVPCの設定が消えてしまいます。
そこで本記事では、lambdaのコンソール画面をいじらずにamplifyのみでVPC設定を行い、上記のような場合でも設定が消えないようにするための手順を記載します。

# 前提

– amplifyのバージョン: 10.6.2
– amplifyプロジェクト名: vpctestapp ※作成済み
– 接続先VPCにプライベートサブネット3つとセキュリティグループを1つ作成済み
(パブリックサブネットへの接続は試していません)
– amplifyを実行できるよう設定したcloud9を利用

以上の環境でlambda関数`vpclambda`を新規追加する場合を想定して、手順を記載します。

# 手順

1. 【事前準備】lambdaの新規作成
1. lambdaのテンプレ

元記事を表示

Amazon Timestreamからboto3でデータを取得する

# はじめに
[センサからのデータをAmazon Timestreamに格納した](https://qiita.com/ckw-1227/items/82f3bc0d6c2e689411a5)ので、今度はデータを取り出したい。
データの取得方法をLambdaでpython3.9/boto3を使って確認する。

# Timestreamテーブル内のデータ
Timestreamは各項目(メジャー)ごとに1レコードを使う形で格納される。
今回の例ではセンサの位置情報(lat/lon)、温度(temp)、湿度(humi)が格納されている。時間間隔は基本的に3分毎。
| simId(ディメンション) | timestamp(ディメンション) | measure_name | time | measure_value::double |
|:-:|:-:|:-:|:-:|:-:|
| sim_id | 1674918682708 | lat | 2023-01-28 15:11:24.416000000 | 35.1 |
| sim_id | 1674918682708 | lon

元記事を表示

AWS EventBridge S3にファイルが格納されたことを起点にlambda関数を実行する

# 概要

– S3にファイルがアップロードされたことを起点にlambda関数を実行するためにEventBrigdeで必要な設定をまとめる。

# 情報

– EventBridgeに関しての簡単な情報は下記にまとめてある。

https://qiita.com/miriwo/items/ea12cdba9a1856cf6bd8

# 設定

## S3の設定

1. 新規でバケットを作成し、「look」フォルダを作成する。
1. 当該バケットの「プロパティ」のタブに移動する。
1. 「Amazon EventBridge」の設定部分まで移動し「編集」をクリックする。
1. ラジオボタンでONを選択して「変更の保存」をクリックする。

![test-s3-upload-event-bus_-_S3_bucket.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/d1465f7d-e57d-0e68-84c4-adc3ce204675.png)
![test-s3-upload-event-bu

元記事を表示

AWS SDK V3 のSQS(Simple Queue Service)で、いくつか動作確認した話(AWS SDK V2 → V3 移行Tips)

# はじめに

https://qiita.com/Syoji_Yonemoto/items/09883e57643583ef39af

引き続いて、今度は、SQS(Simple Queue Service)についても確認しました。
やはり初回(Firehose)の運が悪かっただけで、基本は互換できてそうだという感触になりつつありますが、自分のメモも兼ねてるので確認できた範囲をまとめていきます。

# 結論
SQS(Simple Queue Service)に関しては、私が普段使うメソッド群については、問題ありませんでした。

# V2 と同じ使い方で問題なく動作確認できたメソッド

+ sendMessage
+ receiveMessage
+ deleteMessage
+ getQueueAttributes

# 余談(雑多な感想)
受信・送信・削除・状態確認、一通りLambdaからSQSを活用する際に利用するAPIは試しましたが、V2の時と変わらぬ使い方ができて良かったです。

https://qiita.com/Syoji_Yonemoto/items/e619d

元記事を表示

Pythonコードの中に記載されたHTMLテキストをブラウザで表示する(Api Gateway,Lambda)

# 書くきっかけ
Pythonコードの中に直書きしたHTMLを、クライアントからリクエストがあったときにブラウザで表示するコードを書いてみました。
自分の話で恐縮ですが、ちょっとApi GatewayとLambdaのテストをしてみたいと思ったときに、HTMLレスポンスが返せる簡単なLambda関数を用意したくなります。
そういった際に使えるのではと考えました。
# 使うもの
AWSで以下のものを使います。
* Api Gateway
* Lambda (Python 3.9)

# やってみる
## Lambda
以下の設定値でLambda関数を作成しました。ほかはデフォルトの設定値です。
| 項目 |設定値|
|:———–|:———–|
|関数名|htmlResponseFunc|
|ランタイム|Python 3.9|
|ハンドラ|lambda_function.lambda_handler|
|アーキテクチャ|x86_64|

## コード
`string`型でHTMLを記述し、それを`bytes`型に変換するところがポイントだと思います。
“`pyt

元記事を表示

【Python】AWS SAMでLambdaの外部モジュールのバージョンを固定する

# はじめに
外部モジュールを使用するLambdaではモジュールをアップロードする必要があります。
AWS SAMを使うと簡単にソースコードとモジュールを一緒にアップロードする事が可能です。
AWS SAMである関数に久しぶりにdeployを行った時に、モジュールのバージョンを固定する必要がありました。

# やらかし先生
RDSに接続するPythonのLambdaで `pymsql`を使用しています。
RDS接続には関与しない変更を行いデプロイしたところ、RDSへの接続がエラーになりました:scream:

原因としては`pymysql`のバージョンが0.9系から1.0系に変更されていたため、同じ構文では接続が出来なくなっていました。
そのため`pymysql`のバージョンを0.9系に固定する回避策を行いました。

# モジュールのバージョン固定方法
## 結論
**requirements.txt** でバージョンを明記します

“`
例 pymysqlを0.9.3のバージョンを指定したい時
pymysql == 0.9.3
“`

## 記述方法について
上記の指定方法はAW

元記事を表示

[AWS]Lambdaに送られるIot topicのpayloadにtopic名を含める方法

# はじめに
LambdaをトリガーするIot topic ruleのtopic名を取得する必要があったので、そのやり方について調べてみました。

# やりたいこと
Iot topicへのメッセージ発行をトリガーにLambda関数を実行し、そのLambda関数のhandlerのeventに渡されるpayloadに、該当topicのtopic名を含めたい。

図で表すとこのようなイメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2954734/20449b6f-9d7d-a0c5-b74d-38f49e09e4e9.png)

# やり方
結論から言うと、topic ruleのクエリでtopic()関数を使うことで実現可能です。

試しにIot topic ruleを作成し、Lambdaトリガーを設定してみます。
Iot Core管理コンソールを開き、「メッセージのルーティング > ルール」をクリックします。
「ルールを作成」をクリックします。
![image.png](https

元記事を表示

AWS RDSのインスタンス追加時にクラスターのタグを引継ぐ

# TODO
* コンソール上、急ぎリーダーを追加すると、タグ登録漏れに気付かない。
* 別途タグ未登録監視をしているが、できれば監視を減らしたい。

# 対策
* LambdaでRDSのCreateイベントを拾い、タグ登録する

# Lambda
“`python:lambda_handler Python3.9
import json
import boto3
from botocore import response

def lambda_handler(event, context):
tagkey = “project” #必須タグ
dBClusterIdentifier = event[“detail”][“responseElements”][“dBClusterIdentifier”]
dBInstanceArn = event[“detail”][“responseElements”][“dBInstanceArn”]

client = boto3.client(‘rds’)
response = client.de

元記事を表示

AWS Serverless デジタルバッジを取得する② Lambda編

[このデジタルバッジ](https://aws.amazon.com/jp/blogs/news/introducing-new-aws-serverless-digital-learning-badges/)取得のために、AWS Skill Builderの[このコース](https://explore.skillbuilder.aws/learn/lp/1585/serverless-learning-plan-japanese)を学習している記録

自分のスキルレベルは以下。
– SAAは取得
– 4年前ぐらい
– 実務利用なし
– 趣味レベルではあり

# AWS Lambda Foundations (Japanese) 日本語実写版

https://explore.skillbuilder.aws/learn/course/621/play/1727/aws-lambda-foundations-japanese;lp=1585

## アクセス許可の概要

– IAMリソースポリシー・関数ポリシー
– Lambdaにアクセスするための許

元記事を表示

【AWS】Lambda関数のトリガーを同じS3にした時にハマった話

タイトルの通りです。
エラー解消のため、調査したので備忘録となります。

結論
======
– AWS Step Functionsを使う

https://aws.amazon.com/jp/step-functions/

経緯
======
– Lambda関数のトリガーでS3バケットをしていたところ、以下のエラーが表示。
“`
Configuration is ambiguously defined.
Cannot have overlapping suffixes in two rules
if the prefixes are overlapping for the same event type.
“`
Google翻訳の結果
“`
構成の定義があいまいです。
プレフィックスが同じイベントタイプで重複している場合、
2つのルールでサフィックスを重複させることはできません。
“`
つまり、同じ条件のS3トリガーを作成することができない。
この場合、AWS StepFunctionsを使うこととなる。

対処法
======
色々調査した結果、以下の投稿者様の記事

元記事を表示

[React, API] Fetchしたdataをpropsしてuiに出力

# 概要

今回は、以下の投稿で紹介したAPIのresponceをUIに表示させたいと思います。

>タイトル:Reactでaxiosを使用してAPI Gateway連携済みのLambda(Python)からOpenWeatherMap APIをFetchする
https://qiita.com/ayumu__/items/08838b0ee231948fde40
→この投稿ではconsole.logでコンソールにしか表示できていませんでした。

# 目次
– 完成イメージ
– コード

# 完成イメージ
さっそくですが、完成後のイメージはこんな感じです。現在の東京の天気を取得します。
まずは、何もしてない状態のUIです。まだAPIを叩いてないので、”天気が表示されていません”と出ています。
![スクリーンショット 2023-01-22 17.16.10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/754596/4cc6dc48-aa45-c53e-b381-a849b6f0ce16.png)

続い

元記事を表示

APIGateway + Lambda + DynamoDB を利用したサーバレス構築ハンズオン

## はじめに
普段DynamoDBをあまり使用しないので、CFnの練習がてら構築していきたいと思います。
[前回のブログ](https://cloud5.jp/lambda-dynamodb-serverless/)では、CLIからDynamoDBに値を渡していましたが、いっそのことフロント画面から送り保存すれば、より学習が捗るかと思いまして着手してみました。

といってもフロント画面などさっぱりなので、前回に引き続き学習教本として、[AWS Lambda実践ガイド 第2版 著:大澤文孝](https://www.amazon.co.jp/AWS-Lambda%E5%AE%9F%E8%B7%B5%E3%82%AC%E3%82%A4%E3%83%89-%E7%AC%AC2%E7%89%88-impress-gear/dp/4295013307/ref=asc_df_4295013307/?tag=jpgo-22&linkCode=df0&hvadid=553954433678&hvpos=&hvnetw=g&hvrand=2164190274868650654&hvpone=&hvp

元記事を表示

GPT-3.5 × AWS Lambda × Amazon DynamoDB × Amazon API Gatewayを使ったSlackのチャットボットをPythonで実装する

## 概要

Slack上でGPT-3.5を使用することができるBotを実装しました。GPT-3.5は今話題のChat GPTの基となるプロダクトであり、APIを用いて使用することができます。また、APIを使用すればファインチューニングが可能となるため、その強みを活かしたBotを実装しました。([ファインチューニング](https://en.wikipedia.org/wiki/Fine-tuning)とは意図した出力となるように、既存のモデルに追加で学習させ、モデルのパラメータを調整するプロセスのことです。)
![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2611951/01c12f89-7dfb-f6c4-4949-c557335bcfcc.gif)

## 設計

全体の設計は以下の画像の通りです。
![スクリーンショット 2023-01-21 18.31.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.

元記事を表示

ChatGPT の GPT-3 API を使って Slack bot を作ってみた

# 背景
ChatGPT を皆さんは既に活用しているでしょうか。
ChatGPT が利用するAPIと一般公開されている GPT-3 API は異なるものですが、兎に角性能が高いので皆さんにも使って頂きたいという思いで SlackApp で使えるようにしてみました。

# 概要

## 目指すアーキテクチャ
![](https://storage.googleapis.com/zenn-user-upload/795b553f01ad-20230121.png)
⇒ 流れは数字の通りで、登場人物としては以下の4つです。

## Slack(SlackApp)
SlackApp は Event Subscriptions により bot へのメンションイベントをフックして Lambda にコメントを送信します。

## Lambda
Slack コメントを受け取り、最初に GPT-3 API にそのままコメントを送信、そのレスポンスを SlackAPI に送信します。

## OpenAI(GPT-3)
Lambda からコメントを受信し、GPT-3 のエンジンが回答を返します。

##

元記事を表示

C#でラムダ式を理解する

# 1. はじめに
* 見よう見まねで書いているラムダ式を最初から理解したい
* => (ラムダ演算子:ゴーズ・トゥー)の意味を理解したい

# 2. 開発環境
* Visual Studio 2022
* .NET6
* Windows10

# 3. ラムダ式を理解する前に
## 3.1. ラムダ式なし
* この式を徐々にラムダ式に変えていく
“`C#:
var values = new string[] { “A”, “BB”, “CCC”, “DDDDD”, “EEEEE” };

var result = new List();
foreach (var val in values)
{
if (val.Length >= 3)
{
result.Add(val)
}
}

Console.WriteLine(string.Join(“,”, result);
“`

## 3.2. ラムダ式なし:共通関数
* 共通関数を作成する
“`C#:
var result = GetValues(values);
Console.WriteLine(

元記事を表示

OTHERカテゴリの最新記事