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

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

【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/スプレッドシート) ## 概要 今回は API を定期実行して結果を保存する仕組みを構築するセクションとなります。 今回は AWS のサービスを使用します。 Lambda で API を実行する関数を作り、それを Clo

元記事を表示

【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リポジトリでインフラの構成管理とコード管理が完結することがメリットだと思っています。ただ、

元記事を表示

AKIBA.MAD 実践から学ぶ AWS Lambdaのテスト戦略 参加レポート

https://classmethod.connpass.com/event/209967/

かなり遅くなってしまったのですが、今回は2021/4/22に実施されたクラスメソッドさんのLambdaのテストに関するイベントに参加した際のメモを書きました。
メモは当日話を聞きながら残していたのですが、時間が経って記憶が曖昧な部分もありますので、何か間違いがあればご指摘ください。

# クラスメソッドMADとは

Modern Application Developmentチームの略で、最新のアーキテクチャを積極的に活用するサーバレス・コンテナ導入支援チームだそうです。

本イベントはクラスメソッドMADチームを中心に、クラスメソッドでサーバレスシステムを開発してるエンジニアが集まって座談会をしつつ、
参加者のサーバレスやテストに関する利用状況のアンケートを取ったり、質問に答えたりといった内容でした。

アンケートは勉強会の合間合間で取られていたのですが、文章で合間に書くと読みづらくなってしまうので、最後の方にまとめようかなと思います。

# テスト用語の解説

### Mock

テス

元記事を表示

【AWS Lambda×LINE Messaging API】AWS SAMで翻訳アプリを作ろう

## はじめに
皆さん、Lambdaをご存知でしょうか?
Lambdaはサーバーレスアーキテクチャを実現する上で根幹となるサービスです。

### サーバーレスアーキテクチャとは
AWSにおけるサーバーレスとは、**「インスタンスベースの仮想サーバー(EC2など)を使わずにアプリケーションを開発するアーキテクチャ」**を指します。

一般にシステムの運用には、プログラムを動かすためのサーバーが必要です。
そしてそのサーバーは、常に稼働していなければなりません。

しかし開発者がやりたいことは、「サーバーの管理」なのでしょうか?
エンドユーザーに価値を届けることこそが使命なわけです。

ということで、こういうめんどくさい作業から解放してくれるのがサーバーレスアーキテクチャなわけです。

サーバーレスアーキテクチャでよく使われるサービスは以下の通りです。
特に、丸で囲っている3つがよく使われます。

![スクリーンショット 2021-06-26 15.43.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0

元記事を表示

【Node.js, TypeScript】LINE MessagingAPIで作った天気予報アプリをAWS SAMを使ってデプロイしてみる!

先日、Node.jsとTypeScriptで天気予報アプリを作成しました。

https://qiita.com/Ryo9597/items/4c05b8b972ad7efc0c66

完成形としては以下の通りです。
![名称未設定.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/838372/0af0bfce-b695-b341-4e90-aeefde544562.png)

この記事内では、`Glitch`でデプロイをしています。
まぁ無料なわけで色々問題があります。
・プロジェクトは、利用されていないときは5分でスリープ状態になる
・4000件/1hのリクエスト制限がある(Error: 429 too many requests)

ということで、AWSのLambdaを使ってデプロイしました。

https://qiita.com/Ryo9597/items/0f82cddb98227d308a9a

動作を確認するために所々デバッグして進めていきたいですが、
その度S3にアップロードしてそれをLa

元記事を表示

Serverless Framework でじゃんけんのLINEbotを作る(リファクタリング編)

#概要
[一つ前に投稿した記事](https://qiita.com/kouji0705/items/252b8790dfeb148a13c0)のリファクタリング編です。
じゃんけんの勝ち負けを判定するロジックが美しくなかったので、数学的に処理しました。

#アジェンダ
1. 問題の実装
2. 数学的処理
3. リファクタリング

#1. 問題の実装
“`javascript:janken.jsの抜粋
/**
* じゃんけんの勝ち負けを判定します。
* @param {string} userHand – ユーザの出した手
* @param {string} cpHand – コンピュータの出した手
* @return {string} – message 判定結果
*/
//TODO ロジックが美しくない。数学的に処理する方法を後日の記事にする。
function hantei(userHand, cpHand){
let message = ”

if(userHand == ‘グー’){
if(cpHand == ‘グー’){
messa

元記事を表示

Serverless Framework でじゃんけんのLINEbot を作る

#概要
Line bot上でじゃんけんをできるようにしました。早い話が下記動画です。
![RPReplay_Final1627130638.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/1aa05ad6-1360-fb19-f43c-8a8eeda05e05.gif)

#アジェンダ
1. 実装
2. リッチメニューの作成
3. デプロイ・実行
4. 備考

#1. 実装

“`shell:ディレクトリ構成
~/develop/study/linebot $ tree ./jankenbot -I node_modules
./jankenbot
├── janken.js
├── package.json
├── serverless.yml
└── yarn.lock
“`

“`yml:serverless.yml
service: jankenbot

frameworkVersion: ‘2’

provider:
name: aws
runtime: nodej

元記事を表示

AWS SAM 環境別にデプロイ

## はじめに
Lamdaの稼働環境ごとに異なる設定値を与えてデプロイしたくなりました。
AWS-SAMのテンプレートを使用して、環境ごとに設定を出し分けてみたので皆様にも共有いたします。

この記事ではAWS-SAMにフォーカスを当てております。
ただ、AWS-SAM自体がAWS CloudFormationのサービスをベースとしているので、そちらも併せてお調べいただくとより一層AWS-SAMに対して理解が深まると思います。

https://aws.amazon.com/jp/cloudformation/resources/templates/

Lambda歴がまだ浅いので非効率なやり方をしているかもしれません。何かお気づきの点・気になる点ございましたらご指摘いただけると幸いです!

さらに良い方法をご存じの方がおられましたら、教えていただけますと嬉しいです?!!

## どんな記事?
Lambda関数のデプロイ環境別(ステージングや本番など)に、異なる設定値を与えたい場面ってありませんか?この記事では、AWS-SAMのテンプレート(template.yaml)を用いた設定値の

元記事を表示

Alexaをパーソナル英会話講師にしてみる

# はじめに

海外ドラマやYouTubeの英会話チャネルを見ているときに「あっ、この表現かっこいい。覚えよう。」と思ったけれど、数日後には「あれ、何を覚えようとしていたっけ。」となったりしませんか?そんなあなた(自分)のために、覚えたい単語、フレーズをしつこく教えてくれる、あなただけの英会話講師(Parrot Tutor)をAlexaに召喚します。

# Parrot Tutorはどのようなスキル?

“`
Student: “Alexa, talk to parrot tutor.”
Alexa: “Welcome, I can help you remember words or phrases. Please ask me to add what you want to remember.”
Student: “Add a word, righteous.”
Alexa: “Righteous. Is it ok?”
Student: “Yes.”
Alexa: “I remember the word, righteous, which means 正義の.”

元記事を表示

AWS CDKを使ってBoltをLambdaにデプロイする

# この記事はなに?

SlackBotにハロワをさせるだけです?
「既存の記事と多少違う!」という点はPython + CDK + Boltで実装する!という点です。

BoltはSlackの公式ライブラリーで、Slackを使ったアプリが簡単に作れるやつです!
これを使うにはバックエンドのサーバーが必要です。
ここを今回はAPIGateway + Lambdaでやっていきます。
またこのインフラ&アプリはPython + CDKで実装します!

という内容の記事?

# 使ったライブラリー

– [AWS CDK](https://aws.amazon.com/jp/cdk/)
– [awsgi](https://github.com/slank/awsgi)
– [Flask](https://flask.palletsprojects.com/)
– [Bolt](https://github.com/slackapi/bolt-python)

Lambdaで直接Boltは使えないのでFlaskを利用し、
さらにLambdaで直接Flaskは使えないので、awsgiを利用する感

元記事を表示

AWS モダンウェブアプリケーションを構築するチュートリアルをやってみた

# 初めに

以下のチュートリアルをやってみました。このチュートリアルでは S3 を利用した静的ウェブサイトを Fargate や Network Load Balancer、API Gateway 利用して動的ウェブサイトにする過程を学ぶことができました。さらに CI/CD 環境の構築、クリックイベントに対するストリーミング処理の方法も学ぶことができます。このチュートリアルではほとんど CLI、時折 CloudFormation を使用してアプリケーションを構築していきます。

https://aws.amazon.com/jp/getting-started/hands-on/build-modern-app-fargate-lambda-dynamodb-python/

# 1. 静的 Web サイトの作成

開発環境として Cloud9 を用います。リージョンは us-east-1 を選択しました。以下の手順で開発環境を作成します。

開発環境の名前を入力します。

![1.png](https://qiita-image-store.s3.ap-northeast-1.am

元記事を表示

OTHERカテゴリの最新記事