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

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

Lambda PowerToolsとCW Logs Insightsがいいぞ!

## はじめに

この記事は、[ミロゴス Advent Calendar 2022](https://qiita.com/advent-calendar/2022/milogos) 20日目の記事です。

Lambda のログを CloudWatch Logs で見ている。けれども、調査時にログの検索がし辛いと感じたり、そのログからとある値を集計したい要件があるかと思います。
このような場合に対して CW Logs には CW Logs Insights が 用意されています。

本記事では CW Logs Insights を使ったログ検索のクエリの一例を記載します。
また、CW Logs に 構造化ログの形で出力できるPython のライブラリ、aws-lambda-powertools を使うことで CW Logs Insights がどう便利になるのかを紹介します。

対象者としては下記のような方を対象としています。

– Lambda を使ってるが CW Logs の検索に辛さを感じている。
– CW Logs のログから抽出し集計をするスクリプトを作っている。

### C

元記事を表示

lambdaにfontを適用する方法

フォントファイルと以下の設定ファイルをfontsフォルダに入れてzip

“`



/var/task/fonts/
/opt/fonts
/tmp/fonts-cache/


“`

これをlambda layerに登録したあと、使いたい関数にも追加してあげる。

最後にLambdaの環境変数に以下を追加
FONTCONFIG_PATH /opt/fonts

参考は以下。
https://medium.com/creditorwatch/aws-lambda-fonts-libfontconfig-5e837281a4ce

元記事を表示

リゾルバーがLambdaのAppSync(Query編)

# 概要
この記事では、リゾルバーにLambdaを設定したAppSyncのQueryパターンを紹介します。

# 前提
– DynamoDBにテーブルが用意されていること
– AppSyncのスキーマを作成済みであること

# Lambda
まず、AppSyncに紐づけるLambdaを作成します。
ここでは、DynamoDBのデータを取得するコードを使用します。

※ 本来、DynamoDBのデータを取得するだけであれば、マッピングテンプレートで完結します。
  詳しくは、[こちら](https://qiita.com/inoue-mn/items/e8134356c216ed4015d3)を参照ください。

“`python
import boto3
from boto3.dynamodb.conditions import Key, Attr

def lambda_handler(event, context):
id = event[‘id’]

dynamodb = boto3.resource(‘dynamodb’)
table = dyn

元記事を表示

AWSであれこれ試す

# AWSであれこれ試すための参考にしたこと

## URLからメモリに読み込む

https://qiita.com/Kanahiro/items/dd585599f36a77540439

https://atmarkit.itmedia.co.jp/ait/articles/1910/15/news018.html

## URLからメモリに読み込みS3に直接書き込む

いろいろ参考にした。CLI環境でリソースを読み込んで実施。
“`python
url_path = r’https://www.data.jma.go.jp/obd/stats/data/mdrr/snc_rct/alltable/snc00_rct.csv’
response = urllib.request.urlopen(url_path)
data = response.read()

s3 = boto3.resource(‘s3’)
bucket_name = ‘test-bucket’
object_key = ‘putdir/put.csv’

元記事を表示

Slackに「あとで読む」と書いたらリマインドしてくれるbotを作った

![image-20221218094732659.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201348/9343550b-a571-1e35-9b66-bf0bd025a875.png)

# 背景

私は仲間内だけのSlackワークスペースや自分のtimesに「あとでよむ」という言葉と一緒に記事のURLを貼るような使い方をすることがときどきあります。

![image-20221218085949273.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201348/671167d7-24b6-dd7f-2a89-6fb6ea76dda4.png)

「あとでよむ」といいつつもしばらくしたら忘れかねないのでリマインドしてくれるやつがほしいなーと思っていて、Slack botの勉強を兼ねて作ってみました。

# 作ったもの

「あとでよむ」などの特定のワードが入ったメッセージがあると起動します

(:eyes:

元記事を表示

API Gateway+Lambdaでパラメータを受け取ろうとしたがeventがnullだった話

## 概要
API GatewayからLambdaにパラメータを渡す方法を記載

## 困ったこと
Lambdaの方でクエリパラメータを使いたくて色々調べていて「event」から取れるよ!という記事が沢山あったがそもそもeventが空の状態になってしまっていて、積んでしまっていた。。。

## 解決方法
原因はAPI Gatewayの設定にあって、
メソッドを選択して
![スクリーンショット 2022-12-18 9.04.31.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83409/8c1f9464-7591-bb2b-aaf3-3745290a6a28.png)
右の画面にある「**統合リクエスト**」を選択すると
![スクリーンショット 2022-12-18 9.04.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83409/dc38c934-139c-14bb-001e-37e642f98e10.png)

元記事を表示

S3オブジェクトをトリガーにした zip展開するLambda構築ハンズオン

## はじめに
##### 先日他のアカウントから、自分の保有しているS3に対してzipファイルが送られてくる事案がありました。
##### どうせなら受け取った際に『zipを展開出来ないか?』とのことだったので、展開するためのLambdaを構築したので記事として残します。
————

## 構成図
![](https://cloud5.jp/wp-content/uploads/2022/12/スクリーンショット-2022-12-18-9.50.27-640×205.png)

————

## ハンズオン
### 構築の流れ
#### 1.S3作成
#### 2.Lambda作成
#### 3.EventBridge作成
##### 上記の順番で構築を行なっていきます。

##### 最終的には、今回作成したS3にzipファイルを保存すると、EventBridgeで検知して、展開Lambdaでzipファイルの展開を行います。
![](https://cloud5.jp/wp-content/uploads/2022/12/スクリーンショット-2022

元記事を表示

AWS Application Composerを使ってサーバーレスアプリを作ってみた

この記事は、[AWS LambdaとServerless Advent Calendar 2022](https://qiita.com/advent-calendar/2022/lambda) アドベントカレンダーの19日目の記事です。

## はじめに

皆さん、こんにちは。AWSのソリューションアーキテクトの福井です。今年もAWS re:Inventで数多くの新しいサービスとサービスのアップデートが発表されました。本記事では、今回新たに発表された [AWS Application Composer (Preview)](https://aws.amazon.com/jp/application-composer/)を使ってサーバーレスアプリケーションを構築してみましたので、紹介させて頂きます。

## AWS Application Composerとは

[AWS Application Composer](https://aws.amazon.com/jp/application-composer/) は、ビジュアルなエディターを使って様々なAWSのサービスを組み合わせて、サ

元記事を表示

リゾルバーがLambdaのAppSync(Mutation編)

# 概要
この記事では、リゾルバーにLambdaを設定したAppSyncのMutationパターンを紹介します。

# 前提
– DynamoDBにテーブルが用意されていること
– AppSyncのスキーマを作成済みであること

# Lambda
まず、AppSyncに紐づけるLambdaを作成します。
ここでは、DynamoDBのデータを更新するコードを使用します。

※ 本来、DynamoDBのデータを更新するだけであれば、マッピングテンプレートで完結します。
  詳しくは、[こちら](https://qiita.com/inoue-mn/private/6532c55c715f8024a2b4)を参照ください。

“`python
import boto3
from boto3.dynamodb.conditions import Key, Attr

def lambda_handler(event, context):
id = event[‘input’][‘id’]
favorite = event[‘input’][‘favorite’]

元記事を表示

AWSサーバーレス単体テスト実践ができた

## はじめに

[株式会社ACCESS Advent Calendar 2022](https://qiita.com/advent-calendar/2022/access) 17日目の記事です。

入社してから、基本的にはAWSでサーバーレス(APIGateway + Lambda)でのサーバー開発をしてきました。
最近AWS Lambdaとサーバーレス関連のテスト方法を調べていました。ようやく個人的に安心できる単体テスト・結合テストが実践できたと思っています。この辺りをまとめた記事になります。

## 背景

AWS Lambdaのhandlerのテストで、AWSサービス(例えばDynamoDB)との連携部分をモックして単体テストを実装していました。モックすることでhandlerの多くの部分はテストできていると思えていたのですが、モックした部分のコードがテストできていなくて大丈夫かなと思うようになりました。

テストが足りていなくて不安ならテストを追加すればいいので、参考資料のようなテストを書こうと思いましたが、

1. そもそも内容がわからなかった
2. コード例を見つけられ

元記事を表示

AWS SAM CLIを使わずにLambda+Ruby2.7でNokogiriなどのGemを使う方法

## 概要
Lambda+Rubyでgem(Nokogiri)を使おうと思ったところ
“`
cannot load such file — nokogiri/nokogiri
“`
というエラーになってしまい、使えなかったので使えるようにした話

## 前段
調べると、割と`AWS SAM CLI`を使った方法が出てきて手順自体は簡単なのですが何してるかわからん…というふうになってしまったので、今回はそちらを使わない方法にしたいと思います。

## 準備するもの
– Lambdaのソースファイル
– Docker環境

## 手順
### Lambdaで動かすソースコードの準備
自分の使っているコードが有る場合は

https://qiita.com/itaya/items/dbe628b7b8d896eb6c8f#%E6%97%A2%E5%AD%98%E3%81%AE%E9%96%A2%E6%95%B0%E3%81%AE%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88

この記事を参考にエクスポートしてもらうと良い

元記事を表示

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

元記事を表示

AWS SAM CLIを用いて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

元記事を表示

OTHERカテゴリの最新記事