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

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

AWS Lambdaを使ってみる① | のび太とジャイアンのあの関係?

はじめてAWS Lambdaを使ってみたので、備忘録もかねて遊んだ内容をここに記します。

AWS Lambdaを使って、あるS3バケットにデータをアップロードすると別のS3バケットにそれをコピーして保存するということを実現したいと思います(バックアップもどきみたいな)

そこで今回はのび太とジャイアンと名付けられた2つのS3バケットを用意して、のび太バケットにデータをアップロードすると、ジャイアンバケットに同じものが保存されるということをやります。

つまり、「オマエノモノハオレノモノ」ということです。

奪っているわけではないので、言わば、まさに、その中で、健全だということを申し上げたいと思っている次第であります。

※Lambdaの実行環境はをNode.js 12.xを使います

## のび太バケットとジャイアンバケットをつくる
S3バケットをつくります
Bucket nameを入れてcreateするだけでOKです(それ以外なにも設定しなくてOK)
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com

元記事を表示

Lambdaでwebhookをとりあえず受け取れているかを確認するための関数を作ってみた

# 動機
先日M5STICKCを使ってLINE Beaconを試してみた際に、
Webhook先を今まで使ったことないGASにしてみたところ、
どこでハマってしまっているのかよくわからない状態になってしまった。

知らない機能同士をまとめてためしたのが原因なので、Webhook先は毎回固定にしておいた方がいいのかもしれない

# 作ってみたもの
ということで、作ってみたのが個人的にWebhook先として汎用的に使える環境。

環境は一番慣れ親しんだものとしてAWSのLambda(とAPI Gateway)とする。

Lambda関数の中身は以下で、POSTで受けてもGETで受けてもログに出力できるようにする。

“`python
import json

def lambda_handler(event, context):
# 引数:eventの内容を表示
print(“Received event: ” + json.dumps(event))
# rawQueryString
rawQueryString = event[‘rawQueryStr

元記事を表示

nuxt-serverlessについて調べてみた

# 背景

nuxtで作ったアプリをAWSにデプロイする方法について調べていたところ、*nuxt-serverless*というものがあることを知ったので、お勉強。

https://github.com/tonyfromundefined/nuxt-serverless

# *nuxt-serverless*

とりあえず、READMEを翻訳。

「サーバーレスフレームワークを使用したAWSサーバーレススタック(Lambda + API Gateway + S3)上のNuxt.jsサーバーレスサーバー側レンダリングスターター」

とのこと。

ざっと中のコードを見た感じ、nuxtプロジェクトのテンプレートになっていて、ここにServerless Frameworkの設定ファイル等があらかじめ配備されている形になっていました。

使い方としては、githubのコードをclone(もしくはダウンロード)してきたものをベースに、*src*の中を編集してnuxtアプリを作成し、*serverless.yml*を編集して自分用のデプロイ設定に変更後、*yarn deploy:???* コマン

元記事を表示

EC2の自動再起動設定を見据えたメトリクスの長期保管システム構築

# 1. きっかけと本記事の概要
担当している案件で障害が発生したが、営業日外では対応が難しい。
しかし放置しておくとユーザー影響など取り返しがつかない被害が・・・

そこで**ある条件をトリガーにEC2インスタンスを自動再起動するような設定をしたい**と思った。
※実際にはサーバーの再起動後にプロセスの自動起動も必要なのだがそこは置いておいて。

**サーバーの自動再起動に妥当な条件を設定するためには、実績としての過去の監視データが必要**だ。
過去のデータがない状態で再起動の条件を設定しても根拠がない。
過去データから条件を検討し、誤作動する可能性や誤作動してしまったユーザー影響との兼ね合いも考えつつ納得のいく設定をしたいところだ。
1年間はほしい。その上で検討したい。

本記事では、以下の要件を満たす監視システムを構築するにあたって収集した情報のまとめ、および実際に構築した記録である。
若干案件に依存した要件になっているが、そこは適宜置き換えることで他のAWSインスタンスの監視や自動再起動設定にも応用が効くだろう。

# 2. システム要件
**前提**

本案件において監視対象

元記事を表示

Lambdaまとめ

# 概要
触る機会があったので、知ったことをまとめていく。

# Lambdaとは
AWSサービスのイベントをトリガーに自身がアップロードしたコードを動作させることができるというサービス

# 料金
料金は月額であり、「lamdaへのリクエスト数」と「lamdaを動かすときに消費したメモリサイズ(時間計算)」で計算される。

料金表はあらかじめ確保するメモリサイズに依存する

# 言語
コーディングできる言語は多岐にわたるが、**「継続的なアクセスがなくCPUもそんなに使わない」のであれば「python」がいい**らしい

# ライブラリ
Python3でAWS環境を操作するには、boto3と呼ばれるライブラリが必要。

# 一時ディレクトリ
/tmpという一時ディレクトリがある。ファイルの受け渡しをしたいときとかに使う。
なお、同じファイル名を使うと、前の実行時のものが残っていてなおかつユーザー名が違っていてパーミッションエラーというのが起こりうるらしいので、毎回使い終わったらファイルを削除するのがいいらしい。

# 環境変数
lamdaに設定できる。
pythonだと、“impo

元記事を表示

LambdaからSlackにメッセージを送る際のソースコードと複数回メッセージを送る際の注意点

AWSのLambda関数から、SlackのIncoming Webhooksでメッセージを送信する機会があり、少々躓いた箇所があったので備忘録として残しておきます。
Lambda関数やIncoming Webhooksは準備できている想定として、これらの作成手順は省略します。

# 環境
– macOS
– AWS Cloud9
– Node.js 12

#実行コード
Lambda関数を1度実行する度に、Slackメッセージを1件だけ送るような場合は、以下のコードで動くと思います。
1度のLambdaで複数回メッセージを送る場合は、注意点があるので後ほど説明します。

“`javascript
const env = process.env
const request = require(‘request’);

exports.handler = function(event, context) {

// リクエスト設定
const options = {
url: env.WEB_HOOK_URL,

元記事を表示

在宅勤務中のランチタイムを IoT でアピールしてみた

# 作った動機

COVID-19 の影響で在宅勤務になった方、多いかと思います。社員間のコミュニケーションのほとんどが Slack になったという方も多いのではないでしょうか。私の場合はかねてより Slack 中心の生活を送っていましたが、最近 Slack 上にオフィスがあるような気持ちが強まりました。

Slack ではできるだけ即レスしたいな、と思う気持ちはある一方で、この情勢ではきちんと休憩をとることも大事だと思い昼休みの時間などは意図的に Slack デトックスをするようにしています。
そんなわけで昼休み中はできるだけ Slack 上のステータスを “lunch” にして「今はちょっとすぐには返せないよ」という意思表示をしていました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125247/aa5a3818-2b49-003d-b3c5-c2966539480d.png)

ただ毎回 Slack の”Set a status” を開くのは少し億劫だったので、何か簡略化する

元記事を表示

未来の観光業をLINEBotで支えたい。

スクリーンショット 2020-05-27 12.47.36.png
#はじめに
緊急事態宣言が解除されましたが、全く同じ生活に戻ることはまずないでしょう。そんな中僕たちが救いたいと思ったのは日本全国にある観光地です。各地の特産品やお土産品は、色々なインターネットサービスを使って格安で在庫処分が行われています。このままではなかなか利益が見込めず、一刻も早く観光客が安心して旅行をできる環境を作らなければいけません。今回作った作品は後ほど紹介するハッカソンで奨励賞をいただいた作品の記録用記事です。開発構成/使用技術などについても少し書いています。
また、未来を見据えた物なので自粛警察はやめてください。
#メンバー
今回は広島県等が主催する[レッドハッカソン2020](https://www.pref.hiroshima.

元記事を表示

AWS ChaliceをPyCharmでローカルデバッグ実行する

# この記事の概要

サーバーレスアーキテクチャーをサポートするフレームワークも色々充実してきていますが、今回は、AWS製のPython専用フレームワークのChaliceを試してみました。単に試すだけですと、正直、Black Belt読みましょう。以上!で終わってしまいます。

従って、今回はローカルでテストしてみることにこだわって、PyCharmでのローカルデバッグの方法を中心に記載します。

# 前提知識

サーバーレスとは?やChaliceとは?というのは、以下のリンクを参照ください。

まずは、公式
https://chalice.readthedocs.io/en/latest/

その他参考にしたサイト
https://www.freecodecamp.org/news/how-to-get-started-with-serverless-architecture/
https://aws.amazon.com/jp/blogs/news/webinar-bb-aws-chalice-2019/
https://aws.amazon.com/jp/builders-flas

元記事を表示

CodePipelineを使ってLambdaに自動デプロイ

# 概要
Lambdaの関数が増えてくると修正のたびにコンソールで修正したり、ローカルのPCで修正したソースをzipに固めてコンソールでアップする作業って結構大変ですよね!!
ってことでCodePipelineを使ってgitにpush(merge)されたタイミングでLmabdaにデプロイしたときの話を書いていきます。

## 処理の流れ
1. Lambdaに関数を登録(Hello World)
2. GithubにLambda用のコードをpush
3. CodePipelineのSourceでソースの取得
4. CodePipelineのBuildでテストの実行など(今回はテストの実行はしない)
5. CodePipelineのDeployでLambdaにデプロイ

## Lambdaに関数を登録
##### LambdaにHello Worldの関数を登録
関数の作成ボタンから関数の作成
スクリーンショット 2020-04-02 9.59.43.pngSansan API + AWSで企業情報のマスターDBを構築する

## 1. 経緯
社内には数多くのシステムがあります。CRM、ERP、経費精算、、、etc…
そして、その各システムには、企業を登録するUIがあり、それぞれのシステムに企業登録を行います。
そこで課題に上がってくることが以下の2点!

#### 社内の課題?
①それぞれのツールに何度も同じような情報を入力しなければならない。
※CRMやERPなど各システムに企業名や担当者など共通する情報を何度も入力。。。

②色々な人が入力するので、console.logからの脱却 – node.jsでデバッグするには(Visual Studio Code編)

## 前回のおはなし
若き開発者ヒロロはNode.jsでバックエンド開発を任されたがデバッグ方法がわからず、苦戦。
自力で調査しChrome DevToolでデバッグする方法を見つけ出し、なんとか`console.log`地獄は免れた。
しかし、普段利用しているVSCodeのデバッグツールを活用してより快適なデバッグ環境を作ろうと決意する。

前回の詳細**「console.logからの脱却 – node.jsでデバッグするには(Chrome DevTool編)」**は[こちら](https://qiita.com/Hiroro0970/items/d48a865e8ba949bb666f)

## VSCodeでのデバッグ環境構築
公式ドキュメント(https://code.visualstudio.com/docs/editor/debugging) によればVSCodeでデバッグを有効にするにはあらかじめ設定ファイルに情報を記載する必要があるそうです。

VSCodeを起動してデバッグメニューを開き、「create a launch.json file.」をクリックします。
その

aws-sdkでSTSを利用してDynamoDBにputItemする時の注意点

# はじめに
Lambdaを使って別アカウントのDynamoDBにputItemする際にハマったことをメモ。

DynamoDBにputItemするのは初めてだったので、
事前に同一アカウントのDynamoDBにputItemをした。

# やったこと
– Lambdaから同一アカウントのDynamoDBにputItem
– LambdaからSTSを使って別アカウントのDynamoDBにputItem

# Lambdaから同一アカウントのDynamoDBにputItem

[AWS.DynamoDB](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#putItem-property)クラスを使用

“`index.js
const AWS = require(‘aws-sdk’);

exports.handler = async (event, context) => {
const dynamodb new AWS.DynamoDB()

cons

元記事を表示

Lambda@EdgeのテストをJestで書く

# 概要

Lambda@Edge の単体テストを [Jest](https://jestjs.io/ja/) で書いたときのメモ。今回書いたのは Lambda@Edge だけど、Lambda でも基本的には同じはず。Jest はシンプルで良いですね。

# 導入方法

導入したいディレクトリを作成して、そこで以下のコマンドを入力していく。Jest の導入はすごく簡単。

* `npm init`
* npm を初期化する
* インタラクティブに設定項目を聞かれるので、お好みで設定
* `test command` だけ `jest` と入力する
* `npm install -D jest`
* jest をインストールする

# テスト対象ファイル

今回テストするファイルはこちら。Lambda@Edge のリクエストオリジンで動作させるような処理。

“`javascript:main.js
“use strict”;

exports.handler = (event, context, callback) => {
const reque

元記事を表示

Lambda x Amazon SNSで、AWSの請求額を毎日メールで通知する

#はじめに
CloudWatchで請求アラートを設定する事はできますが、超心配性な自分としては、月初~前日までの請求額を毎日メールで確認しておきたい。
AWS Lambdaとwebhookを使ってSlackのチャンネルに通知する方法は多く見られましたが、メールで通知する方法は意外と多くなかったので、まとめてみました。

# 概要
+ 請求額はCost Explorerから取得する。
※CloudWatchから取得する方法もありますが、[双方に差異があり正しい値はCost Explorerである](https://hacknote.jp/archives/44913/)という情報があったため、Cost Explorerを使う事にしました。
+ Lambda関数のランタイムはPython3.7とし、Python 向けのAWS SDK(Boto3)を利用する。
+ トリガを設定したLambda関数にて、月初~前日までの合計請求額とサービス毎の請求額を取得し、その内容を整形し、メッセージとしてAmazon SNSのトピックに発行する。
+ メッセージを受け取ったSNSトピックは、紐

元記事を表示

AWS Lambda で遅延情報を通知してくれる Slack bot を書いてみた

# はじめに
– 以前AWS Lambdaを用いて作成したSlack Botについてまとめる機会があり、せっかくなので備忘録含めQiitaにも投稿しようと思いました。
– 作成当時の記憶はだいぶ薄れておりますが、覚えている範囲で引っかかったところなどどなたかの参考になれば幸いです。

※ 本記事のbotを作成したのは約2年前なので、現在の仕様と乖離する部分もありますがご了承ください。
※ 作成したbotそのもののソースは以下となります。
https://github.com/spinrock/delayTrainBot

# そもそもSlack bot作成に至った経緯
– 筆者の家は、複数路線の駅に挟まれた立地にあり、駅から別の駅への移動が大変でした。
– 駅に到着後に遅延に気付いても別の路線に乗る(駅を移動する)、という選択肢をとることが難しい状況でした。
– 起床時に自分で路線情報を確認できればいいのだが、朝の時間帯はバタバタしていることが多く、見逃す日も多分にありました。
– 普段から確認するツール(LINEやSlack)に通知が来て教えてくれると便利なのに

元記事を表示

高知の「あしたの分も買うちょくきね。~飲食券先買い応援プロジェクト~」の参加店舗を勝手にgoogle map上のマーカーでわかるようにした

**高知に行きたくても行けないので勝手にやりました**
https://script.google.com/macros/s/AKfycbzRJCvOuWC5uMFiqhl5soiLHnWbkGE5P-GAkxFmVT08u_3E2hRi/exec

あしたの分も買うちょくきね。~飲食券先買い応援プロジェクト~「参加店舗」
https://www.kochinews.co.jp/norikoeyo/asukau_eatery/
この店舗一覧をgoogle map上のマーカーでわかるようにしました

## 構成

– フロントはgoogle app script
– フロントからAPI Gateway+LambdaのAPIを呼び店舗情報を取得
– 店舗データはDynamoDBに保存

という完全サーバレスです

## まずは店舗一覧のデータ作成

https://www.kochinews.co.jp/norikoeyo/asukau_eatery/
このサイトをスクレイピングするlambdaを書きます(python)
座標取得するため、googleのAPIキーも事前に取得しておきました

元記事を表示

sam apiGateway lambda callback 502

# SAM apiGatewayに返却するフォーマット

## 経緯
Googleの検索をAPI以外でやりたくなりました。

そこでGoogle検索になんどもAPIを介さずにアクセスしていたら怒られました。
サーバからやっていたら too meny access 〜〜というエラーが返されるようになり、そこから数時間使えない。
API使えばいいいので困りはしないけれど、解決しておきたくて、ちょっと迂回してみました。

試したところIPを変えれば動くため、動的に変わるIPを持つ仕組みに乗っかろうと考えてlambdaを、
前段に通信が必要だったためapiGatewayを設けて apiGateway + lambda の構成になりました。

この構成で必要になる、lambdaからapiGatewayに返すcallbackのフォーマットを残しておきます。

### lambdaからapiGatewayに返すコールバックフォーマットはこうすればOK

var response = {
“statusCode”: 200,
“headers”: {

元記事を表示

Datadog enhanced AWS Lambda metrics を試してみる

# enhanced AWS Lambda metrics とは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31262/4d43700c-9d73-44b8-e3ae-c48d05e6837d.png)
DatadogにてAWSを連携すると出てくるデフォルトダッシュボードの中に存在する謎なやつ(図の下側)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/31262/50f42a20-7ee5-0bab-e3ff-1fa8ec3c56b5.png)

とりあえず開いてみても情報なし、下側のInvocationsの値は入ってるのに、上側のInvocationsには値が入ってない :thinking:

参照元メトリクスを見てみると別物参照してますね
上側: `aws.lambda.enhanced.invocations`
下側: `aws.lambda.invocations`

en

元記事を表示

【AWS】Lambda+Amazon SESでメールを送信する

[前回の記事](https://qiita.com/duplicate1984/items/8a3ce5c434a44b2b04fd)でAmazon SNSを利用してSMSを送信するlambdaを書きました。
今回はメールを送信するためにAmazon SESを利用していきます。

#やりたいこと
lambdaからのキックでメールを送信したいと思います。
ただし、宛先のメールアドレスはlambda内で指定したいと思います。

Amazon SMSでもメールの送信は可能ですが、予め作成したサブスクリプションで認証済みのメールアドレス宛にしか送信できません。
そこで今回はAmazon SESを使用します。

#Amazon SESって?
システムエンジニアリングサービス…ではなく
Amazon Simple Email Serviceです。

従量課金制のEメール送信サービスです。
2020年5月現在、東京リージョンではサポートされていません。
エンドユーザーへのマーケティングや、ヘルスチェック系の通知などに利用できます。

#コードとかより注意しておきたいこと
###サンドボックスの解除

元記事を表示

OTHERカテゴリの最新記事