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

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

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点です。

LambdaからDynamoDBに接続する。(Node.js)

##概要
LambdaにデプロイしたNode.jsからDynamoDBに接続し、データを取得する。
早い話が下記図を実施します。
![スクリーンショット 2021-07-30 12.31.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/2ccfaa1b-2163-86ba-1131-72b3d480f214.png)

##TBLの準備
下記TBLを用意します。マイグレーション方法は[リンク](https://qiita.com/kouji0705/items/438e808fdb1b872671d8)を参考にしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/de52ecb5-3f2e-93a9-9c69-77aff7f460f8.png)

##ディレクトリ構成
“`shell:ディレクトリ構成
~/develop/study/aws/dynamo2 $ t

元記事を表示

【AWS】S3のPUTイベントをトリガーにLambda(Node.js 14.x)を起動する

## きっかけ
案件でS3ファイルのPUTをトリガーにLambdaを動かして、PUTされたファイルを加工するような処理が必要なため、仕組みの具体的な設定内容の確認をしたかったため。

## やりたいこと概要
![S3_copied.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/479886/af12e225-7fa9-4e37-d54f-64a2678b3fc4.png)

## 前提
– AWS: 社用アカウント利用

## 構築Step
1. S3バケット作成
1. Lambdaの構築、ソース修正
1. Lambdaに紐づくIAMロール修正
1. Originバケット PUTトリガー設定
1. 動作確認

### 1. S3バケット作成
– デフォルト設定のまま、Origin、Copiedバケットを作成
![screencapture-s3-console-aws-amazon-s3-bucket-create-2021-07-31-00_17_50.png](https://qiita-image

元記事を表示

AWS Lambdaのデプロイに必要なIAMポリシーについて

AWSのユーザーには細かなIAMポリシーが設定できるが、細かすぎるために新しくサービスを使用する際に必要なIAMポリシーの確認に時間がかかってしまう。だが時間の短縮のために関連するサービスの全てのIAMポリシーをつけると様々な操作ができてしまい、後々問題が発生する可能性が出てきます。
今回Lambdaをデプロイする作業があり調べましたが、必要なIAMポリシーについてまとめられているページが見つかりませんでした。ということでデプロイする際に使用するユーザーを新設し必要なIAMポリシーを確認したのでまとめました。

# コマンドラインからAWSにLambda関数をデプロイするためのツール
コマンドラインからデプロイするには「AWS SAM CLI」が必要になります。詳細は以下のAWS公式ページを参照してください。

https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-sam-cli-install.html

#デプロイの流れ
コマンドラインからローカ

元記事を表示

OTHERカテゴリの最新記事