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

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

AWSのチュートリアルでハマった話

## チュートリアルなのにハマる
AWSは一年ほど前に少しだけ勉強したことがあったので、簡単って言ってるlambdaなら楽勝でしょ?
から、数時間ハマったので備忘録として投稿

## 試したチュートリアル
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-example.html

## テストでエラー
チュートリアル通りに進めて行って、「コンソールでテストする」の箇所でエラー。
公式のチュートリアルなんだから手順通りにやっていれば必ず上手くいくはずと思って、何度もチュートリアルを見直して初めからやったりしたがダメ
An error occurred (AccessDenied) when calling the GetObject operation: Access Denied
![スクリーンショット 2022-02-14 20.16.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2528516/b5209839-9305-c

元記事を表示

AWS Lambda (Node.js) 上で discord.js を使おうとしてつまずいた

# 何につまずいたのか
ざっくり言うと、 Node.js で記載した AWS Lambda の関数上で最新版の [discord.js](https://discord.js.org/) を使おうとしたら使えなかった。

# なぜ使えなかったのか
[AWS Lambda で使える Node.js のバージョン](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html)が現状 v14 系までなのに対し、[最新版の discord.js は v16.6.0 以上でしか動かない](https://discord.js.org/#/docs/discord.js/stable/general/welcome)。

# 現状の打開策
どうしても使いたいなら古いバージョンの discord.js ( [12.5.3](https://www.npmjs.com/package/discord.js/v/12.5.3) がギリギリ Node.js v14 系に対応している模様)を使うしかない。ただし、**非推奨に

元記事を表示

AWSサービスを使って Lambda関数 の CI/CD を実現する方法を調査してみた

# はじめに
LambdaのCI/CDを実現したい!と思ったのですが、社内ルール的にAWS SAMを利用した開発はアクセスキーの発行が難しいため選択しにくく、一体どのような手段を取ればLambdaのCI/CDを実現できるか整理してみました。

**調査にかなり苦戦しています。**どうか皆さんのご意見をいただければ幸いです。

Twitter始めました!
[@yomogi_no_mochi](https://twitter.com/yomogi_no_mochi) と申します!よろしくお願いします~

# 事前調査
名前から安易に「AWS CodeDeployがあればデプロイの自動化が出来る!」と思って調査していますが、
基本的にLambdaのデプロイはSAMを利用することを前提としている予感…
(※CodeDeploy Lambdaなどで検索しても[SAMを前提とした記事](https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/tutorial-lambda-sam.html)がヒットしてしまう)

CodeDe

元記事を表示

【AWS】Lambdaの各種設定項目

#はじめに
AWSのさまざまなサービスに触れています。是非[コチラ](https://qiita.com/onishi_820/items/92bc81c450f1c2021b09)から他の記事もご覧ください。
随時更新中ですのでお探しの内容に関する記事がない場合はコメントいただければ優先して記事にしようと思っています。

また、投稿日が古い記事に関しては、現在のマネコンのUIと異なる場合がございます。
内容が異なる場合はコメントいただけると幸いです。

本記事は、Lambdaの各種設定項目についてまとめた記事になります。

#Lambdaとは
AWS公式サイトでは以下のように記述されています。
>Lambda はサーバーをプロビジョニングしたり管理しなくてもコードを実行できるコンピューティングサービスです。Lambda は可用性の高いコンピューティングインフラストラクチャでコードを実行し、コンピューティングリソースの管理をすべて担当します。これにはサーバーおよびオペレーティングシステムのメンテナンス、容量のプロビジョニングおよびオートスケーリング、コードのモニタリングおよびログ記録

元記事を表示

AWS SQS+lambda連携 batchsize, batchwindowについて図解する

batchsize, batchwindowがよく理解できていなかったのでメモ。
「batchsize batchwindow image」とかで調べてもしっくり来るイメージが見つからなかったので、図解してみたいと思います。
# batchsize, batchwindowとは?
**batchsize**: lambdaを実行するための入力 (メッセージ)の単位の数。100にしたら基本は100個単位でlambdaが実行される。
だとしたら **例えばSQSに120個メッセージが来たら残り20個は次の80個が来るまで実行されないのか?と思うが、それだと不便すぎるのでそこを調整するのがbatchwindow。**
**batchwindow**: メッセージの待ち時間。例えば10秒に設定したら、batchsizeより少ないメッセージ数でも強制的にlambdaの入力として送るようにする。
メッセージ元がSQS/SNS/Kinesis/DynamoDB/S3でも共通の考え方のはずです。
# 図解
例えばメッセージがbatchsize=10, batchwindow=10sの状態で流れ込んでき

元記事を表示

Amazon SESを使うことで通常のGmailで独自ドメインを利用する -転送編-

# この記事について

準備編、受信編、送信編の続き
準備編

https://qiita.com/Sand-River/items/4c0dbb16b70e11ec594a

受信編

https://qiita.com/Sand-River/items/4b22f3d0369ab68cfb3f

送信編

https://qiita.com/Sand-River/items/c3f7f231ad501b92fcfc

SESでのメール受信、GmailからSESを通じてのメール送信ができるようになった。あとはSESで受信したメールをGmailに転送してやれば完成のはずだだだ。

(2022/2/13追記)
ここまで進めてきてはみたものの、SESでは転送するメールのFromについても検証済みのドメインの必要があったり(エンベロープではどうにもできなかった。調査不足の可能性はある)、転送するメールのDKIMについても対応が難しくて結局別のメール転送ソリューションに頼ることにした。

送信はGmail → Amazon SES →
受信は→ Cloudflare Email Rout

元記事を表示

DynamoDBトリガーLambdaの「障害時の送信先 (SQS/SNS) 」における出力内容

## 何の記事?
業務でDynamoDB Streamsをトリガー実行とするLambdaを開発することになりました。
DynamoDB Streamsをトリガーにする場合、トリガーには関数でエラーが起きた際の「再試行回数」と「レコードの有効期間」を設定することができます。
同一レコードがこの設定値を超過した場合、該当レコードはスキップされ次の取得可能なレコードに処理が移ります。
したがって、レコードが捨てられる際にリカバリのための「障害時の送信先」としてSQSまたはSNSを設定することができます。
この際、SQSやSNSにはどんな内容が出力されるのか説明した記事が見当たらなかったので、記事に書き起こしておきます。

## 出力内容
SQSでもSNSでも内容は変わらず、次の形式でJsonが出力されます。
`DDBStreamBatchInfo`に今回処理対象のStream情報が記載されており、これらの値を使ってリカバリすることができます。

“`
{
“requestContext”: {
“requestId”: “XXX-XXX-XXX-XXX-XXX”,
“fu

元記事を表示

Goで書かれたLambdaのpanic時、CloudWatchLogsにスタックトレースが出ない

## 現象

Goで書かれたLambdaでpanicが発生した際、CloudWatchLogsにスタックトレースが出ず、下記エラーログに固定されるため、
原因の調査が出来なくて困った。

“`shell
2022/02/01 07:16:00 calling the handler function resulted in a panic, the process should exit
“`

## 原因

[aws-lambda-go](https://github.com/aws/aws-lambda-go)のバージョン、v1.24.0を利用していたが、
上記だと、panic時にログに出力しない実装になっている。

https://github.com/aws/aws-lambda-go/blob/v1.24.0/lambda/invoke_loop.go#L50

## 解決策

[aws-lambda-go](https://github.com/aws/aws-lambda-go)のバージョンをv1.27.1に上げる。

https://github.com/aws

元記事を表示

cloudwatchのアラームをslackに通知

#SNSでトピック作る
#CloudWatchでアラートを設定
説明にアラート出た理由書いとく
通知先を作ったSNSのやつにする
#slackのincomming webhookを発行
#lambdaで関数作成
トリガーを作ったSNSのやつにする
環境変数に以下追加
hookurl #slackのincomming webhookのurl
slackchannel #通知したいslackのチャンネル名
コードに以下入れる
必要であればtextの部分を編集する

‘text’: “ \nアラーム名: %s\nステータス: %s\nアラーム理由: %s\n説明: %s” % (alarm_name, new_state, reason, alarm_description)

“`
import boto3
import json
import logging
import os

from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError

HOOK_UR

元記事を表示

[AWS_33]Lambdaについて

##環境
AWS Lambda
Python 3.7

##AWS Lambdaとは

* サーバレスコンピューティングサービス
サーバなしでコードを実行できる。
通常ならサーバのセットアップなどが必要だが、それらが無くてもプログラムを実行できる。

* FaaSに該当する
IaaSーPaaSー`FaaS`ーSaaS
ファンクションをサービス提供する。

|サービス|ターゲットとなる方式|説明|
|—|—|—|
|PaaS|リクエストリプライ方式|リクエストごとにアプリケーション全体を起動・終了させる|
|FaaS|イベントドリンブン方式|必要なサービス毎に起動・終了させる|
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/758644/9a6d8e74-3de3-f060-40dc-bd0a432b1a1b.png)
画像引用:[IT media:コレ1枚で分かる「サーバレスとFaaS」](https://www.itmedia.co.jp/enterprise/arti

元記事を表示

Github ActionsによるAWS lambdaへのzipデプロイ

Github Actionsを全く使ったことがなかったので、学習がてらlambdaにzipを上げてみました。
なお、私はおひとりさま開発なので、チーム開発で参考にならないところがあったらごめんなさい。
また、現在も試行錯誤中なので、この記事がベストというわけではないです。
開発用ブランチはdevelop、マジ用ブランチはmain、lambdaの関数名は`area_information_city`とします。
roleのarnも適宜読み替えてください。

# Github Actionsとは?
Githubが提供するCI/CDツールです。
利用にお金かかりそう…と思いましたが、[ここ](https://github.co.jp/features/actions)に書いてある通り、パブリックリポジトリでは無料です。

# 準備すること
リポジトリに`.github/workflows`というディレクトリを作り、その中にxxxx.yaml(yml)を作ります。
このyamlファイルは[ワークフローファイルと呼びます](https://docs.github.com/ja/actions/

元記事を表示

firecracker-containerdを試してみた

[firecrackerが1.0になったので試してみた](https://qiita.com/kizitorashiro/items/a3407efc5372b95d19a0)では、firecrackerでゲストOSを動かすところまでやってみました。

今回はfirecracker-containerdを使って、ゲストOS上でコンテナを動作させるところまでやってみたいと思います。

下記の図で、Guest OS & Container workloadと書かれている部分を、Guest 0Sだけではなくて、Container workloadまでちゃんと動かしてみようということになります。

![https://firecracker-microvm.github.io/img/diagram-desktop@3x.png](https://firecracker-microvm.github.io/img/diagram-desktop@3x.png)

containerdはdockerと同じレイヤの高レベルコンテナランタイムです。
firecracker-containerdはco

元記事を表示

初めてのlambda

#概要
簡単なlambda関数を作成し、テストでの引数を渡して関数を実行。
結果の違いを確認してみようと思います。

#手順

1. lambda関数作成
2. ソースコードの挿入
3. テスト
4. テストの実行結果

#詳細内容
ここから上記手順の詳細の設定方法などを記載していきます。

## 1.lambda関数の作成
まずはawsコンソールからlambdaコンソールを表示させ、lamda関数の作成を押します。
![lambda_function.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/621314/094dd743-ca60-0a19-fb7b-71c0ca4dca85.png)

* 一から作成を選択
* 関数名:jyankenで登録(名前は自分で自由に決めてください…)
* ランタイム:今回のlambda関数はpythonで書いております。python3.8でお願いします。
右下の「関数の作成」ボタンを押してください。
*関数の作成に少し時間がかかります。その間に関数について説明して

元記事を表示

面倒な議事録をAWS Transcribeを利用した自動文字起こしの構築

## はじめに
会議って憂鬱ですよね。そして拍車をかけるように『この無秩序な議事録を作成するのかぁ』と思うと憂鬱を通り越して絶望感が湧き出でてきます。
ならば勉強がてらAWS Transcribeをつかって、自動議事録を自分で構築してみようと思い立ち今回のハンズオンに至りました。
あくまで学習用という側面が強く、機密性というものをどこまで担保するかなどは考慮してないので、実際の会議では利用できないと思っています。ただし無料アプリなどを利用して知らないサーバにアップロードするくらいならLambdaを利用したサーバレスの方が安全かな?程度の、人によってはお叱りを受けるような認識で構築をスタートしていきます。

## 参考資料
各種参考にしたURLです
### AWS
[AWSハンズオン-音声を文字起こしする](https://aws.amazon.com/jp/getting-started/hands-on/create-audio-transcript-transcribe/)
[AWSドキュメント-Lambda_チュートリアル: Amazon S3 トリガーを使用して Lambda

元記事を表示

firecrackerが1.0になったので試してみた

AWSのfirecrackerが1.0になったようなので試してみました。

firecrackerはAWSが開発したKVMベースのVMMです。マイクロVMを超高速で起動できる仕組みです。LambdaやFargateの下回りとして使われているとのことです。

Rustによる実装です。

# firecracker

まずはfirecracker単体で使ってみました。

下記のgetstartedの説明通りに進めていけば実行できました。x86_64環境であれば、ビルド済みのバイナリが利用できます。ビルド不要。

https://github.com/firecracker-microvm/firecracker/blob/main/docs/getting-started.md

firecrackerはVMMです。ゲストOSを起動する前に、firecrackerプロセスを起動しておきます。firecrackerプロセスは、socketでAPI呼び出しを待ち受ける状態になります。その後、APIを使って、kernelやrootfsの場所や、仮想CPU数やメモリサイズの指定し、最後にマイクロV

元記事を表示

API GatewayでWebSocketを利用したルームチャットの作成

# はじめに
サービスでチャット機能を提供するケースがあるかと思います。
その時に必要になるのが双方向通信であるWebsocketになります。
今回はAWSで公開されている API Gateway で Websocket API を構築して、トークルーム付きのチャット機能を実装してみます。
構成は API Gateway + Lambda + DynamoDB です。

また、Websocket接続を特定のユーザーだけが使用できるように制限したいケースもあるかと思います。
WebsocketではHTTPプロトコルで使われるCookie認証を使うことが難しいため、
チャット画面専用のトークンを用いて、Lamdbaオーソライザを間に挟んで認証をします。

# 対象者
– チャット機能の導入を検討されている方
– Amazon Web Servicesを使用される方

# 目次
1. [構成](#構成)
2. [設定の流れ](#設定の流れ)
3. [Lamdbaの作成](#lamdbaの作成)
4. [DynamoDBの作成](#dynamodbの作成)
5. [API Gatewayの作成

元記事を表示

LambdaとSESによるドメインでのメール送信

#流れ
1. ドメイン設定
1. SESでドメインメール設定
1. SES制限解除
1. Lambda作成

#ドメイン設定
簡単に説明します。
お名前.comでドメインを購入し、Route53のNSを4つコピーし、お名前.comのネームサーバー設定に貼り付けると設定完了です。

#SESでドメインメール設定
ドメインメール設定をします。

![スクリーンショット 2022-02-05 14.02.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/8aca2e73-2546-5544-ce3a-f3e4bde0aaec.png)

ドメインを入力し、他は、デフォルトのまま、作成します。
![スクリーンショット 2022-02-05 14.03.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/988747/766f92e9-3493-44ff-fc82-a3f30ee2196f.png)

DKIM用

元記事を表示

Lambdaでaws_s3.query_export_to_s3 関数を使用したクエリデータのエクスポート

# はじめに

> Aurora PostgreSQL DB クラスター からデータをクエリし、Amazon S3 バケットに保存されているファイルに直接エクスポートできます。そのために、Aurora PostgreSQL によって提供される aws_s3 PostgreSQL 拡張機能を使用します。

### 参考
https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/AuroraUserGuide/postgresql-s3-export.html

ソースコードのみの紹介となりますが、実行するためには以下の設定が必要です
・postgresにアクセスするためにLambdaをpostgresと同じサブネットに配置するか、通信できるサブネット(SG、ACLの設定)には配置が必要
・VPC内でLambdaを実行するためのロール設定
・postgresからS3へアップロードするためのIAMポリシーの設定

# コード
“`python
import psycopg2

def lambda_handler(event.context)

元記事を表示

Lambda で外部ライブラリ(psycopg2)を使用する

# はじめに
Lambdaでpsycopg2を使うためには、デプロイパッケージを作成しアップロードする必要があります。
(複数のLambda関数で使用する場合など、Lambdaレイヤーを作成し共通部品化する方法もあります。)

### 参考

https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/python-package.html

# デプロイパッケージの作成

“`bash
$ mkdir -p hoge-function/package
$ touch hoge-function/lambda_function.py
$ pip install psycopg2-binary -t ./hoge-function/package/

**フォルダ構成 (zip前)
hoge-function
| lambda_function.py
| package
| psycopg2-binary
| psycopg2-binary-info

$ cd ./hoge-function/package/

# psycopg2

元記事を表示

Firecrackerがバージョン1.0になったので正式版になったRaspberry Pi OS (64-bit)で試してみました。

Firecrackerがバージョン1.0になったとのことです。おめでとうございます。

https://www.publickey1.jp/blog/22/awsvmfirecracker10aws_lambdaaws_fargate.html

同じタイミングでRaspberry Pi OSの64-bit版が正式版になったとのことです。おめでとうございます。

https://www.raspberrypi.com/news/raspberry-pi-os-64-bit/

64-bit版のRaspberry Pi OSを使って、Firecrackerを試してみました。Raspberry Pi 4を使っています。(3ではうまく動かなそうです)

# Raspberry Pi OSの準備

Raspberry Pi Imagerを使ってOSをmicroSDカードに書き込みます。

`Raspberry Pi OS (other)`から`Raspberry Pi OS (64-bit)`が選択できるようになっています。

![image.png](https://qiita-image-

元記事を表示

OTHERカテゴリの最新記事