Lambda関連のことを調べてみた2021年08月07日

Lambda関連のことを調べてみた2021年08月07日

ServerlessFrameworkを利用したLambdaでデバッグを実施する。

###記事作成に当たって
最近、Serverless Frameworkを利用してLambdaにNode.jsをデプロイしている。Serverless Frameworkはテンプレートも充実してるし、CI/CDの面でも優れているのでなかなか便利。だけど、デバッグのやり方がわからなくて困っていた。どうにか、簡単にデバッグをできないかなぁと思って、試行錯誤する中でデバッグ環境ができあがったので、記事にして共有します。

###構築時の環境情報
端末:Mac
エディタ:VsCode
node:v14.17.4(versionが古いと)
npm:7.20.5

###パッケージの環境構築

“`:packageのインストール
~/develop/study/serverless $ serverless create -t aws-nodejs-typescript -n debug_lambda -p debug_lambda
Serverless: Generating boilerplate…
Serverless: Generating boilerplate in “/User

元記事を表示

Lamda上のmatplotlibで日本語対応する

  Lambda上でmatplotlibを使ってグラフを作成したいとき、Lambdaには日本語フォントが含まれていないため日本語が豆腐になってしまいます。この記事では、日本語対応するための方法について説明します。

## 前提
matplotlibは別途利用できるようにレイヤーなどで用意する必要があります。

## やり方

1. Lambdaレイヤーに日本語フォント用のレイヤーを登録
2. Lambda関数に日本語フォント用のレイヤーを追加
3. matplotlibでフォント読み込み

## 1.Lambdaレイヤーに日本語フォント用のレイヤーを作成

 日本語フォントなら基本的に何でもOKと思いますが、今回は[IPAexゴシック](https://moji.or.jp/ipafont/ipaex00401/)(ipaexg.ttf)をダウンロードして使いました。
 ダウンロードしたttfファイルを適宜ディレクトリ(例えばfontsなど)に入れてzip圧縮します。
 Lambdaのレイヤーページから「レイヤーの作成」にて作成画面に移動し、アップロードにて先程圧縮したzipファイ

元記事を表示

Serverless Frameworkを使ったLambda開発

以前に[AWS SAMを使ったLambda開発](https://qiita.com/nakahara-d/items/1b861ea61dbbffaf90b8)をしてみましたが、今回はAWS SAMと比較しつつ、Serverless Frameworkを使ったLambda開発を試してみます!

# Serverless Frameworkとは

[Serverless Framework](https://www.serverless.com/)はAWS、Azure、GCPなどマルチクラウドに対応したサーバーレスアプリケーション開発フレームワークです。

オープンソース版とPro版があり、Pro版ではCI/CDやモニタリングの機能が使えますが、今回はオープンソース版を試してみます。

# 準備

## Serverless Frameworkのインストール

Serverless Frameworkをインストールします。
スタンドアロンバイナリとnpmでインストールできるようですが、今回はnpmでインストール。
後述するプラグインでもnpmを使ったりするので、Node.jsの環境は用

元記事を表示

SAMの”実行”ロールに必要なIAMポリシー

# 背景
Github ActionsからSAMを実行するためにIAMを作成しようと思ったが、
最小限のポリシーにするうえで、情報がググってもなかなか出てこなかったので記事化。
(LambdaへのIAMロール付与の記事ばかりが出てくる。。。。)

# 最小限ポリシー

公式の記事があった。
(”Permission” でググるのが正解だったかも。)
https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/sam-permissions.html

そちらに運用上+αして以下に。

* `AutoPublishAlias` に必要だったもの
* “lambda:ListVersionsByFunction”
* “lambda:PublishVersion”
* “lambda:UpdateAlias”
* Layerの更新に必要だったもの
* “lambda:PublishLayerVersion”

“`
{
“Version”:

元記事を表示

GitLFS用のLambdaの.NETCoreをアップデートする

# S3 の GitLFS サーバ の Lambda関数 の .NETcore をアップデートする

## 経緯

AWS の Lambda にて .NETcore2.1 のサポートが 2021/09/20 で終了するとの通知が来たので、
[以前構築したGitLFSサーバのLambda関数](https://qiita.com/c0ba1t_coke/items/94ed3a62ab34078a1f92)をアップデートすることに

– CloudFormationの変更セットを使って、Lambda関数だけアップデートできるか検証する

## 手順

### ファイル準備

新しいyamlファイルと鍵Zipファイルをアップする

“`yaml
SigningLambda:
Type: AWS::Lambda::Function
Properties:
Code:
S3Bucket: !Sub ‘gitlfs-test’
S3Key: Estranged.Lfs.Hosting.Lambda.zip

元記事を表示

直近7日間のAWS利用料金をグラフ化してS3に保存する

# アーキテクチャ
以下のアーキテクチャでAWS利用料金をグラフ化してSlack通知させてみます。

![arch.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/59081/91a0fb55-56a5-397c-129e-5436f4712364.png)

# Lambdaを使ってAWSの料金を取得する
AWSの利用料金はCostExplorerの [get_cost_and_usage()](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ce.html#CostExplorer.Client.get_cost_and_usage) を叩くことで取得することができます。グラフ化するにはpandasとmatplotlibを使います。このときにpandasとmatplotlibはLambdaのレイヤーとして追加します。
ソースコード内の**ファイルアップロード先であるS3バケット名は適宜変更してください

元記事を表示

【AWS】Lambda+SQSでサイロ + プールモデルを実現するためのディスパッチャ構成検討

## きっかけ
– 弊社が過去に開発し、現在も引き続き運用、追加開発をしているクライアントのSaaSがあり、:man_tone1: “特定のユーザが大量にリクエストしたときに他ユーザのリクエスト実行まで時間がかかるので、解消したい”とのリクエストをもらったから。

## 現状分析
– リクエスト受信部分はREST APIで構成、他ユーザのリクエストに処理時間は依存しない
– 実処理部分はリクエスト受信部分と非同期で処理を行っており、実処理が順次実行のため、この部分がボトルネック
– 以下サイトで分類されている分離パターンでは現状は、1. サイロモデル

https://aws.amazon.com/jp/builders-flash/202105/tenant-isolation/

– 特定処理、特定ユーザだけ分離できればいいので、3.サイロ + プールモデルを目指したい

## 検証で目指す構成
– リクエストを受けるSQS→各リクエストを割り当てるDispatcher用Lambda→特定ユーザ用SQS,汎用ユーザ用SQSとそれぞれ実処理Lambdaをつなげる(本記事では実処理L

元記事を表示

Lambda + DenoでClean Architectureを使ってみる〜構成編〜

前回、LambdaでDenoを動かしてみたところ、思ったよりも悪くなく、正式導入を検討する余地があったため、巷で人気(?)のクリーンアーキテクチャで構成してみました。

独自アーキテクチャでの導入も検討しましたが、せっかくなので…

## 成果物

https://github.com/yamachita0109/lambda_deno_clean_architecture

## クリーンアーキテクチャ

![68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f3239333336382f66396633646565302d386561382d386363392d326639622d

元記事を表示

【AWS】S3を利用した Git LFS サーバを作成する【cli版】

# S3をLFSサーバにしてCodeCommitでGitLFSを使えるようにする

## 目標

– gitlfsの基本を学ぶ

– [Amazon S3 に Git LFS サーバを超簡単に立てる](https://qiita.com/kanemu/items/d66bfd174a011d8dffdf)のcli版を作る

## 環境

– AWSアカウント所有済み
– IAMを自由に操れる権限を持っている

## 手順

### AWS-CLI の設定

– codecommit の権限があるIAMユーザのクレデンシャルを登録する

“`
$ aws configure
“`

– 認証情報ヘルパーを設定する

“`
$ git config –global credential.helper ‘!aws codecommit credential-helper $@’
$ git config –global credential.UseHttpPath true

$ cat .gitconfig

[credential]
helper = !

元記事を表示

Laravelでもサーバーレス!brefを使ってLaravelアプリケーションを作成してみた

## はじめに
**Laravel初学者の皆さんは、ポートフォリオを作成した時どこにデプロイしていますか?**
AWSまで勉強して`EC2`にデプロイしている方、`Heroku`にデプロイしている方いろいろいるかと思います。

しかし、それぞれ問題点があると思います。

### EC2の問題点
EC2は、インスタンスベースの仮想サーバーなので、常に稼働させなければならないため課金が発生する。(無料利用枠が、1年間毎月750時間分与えられるので十分かもしれませんが)
設定がめんどい。
下記の記事がWordPressを構築する記事ですがやることがとても多いです。
`CloudFormation`ができるようになればもっと短縮できますがハードルが高いですよね・・

https://qiita.com/Ryo9597/items/6d96ab9fdc1f1dca8838

### Herokuの問題点
無料枠のDBの選択肢が`PostgreSQL`になる。
30分何もアクセスがないとサーバーがスリープモードに入ってしまう。

ということで今回お勧めするのがサーバーレスです。

AWSにおけるサ

元記事を表示

Lambda の同時実行数を awscliで確認

AWSよりLambdaの同時実行数を0に設定していると動作化が変わるので確認するよう通知がきた。
そのため、Lambdaのに設定されている同時実行数を確認するコマンド。

“` bash
for func_name in `aws lambda list-functions | jq -r “.Functions[] | .FunctionName”`; do
echo “${func_name}”;
aws lambda get-function-concurrency –function-name ${func_name};
done;
“`

元記事を表示

Twitterのフリートが廃止されたので普通のツイートをそれっぽくする

#フリートとは?
>Fleetは、Twitterの活用や、Twitterでのコミュニケーションをこれまでにない方法ですぐに行える機能を提供します。Fleetで共有した内容は、24時間が経過すると表示されなくなるため、ふとした思いつきやうつろう気持ちを共有できます。一時的な個人的考えをフォロワーと共有でき、他の一般ユーザーからの反応が伝わることもありません。Fleetの作成者は、自分のFleetをクリックし、下部に表示される既読テキストをタップすると、ツイートを非公開にしているアカウントを含め、誰が自分のFleetを閲覧したかがわかります。

– 24時間が経過すると表示されなくなる
– つまり、24時間に1回まとめて削除すればいい

##フリートの欠点
– コメント機能が無く、DMで通知される
– 絵文字を送っても、DMで通知される
– 普通のツイートと同じく、FavとRTとリプライ機能はやはり欲しい

##ツイートをフリート化するには?
– 「残すツイート」と「消えるツイート」を明確化する
– 残すツイートの条件
– Favがある
– RTがある
– リプライ

元記事を表示

CDKでThe expected type comes from property ‘timeout’ which is declared here on type ‘FunctionProps’が出た

## 問題

CDKでAPIを作成しておりLambdaにtimeoutの設定をしたら下記のようなエラーが表示されビルドできない

“`

The expected type comes from property ‘timeout’ which is declared here on type ‘FunctionProps’

“`

またリファレンスを幾ら見ても使い方に誤りは見受けられなかった。

https://docs.aws.amazon.com/cdk/api/latest/docs/@aws-cdk_aws-lambda.FunctionOptions.html

## 解決策

どうやらライブラリごとのバージョンが微妙に異なっていた模様。
package.jsonのライブラリの @aws-cdk/〇〇 で定義されているもののバージョンをちゃんとstableでリリースされているものに整理して、下記コマンドを実行したところ解決した。

“`sh

//古い node modules を削除
rm -rf node_modules

//新しい node modules

元記事を表示

【AWS】Dockerイメージを使用したLambda + APIGatewayでREST APIを構築

2020年12月から、LambdaはDcokerイメージを使用して作成できるようになりました。
そこで、DcokerイメージからLambdaを作成します。
また、作成したLambdaをもとにAPIGatewayをトリガーとしたREST APIの構築方法を説明します。

![docker_lambda_apigateway_qiita.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1166959/312689bb-ed6a-6934-bfcb-f93ccc01ad50.png)

# ターゲット

– AWSのコンテナ関連サービスについて学びたい
– サーバーレスでAPIを構築したい
– Docker,Lambda,APIGatewayについて学びたい

# 前提条件

– Dcokerを利用する環境がある(Docker Desktopがインストールされている)
– AWSマネジメントコンソール、AWS CLIの両方が利用できる環境がある

# ECRリポジトリの作成

Lambdaを作成するコンテナイメ

元記事を表示

CodeDeployを使ってみた

## 初めに

Lambdaのデプロイが上手くいかないのでQiitaに書きながら頑張ることにした

## 用語

### Blue/Green Deploy

> Blue/Greenデプロイとは?
> 現在稼働している環境と別にもう1つ稼働環境を作成し、ロードバランサー等のルーティングを新環境に向けるデプロイ方法です。
> 常にリクエストを受けている稼働中のサーバを置き換えるよりも安全にデプロイ可能なのがメリットになります。

https://qiita.com/keitakn/items/6abe6c971e4dec3b69ef

### アプリケーション

### デプロイグループ

デプロイのメイン設定となるもの。

### サービスロール

CodeDeployで利用するロールのこと。

### デプロイ設定

色々あるけど、単に利用するだけなら何でも良い気がする。

### リビジョン

デプロイするファイルがある場所だと思う。
S3においていたら、S3のARNを記載する。

### appspec.yml

CodeBuildのBuildspec.ymlのように、Code

元記事を表示

俺のLambdaがこんなに遅いわけがない

API Gateway + Lambda(Node.js) + MySQL(sequelize)の構成で、Lambdaの処理時間が2.5秒とだいぶ遅かったです。
その後色々手を加えて当初の32%の0.8秒にまで抑えることができたので対応内容をシェアします。

## メモリ量調整

定番です。
当初256MBでした。増やせば増やすほど早くなりそうな感じでしたが、コストとの折り合いを見て1024MBに変更しました。

これで平均2.1秒と0.4秒減。

## SSM Parameter Storeへの問い合わせを並列実行

コード内で4回Parameter Storeへ値を取得していたのですが、Promise.allを使って並列で取得するようにしました。
1回の値取得に50ミリ秒程度掛かっていたので、これで平均1.95秒と150ミリ秒減りました。

コードのイメージとしてはこんな感じです。

“`js
const [dbHost, dbName, dbUser, dbPass] = await Promise.all(
[
retrieve

元記事を表示

Lambdaで添付ファイル付きメールを送る

LambdaでNodemailerを使う機会があったのでメモを残します:pencil:

## Nodemailerとは

Node.jsで簡単にメールを送ることができるモジュールです。
公式 https://nodemailer.com/about/
npmのページ https://www.npmjs.com/package/nodemailer

## やりたいこと
S3に置いているPDFファイルを添付したメールを送信する

## 手順
1. メールアドレスの認証
1. 必要な権限を付与
1. ローカルでモジュールを準備
1. Lambdaのコンソール画面でzipをアップロード

#### 1. メールアドレスの認証

サンドボックス解除前のSESは、差出人や宛先に指定するメールアドレスの認証が必要です。

1. SES Homeを開く
1. Email Addresses > Verify a New Email Address
1. メールアドレスを入力
1. 「Amazon Web Services – Email Address Verification Request i

元記事を表示

【Serverless Framework】ローカル環境でAPI Gateway, Lambdaを再現する

# はじめに
APIの開発においてAWSの「API Gateway」と「Lambda」をよく使用されていると思います。
開発する上で、毎回デプロイしてからレスポンスを確認するのは手間がかかり効率的でないということで「Serverless Framework」およびそのプラグインである「serverless offline」を使用してローカルで開発できる環境を作ります。

## Serverless Framework とは
* サーバーレスなアプリケーションを容易に作成、管理、デプロイできるオープンソースなフレームワーク(Node.js製)。
* AWSだけでなく、AzureやGCPなど様々なクラウドサービスに対応している。
* `serverless.yml`に各種設定を定義する。

## serverless offline とは
* Serverless Frameworkで使えるプラグイン
* ローカル環境でAPI Gateway + Lambda の処理を再現してくれる

# 実施内容
本番環境で**API GatewayへのリクエストをトリガーにしてLambdaで定義した関

元記事を表示

【AWS】Lambdaのスロットリング時の挙動確認

## やりたいこと
– S3のファイルPUTをトリガーとしたLambdaでスロットリングエラーが発生した時の挙動の確認
(スロットリングエラーが発生したときのトリガーイベントが消失するのか…)

## Summary
– Lambdaのスロットリングが発生してもS3 イベントは消失せず、一定間隔でリトライされる。(リトライ間隔は徐々に伸び、最大5分)
– リトライされる期間はイベントの最大有効時間の設定で調整(公式開発者ガイドに記載)

## 前提

https://qiita.com/kei1-dev/items/9321668126c9b84b88a0

## 検証手順
1. Lambdaソースコードの修正
1. Lambda同時実行数、タイムアウト期間の設定
1. 動作確認

### 1. Lambdaソースコードの修正
– Lambda内に70秒の待機を追加し、スロットリングが発生しやすくする。

“`javascript:index.js
‘use strict’;

const aws = require(‘aws-sdk’);
const s3 = new aws.S3

元記事を表示

大谷選手がホームランを打ったことをLINE通知してみた。

##はじめに

大谷選手の活躍が目覚ましいですね!!
普段野球はほとんど観ない私ですら、ついついホームランを打ったかどうか、結果が気になってしまいます。

しかし、結果は気になるものの、
・試合日程は把握していない
・そのため、適宜Yahoo!ニュースをチェックして大谷選手がホームランを打っていないかチェックする
という状態であり、段々とチェックするのが面倒になってきてしまいました。
(試合日程を確認すればいいだけなのですが・・・)

そこで、大谷選手がHRを打ったことをLINE通知する仕組みを作ってみました。

↓マーベラス、オオタニサン!!

## 通知内容

通知内容は
・大谷選手がHRを打った旨のメッセージ(1パターンのみ)
・画像
・Yahooの記事
の3点です。

  • OTHERカテゴリの最新記事