Lambda関連のことを調べてみた2019年12月23日

Lambda関連のことを調べてみた2019年12月23日

Telegram botをAWS Lambdaでやってみた

Leoです。
この記事は [Wanoグループ Advent Calendar 2019](https://qiita.com/advent-calendar/2019/wano-group) の22日目の記事になります。

[Telegram](https://telegram.org/)のアプリにserverless botの機能を追加しました。
現在僕は複数のメッセンジャを使っています。
Lineにはbotを[簡単に追加できますが](https://dev.classmethod.jp/etc/lambda-line-bot-tutorial/)、今回初めてTelegramのアプリに入れる必要があったので、この記事をメモとしても書きました。

### Telegramのbotの実装には基本的に4ステップがあります。
1. Botの登録
2. AWS lambdaの登録
3. AWS API Gatewayのendpointを追加
4. EndpointをTelegramにwebhookとして登録

## Botの登録
Lineと違って、Telegramのbot登録やbotの操作はア

元記事を表示

【AWS SAM】 DynamoDB+Lambda+APIGatewayでAPIを作る

# 内容
DynamoDBのデータを取ってくるAPIを、AWS SAMで構築してみる

要するに、こんな感じのテーブルから、、、

|group(Hash) |name(Range) |
|—|—|
|group1 |name1 |
|group1 |name2 |
|group2 |name3 |

こんな感じに取ってこれるようにしたい。

“`shell
curl https://hogehoge/Prod/dynamo-api/v1/?group=group1&name=name1

{
“result”: [
{
“name”: “group1”,
“group”: “name1”
}
]
}
“`

# 環境
– macOS Mojave -10.14
– python3.7.4
– sam 0.38.0

# 目次
1. アプリケーションの環境構築
2. template.yamlを書く
3. 実行スクリプトを書く
4. デプロイ
5. 検証

# 1

元記事を表示

Java8 リスト変換を Stream map で

リスト変換について、for 文を使う場合と Stream map を使う場合で比較していきます。
以下のリストを使います。

“`java:stream-map.java
final List months =
Arrays.asList(“January”, “February”, “March”, “April”, “May”, “June”, “July”, “Augast”, “September”, “October”, “November”, “December”);
“`

それぞれの要素の一文字目だけで構成されるリストを作ります。
#### 1. for 文を使う
一文字目を格納する空のリストを宣言し、for ループ内で一文字ずつ格納しています。

“`java:for.java
final List firstChars = new ArrayList<>();
for (String c : months) {
firstChars.add(c.substring(0,1));
}
for (String fc : fir

元記事を表示

[Netlify Formsと連携]AWS Lambda上にGmail自動返信スクリプト(Node.js)をデプロイしAPI化。

Gatsby.jsを使用しNetlifyにデプロイするプロジェクトを進行していたところ、お問い合わせフォームの作成に手間取ったため備忘録。
##前提
対象読者は、
・node.jsの使用経験はそこそこある。これは必須です。
・lambdaの存在と癖の強さをある程度把握してる。若しくは、どんな癖でもかかってこいという精神がある人。
・api gatewayとlambdaの連携を行ったことがある。若しくは、自力でどうにかできる自信がある人。
を満たしていれば、全員できると思います。

##参考サイト等
・[詳しい。ここに従えば基本大丈夫(英語です。)](https://medium.com/@nickroach_50526/sending-emails-with-node-js-using-smtp-gmail-and-oauth2-316fe9c790a1)
・[わかりやすい。コード以外はここに従えば大丈夫(日本語です。)](https://gist.github.com/neguse11/bc09d86e7acbd6442cd4)

##環境セットアップ
1.netlify forms

元記事を表示

サーバーレスアセンブリ?

# みんな大好きLambda
![AWS-Lambda_light-bg@4x.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/83183/797bf7ca-822c-0006-dcff-72eae43dd3f1.png)

今年の re:Invent では RDS Proxy という個人的神アップデートも発表されて、
ますますサーバーレスしやすくなってきましたね!
(Provisioned Concurrency もな!)

そんな Lambda ですが、現在サポートされているランタイムは以下です。

– Node.js
– Python
– Ruby
– Java
– Go
– .NET

もちろんこれ以外の言語でも使いたい人はたくさんいますよね。

そんなときはカスタムランタイムです。

# [カスタム AWS Lambda ランタイム](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/runtimes-custom.html)

去年(2018

元記事を表示

Lambda + CloudWatch + DynamoDB + LINE Notifyでリマインダーを作る

# はじめに
DynamoDBのキャッチアップのついでに、リマインダーを作りたかったので作ってみた。
今回は時間があまりなかったので、備忘録みたいな感じ。(まだ完成していない)

構成としては以下のような感じ。
![設計図-5.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396492/ae1c3c66-8ec9-ec70-a11d-8a4d08c0cd5b.jpeg)

本当は、Androidアプリを作って、プッシュ通知までもって行きたかったが時間がないので後日。
通知の部分は、簡単にできるLineNotifyを使ってLineで通知をするようにした。

## DynamoDBを立てる
1. IAMにて、ユーザーにAmazonDynamoDBFullAccessの権限をつける
2. DynamoDBのトップページにてテーブル作成を押す
3. テーブル名とパーティーションキー名(今回はDate)を入力する。
5. できたDynamoDBの構成は以下の通り
– テーブル…データのコレクション。

元記事を表示

AWS Lambdaのランタイムサポートポリシーについて、および、廃止が迫った場合の対処法

# TL;DR

知っているようで知らないAWS Lambdaのランタイムポリシー、そして、これまで使っていたランタイムが使えなくなったらどうしよう?

そんな疑問にお答えします。

# 背景

AWS Lambdaは2019/12/22現在、サポートランタイムが12個あり、それらは以下のとおり。これはマネージメントコンソールからいつでも確認できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6088/8db8c6fa-aa3d-e176-d939-662abd683464.png)

### re:Inventで新しいランタイムのサポートがアナウンスされました。

* AWS Lambda now supports Node.js 12
* https://aws.amazon.com/about-aws/whats-new/2019/11/aws-lambda-supports-node-js-12/
* AWS Lambda now supports Java 11

元記事を表示

Python3.7ランタイムのAWS LambdaでC拡張ライブラリを使用したい!

本記事はamazonlinuxでpython3.7を使用したい人、lambda上でpythonのC拡張ライブラリを使用したい人向け。

# 動機
Python3.7ランタイムのlambda上でscrapyを動かそうとしたところ以下のエラーでうまく実行できなかった。

“`
{
“errorMessage”: “Unable to import module ‘spider’: cannot import name ‘etree’ from ‘lxml’ (/var/task/lxml/__init__.py)”,
“errorType”: “Runtime.ImportModuleError”
}
“`

調べたところ、どうやらlxmlライブラリはC言語の拡張を使用しており、そのままではlambdaで使えないとのこと。

諦めればいいものの、Python3にこれから移行していくというタイミングで困ることが多そうなので頑張って解決してみる。

PCはMacを使用。

# とりあえずEC2上で動かす

lambdaはサーバレスといっても裏ではamazonlinuxのサーバ上で動

元記事を表示

SAM+CodeDeployでlambdaへデプロイする。

前回まではCodeDeployを用いてEC2インスタンスへのデプロイを学習しました。
今回はデプロイ対象をlambdaでやってみたいと思います。CodeDeployのアプリケーション作成画面でlambdaを選択できるので同じ要領かと思っていましたが、SAMというやつを一緒に使うみたいです。

[公式チュートリアル](https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/tutorial-lambda-sam.html)は普通に分かりやすいです。なので、今回はテンプレートyamlファイルの設定項目をここで指定していきましょう。

_contents_

* AWS SAM
* AWS CloudFormation
* 公式チュートリアル実施時の備忘録/トラブルシューティング
* template.ymlの解読(本題)

# AWS SAM

AWS Serverless Application Model(AWS SAM)は、yaml形式で記述したテンプレートを元にして種々のAWSリソースを用いたアプリケーションを構築

元記事を表示

AI-OCR名刺アプリをLINEとGCPで作ってみた

# はじめに
 名刺の写真をLINEに送ると会社・名前・住所・電話番号がデータベースに登録され組織で共有できるサービスが作りたかったけどたどり着けなかった話です。
~~タイトル詐欺で申し訳ないです。空いた時間で追加開発します。。。~~

 私は現時点(2019.12)でsalesforceのインテグレーションをメインに仕事しているのですが、SFAなので名刺の管理サービスとのインテグレーションが発生しがちです。salesforceとの名刺管理連携では、sansanさんやサンブリッジさんなど有名どころがすでに存在して、非常に簡単にインテグレーションできるのですが、基本的にOCR+人力入力でデータベース化をBPOしているイメージです。
 そんな中、以下の記事を見つけて「え、流行りのGCPを使えば簡単に作れちゃうの?」となり、GCPの勉強をかねてチャレンジしてみました。

◆Vision APIとNatural Language APIを組み合わせて名刺から情報抽出する
https://qiita.com/Hironsan/items/166515acec35658986b2
◆kintone

元記事を表示

SORACOM LTE-Mボタンを押して、Slackのワークフローを発動させる

これは、[SORACOM Advent Calendar 2019](https://qiita.com/advent-calendar/2019/soracom)の21日目の記事です。

**SORACOM FunkとSORACOM Napterは神。**
だと思っている人です。

### 前説
ボタンネタで書こうと思ったものの、何を書くかなーと悩んでました。

そういえば、ボタンを使って承認するって話しあったなー。
承認するといえば、ワークフロー。
そういえば、最近Slackにワークフローできたなー。

よし。ボタン押したら、SORACOM Funk経由で、Lambdaを呼び出して、SlackにPOSTして、ワークフローを起動させよう。

っていうのをやってみた話です。

Funkが使える #しろボタンと#ひげボタン はもちろんですが、
AWS IoT-1ClickからLambdaを呼び出すことができるので、#あのボタン でも使えます。

### 構成図

構成図Lambda+node.jsのREST APIをDocker+Rustに置き換えて高速化したい

## はじめに

– AWS Lambdaをnode.js(javascript/typescript)でよく使っている。
– コスト、またはレスポンス改善のためにLambdaをECS+fargateなどDocker環境に移植したい。
– もちろんRustに移植すれば速くなると思ってやっている。

## Lambdaの問題

– リクエスト課金のため、大規模利用では課金がヤバいことになる。
– レスポンスタイムの揺らぎが大きい、コールドスタートが遅い。
– このどっちの問題にも当てはまらないならLambdaはオススメです。

(最近、Provisioned Concurrencyとか追加されたけど、それでもコールドスタートは発生する)

## なぜRust?

– 速いから。速さがそのままインフラコスト改善になるから。
– C++を長くやってきたけど、最近Rustがいい気がしてきたから。
– でも、現状のLambdaではnode.jsのほうが速いらしい。(node.js、Go、Pythonは同じぐらい)
https://medium.com/the-theam-journey/benc

元記事を表示

終わらないLambda実行

この記事は[AWS LambdaとServerless #1 Advent Calendar 2019
](https://qiita.com/advent-calendar/2019/lambda)の21日目の記事です。

## はじめに

API Gatewayと組み合わせてのAPIサービング、SQSトリガーからのジョブ、DynamoDBの更新をフックにした処理など、いろいろな活躍をしてくれるLambdaですが、API Gatewayからのレスポンスが返ってこないな、テストが終わらない?、という状況になったことはありませんか?

今回は私が開発中に出会った、いろんな意味でLambdaやLambdaを使った処理が終了していない、終了していないように見えるパターンについて紹介します。

1. Postgresへの接続
2. Postgresへ接続したFunctionのテスト
3. DynamoDBトリガーのLambdaでの例外によるリトライ

Serverless FrameworkでNode.js + TypeScriptで検証しています。

## 1. Postgressへの接続

元記事を表示

lambda_handler外のグローバル変数に気をつけよう(datetime)

# はじめに
ジョブが作成されてからLambdaが実行されるまでの間の時間(滞留時間)を取得する
Lambdaを作成していた時に
現在日時を取得するためにdatetimeを使用していたのですが、
そこで「AWS Lambdaは関数インスタンスを再利用」というのに見事にハマったので、
記事にしてみたいと思います。

# 最初に作成していたコード
まずLambdaが実行された現在日時を取得するための
コードを簡略化したものが以下になります。

“`.py
from datetime import datetime

now = datetime.now()

def lambda_handler(event, context):
method_a()

def method_a():
method_b()

def method_b():
method_c()

def method_c():
# xはジョブの作成日時を表しています。
time = now – x
print(data)
“`

– ジョブの作成時刻を`x`
– 現在時刻を`now`

元記事を表示

F# でAWS Lambdaのはじめかた

## Problem

[AWS Lambda が、.NET Core 2.1 ](https://docs.aws.amazon.com/lambda/latest/dg/dotnet-programming-model.html)をサポートされて、1年以上経過しました。
しかし、サポートされているのはC#だけではありません。F#もまた同様です。
F#は.NETで実行される機能言語であり、C#で記述されたAWS SDK for .NETなど、他の.NET言語で記述されたパッケージを使用できます。

これまでに、F#を使用したAWS Lambdaのプロジェクトを作ったことがない方にも分かるように作り方をまとめます。

## Solution

### 開発環境

#### Windowsの場合

開発環境は以下の通りです。

項目|値
—|—
IDE|Visual Studio 2019

#### Macの場合

項目|値
—|—
IDE|Visual Studio Code

### 準備

#### Windowsの場合

##### AWS Toolkit f

元記事を表示

Java リストをイテレートする5つの例から省略形に辿り着く

リストのイテレートについて、シンプルなリストを使って書き方を見ていきます。
今回は以下の文字列のリストを使います。

“`java:list
final List months =
Arrays.asList(“January”, “February”, “March”, “April”, “May”, “June”, “July”, “Augast”, “September”, “October”, “November”, “December”);
“`

これらの要素を順番に標準出力させたいだけです。

### 命令型のスタイル
まずは、for ループを使ってみます。
for ループは命令型のスタイルで、外部イテレータです。
命令型のスタイルでは、「どのように」処理を行うかの多くをプログラマ側で考える必要があります。

#### 1. for ループ(インデックス指定)
特に難しいことはないと思います。1番目の要素から順番に出力しています。
インデックスをわざわざ一つずつインクリメントしながら指定する必要があります。

“`java:for-with-ind

元記事を表示

TwilioとLambdaでIVRからの電話転送設定を自動化する

いよいよ年末です。進捗はいかがでしょうか?

年末年始のお休みに入る前に、電話の転送設定を切り替えたり、留守番電話の案内アナウンスを変更する作業が必要な会社も多いと思います。

最近はインターネットからアクセスできる管理画面が用意されているサービスも増えてきましたが、多くの場合は指定の電話番号に電話をかけ、アナウンスに従って番号を押すといった操作が必要です。

こういったIVR(自動音声応答装置)に対する定型操作を、AWS LambdaとTwilioを組み合わせて自動化してしまいましょう。

この記事は [うるる Advent Calendar 2019](https://adventar.org/calendars/4548) 23日目のエントリーです。

# Twilioとは
Twilioは公衆交換電話網(PSTN)を利用した電話の発着信やSMSの送受信などを、ソフトウェア開発者がWeb APIを通して利用できるようにするサービスです。
PSTNに関する知識がなくても、開発者は慣れ親しんだ言語でコンタクトセンターやIVRなどを構築することができます。

# きょうのレシピ
![構成

元記事を表示

NimとAWS Lambdaでサーバーレス「大石泉すき」作成の初見RTAをした話

[「大石泉すき」アドベントカレンダー](https://qiita.com/advent-calendar/2019/ohishi-izumi-suki)22日目の記事です。
今回は先日開催された[アイマスハッカソン2019](https://imas.connpass.com/event/151789/)にてサーバーレス「大石泉すき」作成RTAをしたのでその報告をいたします。

## 大石泉と僕
本題へ入る前にまずは私と大石泉の関係についてお話をさせていただこうかと思います。
私は前に[某所で記事にさせて頂いたのですが](https://techdo.mediado.jp/entry/2019/12/06/090000)、NGsのみんなが色々なことを通知してくれるslack botを運用してたりします。

![スクリーンショット 2019-11-28 19.04.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/215879/74e28d83-b4a5-9922-7ebf-da185d6cfb6c.

元記事を表示

Lambda Functionの一覧をランタイムバージョンと共に表示する

古いランタイムバージョンのLambda Functionが残ってると、使ってなくてもAWSからEOL通知のメールが来るので、一覧を表示するスクリプトを書いた。備忘録代わりに投稿します。

“` bash
#!/bin/bash
regions=$(aws ec2 describe-regions | jq -r ‘.Regions[].RegionName’)
for region in $regions
do
aws –region $region lambda list-functions –function-version ALL | jq -r ‘.Functions[] | [.Runtime, .FunctionArn] | @csv’ | sort -V
done
“`

あとは、消したいものをgrepして、“`aws lambda delete-function –function-name ARN“`するだけ。Regionごとに消さないといけないので、ちょっと面倒くさいけど。

元記事を表示

AWS Lambda@Pythonで相対importする

## 実装

`test` というパッケージを作って`lambda_handler`の位置を一階層下げる。

で、起動ハンドラの指定を
`lambda_function.lambda_handler` から
`test.lambda_function.lambda_handler` へ変更する。

### イメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299475/a1a7d679-8334-05eb-6005-de897574abb7.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/299475/d21b8f30-880a-1b09-3b04-4e141fa46376.png)

※ `__init__.py` は必須

元記事を表示

OTHERカテゴリの最新記事