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

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

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のテンプレートを使用して、環境ごとに設定を出し分けてみたので皆様にも共有いたします。

記述例だけを早く見せろ!という方はこちらから↓
[SAMテンプレート記述例](#samテンプレート記述例)

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

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

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

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

## どんな記事?
Lambda関数のデプロイ環境別(ステージングや本番など)に、異なる設定値を与えたい

元記事を表示

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

元記事を表示

③NiceHashマイニング収益をLambda×LINE Notifyでグラフ化してLINE通知する

#目次
– [1.背景](#1背景)
– [2.構成](#2構成)
– [2-1.Lambdaの構築](#2-1lambdaの構築)
– [2-1-1.Lambda関数の作成](#2-1-1lambda関数の作成)
– [2-1-2.IAMロールの権限付与](#2-1-2iamロールの権限付与)
– [2-1-3.ソースコード](#2-1-3ソースコード)
– [2-1-3-1.Lambda①:nicehash-balance-notification-LINE のソース](#2-1-3-1lambdanicehash-balance-notification-line-のソース)
– [2-1-3-2.Lambda②:nicehash-draw-figure のソース](#2-1-3-2lambdanicehash-draw-figure-のソース)
– [2-1-3-3.コンフィグ](#2-1-3-3コンフィグ)
– [2-1-4.Module組み込み](#2-1-4module組み込み)

元記事を表示

LINEbotのローカル開発環境を構築する。

#記事作成にあたって
LINEbotの開発はhttps前提なので、ローカルでの開発は難しい。けど、ローカルで開発できないと毎回サーバに上げてテストするのもかなりしんどいなぁって思ってました。:cold_sweat:
うーん、どうにかローカルでも開発できないものかねぇ。。と悩んでた所、ngrokのサービスを使えばローカル開発環境でもいけるとの事。やってみた結果、上手くいったので、記事にして共有します。

#アジェンダ
1.ローカル開発環境の仕組み
2.ローカル開発環境の構築
3.LINEbotの設定

#1.ローカル開発環境の仕組み
仕組みは図の通りです!!!えっ、説明が雑すぎるって。。。わかりました。少しだけ、説明します。
![C8BFCB9E-94C8-4A3D-A7C6-AA84BC512762_1_105_c.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/99f184bd-171a-144f-77e8-00f3ce74d834.jpeg)

##ローカル開発環境のシステムフロー

元記事を表示

ServerlessFrameworkでcron実行する(Node.js)

Serverless Frameworkでcron実行するサンプルコードです。
AWS LambdaではJST未対応のようで、-9時間する必要有ります。
時間設定の際にご留意ください。

“`shell:ディレクトリ構成
~/develop/study/serverless/cron $ tree -I node_modules
.
└── aws-node-scheduled-cron
├── handler.js
├── package.json
├── serverless.yml
└── yarn.lock
“`
“`yaml:serverless.yml
service: aws-node-scheduled-cron2

frameworkVersion: ‘2’

provider:
name: aws
runtime: nodejs12.x
lambdaHashingVersion: 20201221

functions:
cronHandler:
handler: handler.run
even

元記事を表示

AWS Amplify サーバーレスウェブアプリケーションを構築するチュートリアルをやってみた

# 初めに

以下のチュートリアルをやってみました。Amplify と CodeCommit の連携、CodeCommit を使用した開発、Cognito を使ったオーソライザー、Lambda プロキシ統合など、普段使わないサービスばかりで勉強になりました。

https://aws.amazon.com/jp/getting-started/hands-on/build-serverless-web-app-lambda-apigateway-s3-dynamodb-cognito/

## 1. CodeCommit にリポジトリを作成する

CodeCommit を使用してローカルで開発を進める場合、GitHub などと同様に認証情報を作成する必要があります。GitHub では 「SSH」 や GitHub アカウントの「ユーザー名・パスワード」を用いますが、CodeCommit では IAM を使用した認証を利用することができます。

> AWS CodeCommit リポジトリへの接続を設定する最も簡単な方法は、IAM コンソールで CodeCommit の Git 認証情報

元記事を表示

AWS Lambda Ruby2.7でヘッドレスChromeを動かす

ネットで調べてもあまり正解に辿り着けなかったので。
書き殴りなので、すみませんが動作保証はしないです。

## やりたいこと

タイトル通りですが、AWS LambdaでWebスクレイピングをしたい。

諸事情あって言語はRuby2.7になります。
RubyでのスクレイピングにはCapybara + selenium-webdriver を利用します。

Lambdaのデプロイには[Serverless Framework](https://www.serverless.com/)を使うので、この記事はServerlessについての知識を事前条件としています。

Capybaraやselenium-webdriverの説明はしないので、ググってくだしあ。

## 注意

Ruby2.5はサポート終了が宣告されているので今からやるにはRuby2.7一択です。

実は今現在(この記事が公開された日)ネット上に溢れている「Lambda(Ruby)でスクレイピングする」系の記事はほとんどがRuby2.5だったりするので、注意しましょう。

後述しますが、Ruby2.5とRuby2.7ではランタ

元記事を表示

【AWS DVA学習】Amazon KinesisとLambdaを使用するチュートリアルをやってみた

# はじめに

AWS DVA取得のためのアウトプットが目的です。

# 対象チュートリアル

公式ドキュメントの`チュートリアル: Amazon Kinesis で AWS Lambda を使用する`

https://docs.aws.amazon.com/lambda/latest/dg/with-kinesis-example.html

# やってみた

チュートリアルがCLIで書かれていたので、最後までコンソールではなくCLIで実行しています。

AWS CLIのバージョンが2のため、バイナリ関係で追加オプションを記載しています。

“`
# aws –version
aws-cli/2.1.3 Python/3.7.4 Darwin/20.3.0 exe/x86_64
“`

## Lambdaの実行ロール作成

CloudWatch Losgへの書き込み権限と、Kinesisからの読み込み権限を持つIAMロールを作成します。

まず、Lambdaに対して信頼関係のある、IAMロールの信頼ポリシーをJSON形式で作成します。

“`
# vi lambda.jso

元記事を表示

超爆速 LamndaでDenoを動かしてみる

私はLmabdaが大好きだ。
もう全てLambdaで動かせばいいんじゃないかな?(少なくともAPIはAPIGateway + Lambdaで十分だと思ってる。)

それはさておき

そんなLambdaでDenoを爆速で動かす方法をまとめてみた。

# 前提条件

– aws cliが使用できる
– 実行環境はmac

# 1.Layerの登録

## deno-lambda-layer.zipをダウンロード

“`sh
$ curl -OL https://github.com/hayd/deno-lambda/releases/download/1.11.0/deno-lambda-layer.zip
“`

公式サイトより最新のアーカイブファイルをダウンロードすることを推奨

## deno-lambda-layerを登録

“`sh
$ aws lambda publish-layer-version \
–layer-name deno-la

元記事を表示

CloudFormationでLambdaにトリガーを設定するときはLambdaPermissionに注意する

#構成例
例えばこんな感じでEventBridgeルールをトリガーとするEC2の起動停止LambdaをCloudFormationで作成したいことがあります。
![template1-designer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/996764/0a292962-d3c6-e747-7693-11324bd3c1b3.png)

手動で上記の構成のリソースを作成した後、Former2でCloudFormatinテンプレートを出力します。
Lambdaの実行に必要なIAMロールも一緒に作成したいので、Former2で以下のリソースを選択し、出力します。

* IAMポリシー
* IAMロール
* Lambda
* EventBridgeルール

すると以下のようになります。
![template1-designer (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/996764/5420fc30-383

元記事を表示

IAMユーザの認証情報を利用したS3の署名付きURLの発行

S3の署名付きURLを利用するとプライベートなS3コンテンツを
有効期限付きで公開することが可能になります。

S3の署名付きURLを発行する際には、認証情報が必要になりますが
やり方は以下のようにいくつかあります。

> AWS Identity and Access Management (IAM) インスタンスプロファイル: 最大 6 時間有効
> AWS Security Token Service (STS): 最大 36 時間有効 (AWS アカウントユーザーや IAM ユーザーの認証情報など、永続的認証情報を使用して署名した場合)
>IAM ユーザー: 最大 7 日間有効 (AWS 署名バージョン 4 を使用した場合)

引用元:[Amazon S3 バケットの署名付き URL が、指定した有効期限より前に失効するのはなぜでしょうか?](https://aws.amazon.com/jp/premiumsupport/knowledge-center/presigned-url-s3-bucket-expiration/)

今回はS3の署名付きURL発行用のIAMユーザ

元記事を表示

Amazon InspectorのレポートをCognitoで認証したユーザーに表示する仕組みを検証

## 目次
– [はじめに](#はじめに)
– [構成図](#構成図)
– [リソース作成](#リソース作成)
– [InspectorとSNSの設定](#1-inspectorとsnsの設定)
– [Cognito User PoolとHosted UIを利用](#2-cognito-user-poolとhosted-uiを利用)
– [API Gatewayの作成とCognito Authorizerの設定](#3-api-gatewayの作成とcognito-authorizerの設定)
– [作成リソースの動作確認](#作成リソースの動作確認)
– [まとめ](#まとめ)

## はじめに

今回はAmazon Inspectorで評価したレポートをCognitoで認証したユーザーに表示する方法を考えてみました。レポートは元々はコンソールで見れますが、共有機能がないのでその代わりに今回の仕組みを利用できます。

管理コンソールでレポートを発行してそのURLを共有する方法もありますが、URLの有効期限が15分しかないので必要なたびに管理コンソールにアクセス

元記事を表示

Amazon S3にある画像のExif情報の削除&向きを自動調整してアップロードするGoのLambda関数

# 概要
S3に格納されているオブジェクト(JPEG画像)をコピーした際に起動するLambda関数。
Lambda関数の処理としては、コピーした画像を読み込んで向きを自動調整し、Exif情報を削除した上でS3にアップロードしている。

# 環境
go1.16.5を使用。
Lambdaのランタイムは `go1.x` 。
# ソースコード

“`go
package main

import (
“bytes”
“errors”
“io”
“log”
“os”

“github.com/disintegration/imaging”

“github.com/aws/aws-lambda-go/events”
“github.com/aws/aws-lambda-go/lambda”
“github.com/aws/aws-sdk-go/aws”
“github.com/aws/aws-sdk-go/aws/session”
“github.com/aws/aws-sdk-go/service/s3”
“github.com/aws/aws-sdk-go/serv

元記事を表示

OTHERカテゴリの最新記事