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

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

【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

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

元記事を表示

気になるあの上司は何時まで仕事をしているの?調査しよう。 Part II: データ保存編 (AWS Lambda/CloudWatch)

## 注意

この記事は Slack の在籍状況を DB 等に保存し、そこから勤務時間帯を分析するという企画です。
Slack では 1 つのアカウントで複数のワークスペースを管理することができるため、オンライン状態でも趣味のコミュニティにいた、なんてこともあります。
決して **「Slack がオンライン = 仕事している」ということではない** ので、あくまで参考程度にお願いします。

## 目次

– [Part I: データ取得編 (Slack API)](https://qiita.com/noritakaIzumi/items/15baea8bcda572232d37)
– **Part II: データ保存編 (AWS Lambda/CloudWatch)** <- 今回はここ! - [Part III: データ分析編 (AWS CloudWatch/スプレッドシート)](https://qiita.com/noritakaIzumi/items/5629e6f4e36d718726da) ## 概要 今回は API を定期実行して結果を保存する仕組みを構築するセクショ

元記事を表示

【AWS】EC2を起動&停止&性能変更するdiscord bot

# はじめに

EC2は起動している時間単位で課金されるため、使う・使わないに応じてコマメに起動・停止するのが理想。
AWSコンソールで操作するのは手軽さに欠けるため、誰でも自由に操作できる環境を整備したい。
本ページではdiscordのメンバーが自由にEC2を起動・停止できるようにする他、
インスタンスタイプ(サーバー性能)を変更できるようにするbotを設定する。

サンプルコード↓

https://github.com/uni-ezobafun/ocean_ec2_manager_bot

### 構成図

Herokuで動いているdiscord botから、APIGWを介してLambdaをキックして、EC2を起動・停止する。
![Untitled presentation.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1050582/cf024e69-5abf-92de-d146-50392c874154.png)

### やること

* EC2を起動・停止するLambdaを設置
* EC

元記事を表示

LambdaでAWSAPIがときどきタイムアウトになる原因

#結論
サブネットのACLが原因でした。
ACLのポート制御を1024-65535に設定後、解消されました。

#遭遇した事例
・LambdaからS3へのファイルアップロードが10回に1回くらいエラーになる
・LambdaからCloudwatch metricsへのputが3回に1回くらいエラーになる

#この事象が発生するLambdaの条件
VPCサブネット内に構築しているLambda

#なぜ起こったか
ACLのポート制御の設定範囲がAWSのリソースが使用する一時ポートを許可していなかった。

AWSのリソースは一時ポートを使用しているものがあり、その一時ポートの疎通を許可してあげないといけませんでした。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-network-acls.html#nacl-ephemeral-ports

>
一時ポート
前のセクションでは、ネットワーク ACL の例に 32768~65535 という一時ポートの範囲を使用しています。ただし、使用または通信しているクライアントの種類によっ

元記事を表示

言語はtypescript.CDKでLambda Layers の設定をする

## やりたいこと

 CDK でAPIを作成しており、axiosを使ってAPIを叩けるようにしたい。
ただ axios は lambda の中に用意されていないライブラリなのでインポートする必要がある。

## Lambda layers とは

Lambda で利用するライブラリを保存して利用可能にしてくれる AWS のサービスである。
これを活用することで axios が Lambda でも利用可能になる
他にもaxiosをLambdaで使う方法があるけどこれが便利

## 使い方

まずは Lambda Layer に保存するライブラリの保存箇所を作成する必要があります。
通常利用しているプロジェクトから`layer/nodejs`というディレクトリを作成し、そこにパッケージを一通り定義して保存します。

“`

mkdir layer
cd layer
mkdir nodejs
cd nodejs

“`

`layer/nodejs`に移動したら`yarn init` をしてプロジェクトを作成。そこでライブラリをインストールして保存します。

“`
yarn init

元記事を表示

俺流AWS Lambdaデプロイ+IaCのベストプラクティスを考える

# 概要

Lambdaをコード管理したいのですが、Lambdaのベストプラクティス で良い感じのものがないと思い困り調べてみました。

以下のデプロイ方法がありますが、どれも個人的にはいまいちなため悩んでいました。

– AWS CLIでのデプロイする
– 独自のデプロイツール(Lambdaroll)を使う
– https://tech.toreta.in/entry/2020/12/05/000000
– ServerlessFrameworkを使う
– AWS CDKでデプロイする
– https://zenn.dev/faycute/articles/be5599fc093511

## 課題感

サーバレス関連のツールはどうしても構成管理ツールと紐づいてしまっているのでどうしたものかなぁと思っていました。

例えば、AWS CDKでもServerlessFrameworkでもバックエンドではCloudFormationで動いてしまっています。このようなツールのメリットは1リポジトリでインフラの構成管理とコード管理が完結することがメリットだと思っています。ただ、

元記事を表示

OTHERカテゴリの最新記事