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

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

Lambda Node.js 18 でaws-sdkを使おうとして詰まった

:::note info
この記事は[miriwoお一人様 Advent Calendar 2022](https://qiita.com/advent-calendar/2022/miriwo)の17日目の記事です
:::

# 概要

– LambdaのNode.js18にてaws-sdkを使おうとしてかなり詰まったのでまとめておく。

# 謝辞

– 本問題の解決は同プロジェクトの先輩エンジニアさんにご協力いただきました。改めてお礼申し上げます。

# 情報

| 内容 | 情報 |
| — | — |
| ランタイム | Node.js 18.x |
| ハンドラ | index.handler |
| アーキテクチャ | x86_64 |
| 関数の作成 | 一から作成 |

# 問題発生までの経緯

– Lambda関数にブラウザから下記の様にindex.mjsに記載をした。

“`index.mjs
import { AWS } from ‘aws-sdk’;

exports.handler = async (event) =

元記事を表示

AWS Lambdaの15分制約について

:::note
[Supershipグループ Advent Calendar 2022](https://qiita.com/advent-calendar/2022/supership)の17日目の記事になります。
:::

## はじめに

2022年も終わりが近づき、2022年にやったことを振返り反省も踏まえ今回の記事を書かせていただきます。
タイトルにあります通り、AWSのLambdaを利用し定期的に動くバッチ処理を作成したのですが
その際、Lambdaの15分制限に達し実行環境を変えた話をしようと思います。

## Lambda期
### 開発
バッチ処理は至ってシンプルなものでして、APIをからデータを取得してCSVファイルに出力しS3に格納するというものでした。
データ件数もそこまで多くはなく、既存のバッチが動いているサーバも無いためLambdaを選択いたしました。
言語はLambdaと非常に相性がいいPythonを選択いたしました。Pythonを選択した理由としましては[chalice](https://github.com/aws/chalice)が凄く魅力的でこれを

元記事を表示

LambdaでS3の最終更新日時を取得する(Python)

# 概要
S3の最終更新日時を取得するLambdaをPythonで書いてみた記事です。

# 前提条件
– S3が用意されていること
– Lambdaに必要なIAM権限が付与されていること

# 環境
– ランタイム:Python3.9
– リージョン:ap-northeast-1

# コード
“`python
import boto3
from datetime import datetime, timedelta, timezone

s3 = boto3.resource(‘s3’)
s3_bucket =
bucket = s3.Bucket(s3_bucket)

def lambda_handler(event, context):
# 指定のフォルダ配下で調べたい場合はprefixを設定
prefix = ‘/’

# オブジェクトの取得
objs = bucket.meta.client.list

元記事を表示

Lambda+RubyでGemを使う方法

## 概要
LambdaでRubyを使う際にNokogiriなどのGemを使おうとするとエラになってしまうので動かせるようにする

## 環境設定
※こちらはある程度されているものだと仮定します

ここらへんの記事を参考にcliツールなどを入れてください
https://qiita.com/itaya/items/a0f22addaab04456cae4

## AWS側の準備
S3のバケットを用意
![スクリーンショット 2022-12-17 5.21.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83409/ca546b7f-7bf1-d7e7-75f3-21d4a15060da.png)

## 初期設定
プロジェクト名=好きな名前を指定してください
“`sh
sam init –runtime ruby2.7 –name プロジェクト名
“`
下記のように選択肢を迫られるので、1→1→nを選択します
“`sh
Which template source would you li

元記事を表示

AWS Lambdaの忘れそうなところまとめ

# はじめに
こんにちは、山田です。
今回は、AWS Lambdaの個人的に忘れそうなところを記載していきます。
よろしくお願いします。

# Lambda関数の実行環境
LAmbda関数は何かのイベントをトリガーとして実行されます。
イベントが発生すると**Lambdaランタイム**と呼ばれる実行環境が構成された仮想マシンの中にLambda関数がロードされて実行されます。
Lambdaランタイムの正体は、隔離された**Linuxコンテナ環境**になります。
![](https://storage.googleapis.com/zenn-user-upload/5e8800b0d95f-20221216.png)

# Lambdaランタイム環境の取得
Lambda関数の書式は以下の通りになっています。
“`python
def 関数名(event, context):
関数処理
return 戻り値
“`
Lambdaランタイム環境の情報は、**context引数**を通じて取得できます。
取得できる情報は主に以下の通りです。

|プロパティ|詳細|
|—–

元記事を表示

clear-lambda-storage で古いバージョンの Lambda を一括削除する

# clear-lambda-storage について

Lambda 関数は、既存の関数をデプロイするたびに、以前のバージョンを保持します。
そのような時に、古いバージョンの Lambda を一括削除したい場合があります。
![スクリーンショット 2022-12-16 18.28.38.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280929/bb1f8f5e-1503-a526-09b8-f7f61bfa00b8.png)

そんな時、以下の clear-lambda-storage を利用することで一括で削除してくれるようです。

https://github.com/epsagon/clear-lambda-storage

# やってみる

今回は、Cloud9 から実行します。

clone して、フォルダを移動し、必要なライブラリをインストールします。

“`
git clone https://github.com/epsagon/clear-lambda-storage
cd c

元記事を表示

AWS SDK V3 のFirehoseでputRecord出来なかったのを、何とかできた件について(AWS SDK V2 → V3 移行Tips)

# はじめに

AWS SDK V2 で動作していたコードを、ガイドに従って V3 に置き換えても、putRecord(Firehoseへのデータ登録)ができず、エラーで終了してしまう。

# 結論
インターフェースが変わってる(不便になってる!?)
こんな代表的なレベルのメソッドを互換取らずに置き換えるなんて、なんて罠。。。

+ API インターフェース(V3) V3のドキュメント見にくい。。。(個人的感想)

https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/clients/client-firehose/interfaces/_record.html

Uint8Arrayで渡せという事らしい。。。

+ API 仕様(V2)

https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Firehose.html#putRecord-property

V2の頃は、「’STRING_VALUE’ /* Strings will be Base-64 encoded」

元記事を表示

[AWS Lambda / Docker / Python3] AWS Lambdaでdockerイメージを動かそうとして発生したエラーたちの対応

# 概要

serverless frameworkを使って、DockerイメージをAWS Lambdaにデプロイしたところ、いくつものエラーに遭遇したので、その対応をしたお話。

# 今回のディレクトリ構造

“`
root_directory/
 ├ Dockerfile
 ├ src/
 │ └ handlers/
 │   └ filename.py
 └ serverless.yml
“`

# エラーたち

## 1. `Error: Either “handler” or “image” property (not both) needs to be set on function “FuncName”.`

### 1-1. エラー

**handlerかimageのどっちかにしろ**と怒られております: (´ºωº`):

“`bash:エラー発生状況
$ sls deploy

Deploying func-name to stage stg (ap-northeast-1)ap-northeast-1.amazonaws.com/serverless-fu

元記事を表示

TypescriptだけでAWS Lambdaを発火させる

[PONOS Advent Calendar 2022](https://qiita.com/advent-calendar/2022/ponos) の24日目の記事です。
昨日は@bluenova1221さんの[記事]()でした。
# なぜTypescript?
今まで静的型付け言語に慣れていたのもあり、型が指定出来ないことに不満を感じていました。
また関数先に飛んだだけでany型になることが個人的にどうなんだと思いました?
そこでJavascriptのファイルをローカルで作成することなくAWS Lambdaを使用してみようと思いこの記事を書きました。

***
# 動作・開発環境
Windows 11
Powershell 7
Visual Studio Code 1.73.1
Docker Desktop 4.14.1
***

最初に`npm init`まで行います。
※前提としてnpm、dockerはインストールされているものとします。

“`powershell:Powershell 7
C:\Users\username> cd ~
C:\Users\userna

元記事を表示

Lambdaから外部APIへの接続方法(Python)

# 概要
Lambdaから外部のAPIに接続するPythonコードを紹介します。

# 前提条件
– RequestsをLambdaのレイヤーに設定していること
– ダウンロード:https://pypi.org/project/requests/
– レイヤー設定方法:https://qiita.com/t_okkan/items/394a15577bd1aad46ec3
– LambdaのIPが固定化されていること
– 参考:https://qiita.com/Annoske/items/3770c166c7dc5d8d1f24
– 必要なIAM権限が付与されていること

# コード
“`python
import requests
import json

ip = <接続先のアドレス>

def lambda_handler(event, context):
url = “http://{}”.format(ip)
headers = {‘content-type’:

元記事を表示

LambdaでSQLの結果をDatadogにメトリクスとして送信し異常検知を行う

Datadogのアドベントカレンダー書くぞーと思った際に、いいネタ無いかなと振り返ったところ結構前にやったことですが、タイトルの件を思い出したので書いていきます。
シンプルな内容ですが参考になる人がいれば幸いです。
[https://qiita.com/advent-calendar/2022/datadog](https://qiita.com/advent-calendar/2022/datadog)

## Datadogの利用状況

弊社では監視環境にDatadogの以下機能を利用しています
– AWSのメトリクスを連携し監視
– EKS(kubernates)のpod監視(Prometheus / Grafanaから移行)
– Node.jsのアプリケーションに対しAPMで監視
– これはマジで便利
– 全体的にざっくりSLOの導入
– Lambdaから送信したカスタムメトリクスを使った監視 ←今日書くこと

導入してないもの
– ログ監視
– ログが多く費用が高いため見送り
– アプリケーションエラーに関してはSentryを使用しているのでそこまで

元記事を表示

スクショで安心プチハンズオン 〜駆け足でServerless Framework × Lambdaプチハンズオンを雑にまとめてみた〜

## はじめに
ここ最近、AWS周りをコツコツ勉強しております。奥田と申します。

これからAWSを学び始める人やAWSに苦手意識を持っている初学者の人向けに、
ファーストステップとしてのハンズオンとして、手軽に取り組めて且つ便利そうなものはないかなと思い、
今回は『Serverless Framework × Lambdaプチハンズオン』をゆる〜く書いてみることにしました。

取り組みハードルを超下げたかったので、大体5分~30分くらいでできるような感じにまとめました。

※エラー想定など万全の解説文ではないので、必要があればググっていただけると幸いです。?
※暇な時に、随時アップデートしようと考えています。

## このハンズオンでできるようになること
Lambda関数は、マネジメントコンソールでぽちぽち手作業で作成/管理等もできますが、関数が増えてくると手入れが大変ですよね。

![ScreenShot 2022-12-15 9.59.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27487

元記事を表示

DynamoDBエクストリームで動くLambdaの起きがちなエラーの対処

# 概要
この記事では、DynamoDBエクストリームで動くLambdaの起きがちなエラーの対処方法を紹介します。

# エラー
まずはじめに、起こるエラーを紹介します。
“`
[ERROR] KeyError: ‘OldImage’
Traceback (most recent call last):
  File “/var/task/lambda_function.py”, line 7, in lambda_handler
    old = event[‘Records’][0][‘dynamodb’][‘OldImage’]
“`
変更前のデータが取得できないエラーです。

# 設定内容

Lambda関数のコードは下記のとおりです。

“`python:lambda_function.py
import json

def lambda_handler(event, context):
print(event)

new = event[‘Records’][0][‘dynamodb’][‘NewImage’]
old = event

元記事を表示

AWS Comprehend + Lambda + NewRelicで毎日のツイートの感情分析を可視化してみた

## 概要
AWSのComprehendを使って自分のツイートの感情分析を行い、分析結果の数値をNewRelicに送信してダッシュボードを作ります。

## 完成図

こんな感じに毎日のツイートのポジティブ・ネガティブを可視化させます。

![スクリーンショット 2022-12-14 20.32.52.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/689205/52c09bec-0910-a846-a4ea-6161446ecb2c.png)

## 用意するもの

– NewRelicのライセンスキー
– Twitter APIのキー
– Lambda関数

Twitter APIキーの発行やNewRelicの使い方詳細の説明は割愛します。

## Lambdaで関数作成

コードの全体像としてはこんな感じです

“`python
import tweepy
import boto3
import os
import datetime as dt
import json
import reques

元記事を表示

LambdaにRubyのソースファイルをアップロードする方法

## 概要
LambdaでRubyがかけるようになったのですが、画面上のコードをいじるより実際は手元の環境で動かしてそれをデプロイすることのほうが多いと思います。
そこで今回はLambdaに手元のrubyファイルをアップロードする方法を紹介します。
(今回はGemを使わないものを紹介します。Gemを使うものはまた次回記載予定です。)

## 既存の関数のエクスポート
まず、現在のLambda関数を手元の環境に持ってきましょう。
Lambdaの変更したい関数のページに行き、上の方のアクションボタンから「関数のエクスポート」を選択
![スクリーンショット 2022-12-14 23.07.05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83409/6af000af-90ec-442e-961f-31d289f2c526.png)
ダイアログの「デプロイパッケージのダウンロード」を選択
![スクリーンショット 2022-12-14 23.07.13.png](https://qiita-image-sto

元記事を表示

Slack APIでLambda(Node.js)でランダムで絵文字のリアクションをする(reactions.add)

furikaeruという、1日の振り返りを簡単に楽しくできるSlack botを作りました。こちらがその記事です。

https://qiita.com/kakudaisuke/items/18681418cebc3bee93b5

この中で、メッセージに対してLambda(Node.js)を利用して、botで絵文字のリアクションをするという実装をしたのですが、シンプルそうなのにで、あまりサンプルコードにありつけず、ちょいと手こずってしまったのでメモを。

ランタイム: Node.js 14.x

Slack APIの`reactions.add`を使います。
必須パラメータはtoken, channel, name, timestamp。

https://api.slack.com/methods/reactions.add

“`js:index.js
const AWS = require(‘aws-sdk’);

exports.handler = async (event) => {
const eventBody = JSON.parse(event.body);

元記事を表示

[2022年版]Lambda+API GateWayでAPIを爆速構築

## 概要
今までなにかAPIを作るときはレンタルサーバーを借りていたりしたのですが、もう時代はとっくにサーバレスに進んでいるなと思いまして、今更ながらこのような基礎的なことをしてみようと思いました。

## 作るもの
最終的にはタイトルにあるようにLambdaとAPI GateWayを用いてAPIを構築していこうと思います。

## 実践
### Lambda
まず、Lambdaの方で関数を用意します。
下記のLambdaのページから「関数の作成」を選択しまして
![スクリーンショット 2022-12-14 5.15.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83409/89bb8a94-d16a-f858-f149-fa530caafba6.png)
関数名と言語を決めて「関数の作成」を選択します。
自分はRubyが好きなので言語をRubyにしてますがNodeが初期選択されてるので一般的な気がしてます
![スクリーンショット 2022-12-14 5.16.21.png](https://

元記事を表示

社員同士を趣味でマッチング!?社内のコミュニケーション活性化ツールを新卒1年目のチームで開発しました

## はじめに
こんにちは。推薦基盤ブロックの新卒1年目の関口です。
この記事は [ZOZO Advent Calendar 2022](https://qiita.com/advent-calendar/2022/zozo) カレンダーVol.7の14日目の記事です。
先月から社内で利用開始されましたコミュニケーションの活性化を目的とした**社員マッチングツール**について簡単にご紹介します。

## 背景
リモートワークが普及し、社員同士が顔を合わせる機会がなくなってませんか、、、。
働いていくなかで社内の仲間との連携を強くしていくにはコミュニケーションの促進が必要です!でもオンライン上で気軽に社内の人と話せる機会って意外とそんなに多くありませんよね。
そんなこともあり、**社内で他部署や普段関わらない社員との関わりを求める声**が多いです。

そこで社内でコミュニケーション活性化させるため**社員マッチングツール**の開発を新卒1年目のチームで行いました。

## 詳細内容

開発したサービスは、

**共通の興味・関心を持つ社員同士をMLモデルを使ってマッチングします!

元記事を表示

Serverless Framework を用いて Step Functions Distributed Map による Lambda の大規模並列処理を実現する

# Step Functions Distributed Map が発表されましたね!

先日の AWS re:Invent にて、**Step Functions Distributed Map** が発表(GA)されました!
(Distributed Map の公式リリースは以下。日本語でリリース内容を知りたい方は[DevelopersIOによる速報](https://dev.classmethod.jp/articles/new-feature-step-functions-distributed-map-reinvent2022/)を参照)

https://aws.amazon.com/jp/blogs/aws/step-functions-distributed-map-a-serverless-solution-for-large-scale-parallel-data-processing/

上のリンクの通り、公式リリースでは手動でAWSコンソール上から実現する手順が記載されています。
しかしながら、実際に商用で利用する場合には、AWS CDK や Serverles

元記事を表示

LambdaでDynamoDBのトランザクション処理をおこなう(Python)

# 概要
DynamoDBへのトランザクション処理をPythonで書く方法を紹介します。

# 前提条件
– DynamoDBのテーブルが用意されていること

# 環境
– Lambda
– ランタイム:Python3.9
– リージョン:ap-northeast-1

# コード
“`python
import boto3

dynamoDB = boto3.resource(“dynamodb”)
table_name =
table = dynamoDB.Table(table_name)
client = boto3.client(‘dynamodb’, region_name=’ap-northeast-1′)

def lambda_handler(event, context):
id1 = <更新するデータの主キー>
id2 = <更新するデータの主キー>
column1 = <更新する値のカラム名>
column2 = <更新する値のカラム名>
data1 = <更

元記事を表示

OTHERカテゴリの最新記事