Lambda関連のことを調べてみた2020年03月24日

Lambda関連のことを調べてみた2020年03月24日
目次

AWS Lambda + Python + Slack でサイトの監視・アラート通知

運用中のサイトがたまに落ちていることがあったので、
簡易的にですがサイト監視を用意してみました。
(世の中にはサーバーのメトリクス取得含め手厚い監視サービスが様々ありますが、今回は低コストかつSlackとも簡単に連携できる方法という位置づけで作っています)

## サイトのstatusをチェックしてSlackに通知する
では、サイトチェックをするコードを書いていきます。
おおまかな流れとしては、指定されたURLのHTTP statusをチェックし、200以外のサイトがあれば、Slackに通知するというようになっています。
(逆に問題が無ければ、Slackには何も通知されません。テストの際には404ページのURLなどを含めてあげてください。)
全体は以下のようになります。

“`health_checker.py
# -*- coding: utf-8 -*-
import requests
import json

# 監視したいサイトのURLを配列で指定
urls = [‘https://www.rakuten.co.jp/’]

def post_slack_h(c):

元記事を表示

AWS Lambdaの例外処理の仕方(同期実行・非同期実行・ストリームベース実行)

### 前置き
本記事は、AWS Lambda(以下、Lambda)のコード内で起きた例外処理の仕方を書きます。つまり、以下で紹介するものは、Lambdaの起動には成功しているという前提なので、起動自体に失敗しているちう人は、別の記事を参照してください。

### 概要
Lambdaに限らず、例外処理というのはプログラムにつきものです。何等かの不具合で例外が発生させる場合や、意図して例外を発生させる場合があります。
**Lambdaでも同じように例外処理をするわけですが、Lambdaはイベントトリガーによって例外処理の仕方を変える必要があります!** Lambdaのイベントトリガーについては、以下のようなものがあります。

[参考]
AWS Black Belt の AWS Lambda Part1
https://d1.awsstatic.com/webinars/jp/pdf/services/20190402_AWSBlackbelt_AWSLambda%20Part1%262.pdf

以下で Pythonプログラムを用いて、簡単例外処理の仕方を紹介したいともいます。

#

元記事を表示

Lambda FunctionsをCloudFormationでデプロイするbashスクリプト

Lambda FunctionをCloudFormationでデプロイするときの考え方は、やってみて以下がしっくりきました。

> Lambda関数は別ファイルとして保存し、aws cloudformation packageしてaws cloudformation deployする
> ([CloudFormationでAWS Lambdaを作成・更新する際のベストプラクティス](https://qiita.com/kihoair/items/fe204fc8582946646d07))

実際の実施時には、デプロイ後に不要になるS3バケットに置いたソースコードファイルや、中間ファイル的に作成されるテンプレートファイルなどの削除もしているので、それを含めた手順をメモしておきます。またその手順が繰り返し行っているとちょっと手間に思えてきたので、 bash スクリプトにまとめてしまうことにします。

# AWS CLIでのLambda Functionのデプロイ

AWS CLIでLambda Functionをデプロイする手順を確認しておきます(もしスクリプトが使えればいい、動作は分か

元記事を表示

Serverless Frameworkのlambdaアプリにカスタムドメインを付与する

[前回作成したLaravelのサーバレスアプリ](https://qiita.com/umihico/items/64fcf159f68ebd866170)にカスタムドメインでアクセスできるようにします。
ACMで証明書を取得します。Route53経由の方はDNS経由で簡単に取得できます。サブドメインはワイルドカードで申請するのみです。
**Lambda関数がEdgeの場合は、`us-east-1`(バージニア北部)のACMである必要があります。東京のACMは関係ありません。**

スクリーンショット 2020-03-21 10.54.52.png

発行済になったら`serverless-domain-manager`のインストールします。[a4e6e25d](https://github.com/umihi

元記事を表示

Lambda@Edgeを完全に理解する?‍♀️

# 何者だお前は
2017年7月17日に正式リリースされたサービス。
[Lambda@Edge の一般提供を開始](https://aws.amazon.com/jp/about-aws/whats-new/2017/07/lambda-at-edge-now-generally-available/)

>AWS Lambda にコードをアップロードし、Amazon CloudFront イベント (ビューワーリクエスト、ビューワーレスポンス、オリジンリクエスト、オリジンリクエストなど) によってトリガーされるように設定するだけです。関連するリクエストが CloudFront によって受信されると、ビューワーに近い最適な AWS のロケーションに実行のためルーティングされます。次に、Lambda@Edge はコードを実行し、CloudFront のグローバルなネットワーク間のリクエストのボリュームに応じてスケールします。Lambda@Edge により、コードを実行して各個別のリクエストに基づいてウェブページをカスタマイズし、グローバルに実行されるカスタム認証ロジックを作成して、安全な

元記事を表示

Laravelのサーバレス用ライブラリbrefを使い、lambdaでhello world

プロジェクトを作ってから少し手を加えるだけで、Laravelのサーバレス化ができました。
AWS上のデプロイはServerless Frameworkが全てやってくれます。

[本家のドキュメントはこちら](https://bref.sh/docs/frameworks/laravel.html)
[Githubはこちら](https://github.com/umihico/laravel-demo)

“`bash
composer create-project –prefer-dist laravel/laravel laravel-demo #プロジェクト作成
cd laravel-demo
composer require bref/bref #肝のbrefインストール
“`

以下の編集を加えます。[b508b15](https://github.com/umihico/laravel-demo/commit/b508b15edf5d1f0a0a7b51e2360e4f390da3dac1)

“`diff:.env
– SESSION_DRIVER=file
+

元記事を表示

AppSyncでLambdaを呼び出す

# AppSyncでLambdaを呼び出す

## はじめに
先日「[API Gatewayでリクエストして、Lambdaで処理させて、AppSyncで受け取る](https://qiita.com/w2or3w/items/227465969ecbbef21787#lambda%E3%81%AE%E4%BD%9C%E6%88%90)」という記事を書きました。この記事のあとがきにも書いたのですが、フロントエンドからLambdaを実行させるために何の迷いもなくAPI Gatewayを利用していたのですが、どうやらAppSyncでも出来そうだぞということで。

データソースにDynamoDBを指定しているAppSyncへ、LambdaをデータソースとするIFを追加します。

## スキーマへIFの追加
AppSyncのスキーマに、モザイク処理を実行するためのIFを追加します。
AWSコンソール > AppSync > 目的のAPI > スキーマ
MutationへprocessApplyMosaicという関数、そして入出力用のデータ型を定義します。
入出力用のデータ型はAPI Gatewa

元記事を表示

GPSマルチユニットSORACOM Edition 使ってみて、だいたい1ヶ月経ちました。

ソラコムTシャツ欲しいけど、これじゃ貰えないなーって思っている人です。


[GPSマルチユニットSORACOM Edition 使ってみた(開封の儀)](https://qiita.com/keni_w/items/f8e78812298093aab9b4)の続きです。

GPSマルチユニット SORACOM Edition購入して、約1ヶ月経ちました。
とりあえず行ったことは、**SORACOM Laggon**による可視化、***SORACOM Funk***経由で、AWS LambdaでSlack通知の2つです。

### Lagoonによる可視化
とりあえず、オフィスの気温、湿度の可視化をしてます。
気温と湿度

とりあえず、平日の10時から19時までの15分置きに加速度を除くデータを送信させてます

元記事を表示

API Gateway-lambda DBメンテナンス時はどうする?

下記の構成で、DBサーバをメンテナンスする場合にどうすればよいか?
APIの戻りとしては、エラーではなくメンテナンスのJSONを返却したい。。
--------------------------------
API Gateway → lambda → EC2にインストールした自前のDBサーバ
--------------------------------

##考えたこと
API Gatewayでスケジューラでメンテナンスの期間を設定できたら便利だなーと。
その時間になったら設定したメンテナンス用のJSONが返却される。

とはいえ、今はないのでどうすればよいか?

考えた方法

APIGatewayのリソースポリシーでAPIへのアクセスをすべて遮断。
アクセス拒否時のゲートウェイレスポンスのJSONをメンテナンス用に変更
そして、デプロイ

でその後、メンテナンスを終わらせてから、もとに戻す。

こんなところでしょうかねぇ。

以上です。

元記事を表示

NestJSで特定のサービスのメソッドを直接実行する

NestJSをLambdaでホストしているとき、特定のサービスのメソッドをダイレクトに実行したい場合があります。

例:cronジョブをCloudWatch Event -> Lambdaで実行する

そういう時はこんな感じのhandlerを作ればOKです。

“`typescript
import {
NestFactory
} from ‘@nestjs/core’
import { Handler } from ‘aws-lambda’

// 実行したいサービスのあるモジュール
import {
SiteModule
} from ‘./site.module’

// 実行したいサービス
import {
SiteService
} from ‘./site.service’

export const handler: Handler = async (event) => {
// Create NestJS application
const app = await NestFactory.create(SiteModule)

元記事を表示

AWS Lambdaのカスタムランタイムを開発する際、失敗したこと

# 概要

とある作業にてAWS lambdaで今度はperlを動かすことになりました。
その際、perlのライブラリ`/usr/share/perl5`などが見えなかったり、コマンドが実行できなかったりしたので、いろいろ調べたことをメモしておきます。

~~用意されているランタイム使えば余計な苦労しないのにね~~

# 結論

さっさと結論だけ記載すると、以下の環境のカーネルとlibcなどの基本的なライブラリが乗っているものになります。

– Amazon Linux
– イメージ – amzn-ami-hvm-2018.03.0.20181129-x86_64-gp2
– Linux カーネル – 4.14.154-99.181.amzn1.x86_64
– ami-00a5245b4816c38e6

注意点として、このイメージは、EC2インスタンスを作るときに、クイックスタートとして表示される、Amazon Linuxのイメージとは別物ということです。

– Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Typ

元記事を表示

node.js @line/bot-sdk を使ってAWS lambdaからLINE Messaging APIのpushMessageを使用する時に1時間位右往左往した時の話

https://developers.line.biz/en/reference/messaging-api/#send-push-message
にて

“`
const line = require(‘@line/bot-sdk’);

const client = new line.Client({
channelAccessToken: ‘
});

const message = {
type: ‘text’,
text: ‘Hello World!’
};

client.pushMessage(‘‘, message)
.then(() => {

})
.catch((err) => {
// error handling
});
“`

でいけよ、
みたいに書かれていたので、
自分のパソコンからこれを適宜当てはめたら、
普通にpush出来たので、意気揚々とAWS lambdaで使用したら、
なんかエラー出ていた。

connectionが確立されてないよ、

元記事を表示

Windows10ProでAWS SAMを使ってローカルでHelloWorld(サンプルはnode.js)

# 初めに
Windows10ProでAWS SAMを使ってHelloWorldしようと思ったら意外と大変だったので自分用メモ。
何も入っていない前提ですが、Dockerやnode等が入っている場合は飛ばしてください(特にこだわりがなければこの機会にすべて最新化をおススメします)

#### この記事ですること

– node.jsを使ってローカルでHelloWorldする

#### この記事でしないこと

– AWS上にソースをアップロードする
– node.js以外を使ってHelloWorldする

# 執筆時の各バージョン
#### GitBash
v2.25.1

#### Docker
v2.2.0.4

#### node.js
v12.16.1

#### aws sam
v0.45.0

# 必要なものインストール/設定
### Git for Windowsインストール
[Git for Windows公式](https://gitforwindows.org/)からダウンロードし、インストールする。
(特にチェック付けなくて大丈夫です)

### Dockerの

元記事を表示

[fondesk用bot]SlashCommandで表記ゆれに抗う

# はじめに
皆さんリモートワークしていますか?慣れてきましたか?
[前回の記事](https://qiita.com/myonoym/items/0541c0e74e0006a71870)で弊社が[fondesk](https://www.fondesk.jp/)を導入し、メンションをつけてくれるbotを開発しましたよというお話をしました。(無事にfondeskは正式採用されたようです。)

今回は、メンションをつけるために必要になる、表記ゆれ対策用の辞書を更新するSlash Commandを開発した話です。

# 関連ツール&技術
今回紹介する機能の関連項目です。

– Slack
– AWS
– API Gateway
– Lambda
– S3
– Serverless Framework
– Python3.7

# 事の発端
前回紹介のbotを導入してから、良い感じにメンションがついているのを喜んでいたのですが、(見ないふりをしていた)事態が勃発しました。そう、表記ゆれです。。

田が「た」なのか「だ」なのか、漢字で投稿されるのかカタカナで投稿されるのか等々…少

元記事を表示

Lambdaで使うKinesis Data Streamテストイベントの作成

ちょっとメモ。LambdaでKinesis Data Streamのテストイベントを作るときは、「テストイベントの設定」画面でイベントテンプレートに「Amazon Kinesis Data Stream」を選択する。イベントの内容に、それらしいJSONデータが設定される。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/78c5dd7f-fd5a-09ea-818c-7d44c9d746c6.png)

ここで `data` に収められているのは、デコードすると “Hello, this is a test 123.” となる文字列なのだけど、実際にはテストをする上でここに任意のデータを入れておきたい。その時は、Pythonでは次のようにbase64変換した文字列を生成する。

1. データをJSON文字列などに変換する(`str`型になる)。
2. データをUTF-8に変換する(`bytes`型になる)。
3. データをbase64エンコードする。

例えば、以下のようにす

元記事を表示

Lambdaプロキシ統合でmultipartのフォームデータをパースする

ファイル添付とかmultipartで送信されてくることがあるので、そのパース方法。
busboyというライブラリを次のように使うことで実現可能。

`event`はlambda関数の入力。

“`
if (event.headers[‘content-type’] && (event.headers[‘content-type’] as string).includes(‘multipart/form-data’)) {
console.log(‘IT IS MULTIPART’);
const input: CreateMeProfileInput = {};
const busboy = new Busboy({
headers: event.headers,
defCharset: ‘utf8’
});
return new Promise((resolve, reject) => {
busboy.on(‘file’,

元記事を表示

HTTPクライアントにおけるaspidaという選択

## 概要
– aspidaでaxiosやfetchをラップすると型のサポートが厚くなる
– aspidaを使ったユースケース
– tips等

## 背景
近年のWebアプリケーション・フロントエンド開発において、型の付いた言語(主にTypeScript、場合によってはFlow。今回は前者の話)によってJavaScriptを比較的安全に扱えるような開発を試みるケースが増えていることは皆さんもよくご存知の通りだと思います。
型による安全性向上の他にもVSCode等のエディタ補完機能による開発体験の良さや、仕様のコードへの内包化により、保守性と開発速度の両方を上げることに一役買っており、可能な限りフロントエンドはTypeScriptで書いていきたいという気持ちがあります。

また、フロントエンドにおける役割の1つとしてHTTPメソッドにより、ブラウザでリクエストを生成 -> サーバーからレスポンスを取得 を通してデータのやり取りをすることが多々あります。

この際によく用いられる、PromiseベースのHTTPクライアントのaxiosではどうしても型による恩恵を受けづらいです。
具体的に

元記事を表示

日向坂46齊藤京子のバビ語をノーコードかつサーバレスで google home に喋らせてみた

#はじめに
こんにちは,ぱそきいろ: [@takacpu55](https://twitter.com/takacpu55)と申します.
最近巷でノーコードが流行っているみたいです.
私も流行りに乗ってノーコードのVoiceflowというサービスを使ってgoogle home で開発したので久しぶりに投稿しようと思います.
[ブログ](https://www.takacpu55.xyz/)もやってますので,興味がある方は除いてもらえたらと思います.
「いいね」,ではなく「LGTM」を頂けましたら幸いです.

#作ったもの
バビ語メーカーというアプリを作りました.
google home に日本語を喋りかけると,バビ語に変換して読み上げてくれます.

【Bubble x AWS】Bubble API Connector + AWS Lambda + Amazon API Gatewayで連携

# はじめに
本記事はBubbleとAWSを連携させるために実施した作業内容を記載しています。

具体的には、Bubbleのプラグイン「API Connector」を使ってAWSのAPI Gatewayにリクエストを投げ、API Gatewayに統合されたLambda関数を実行します。

実装した処理の内容は、Bubble上に設置した入力項目の値をLambdaで受け取り、そのまま値を返してBubble上の表示項目に表示させるという簡単なものです。

# AWSの設定

まずはLambda関数の作成です。次の通りに設定して[関数の作成]ボタンをクリックします。

– オプション: 位置から作成
– 関数名: 任意の名前(今回は`test`)
– ランタイム: 使用するプログラムのランタイム(今回は`Node.js 12.x`)

![APIConnect01.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128060/4305ccde-33b8-4f3a-16f1-600c923ce263.png)

元記事を表示

OTHERカテゴリの最新記事