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

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

AWS Lambda/PythonでJSON形式でログを出すベストプラクティス

Lambdaはログを CloudWatch Logs に自動保存しますが、CloudWatch Logs にはJSON形式のログを自動でパースして整形表示したり検索したりする機能があります。是非とも、ログをJSON形式にしたいところです。

しかし、「python lambda logging json」でググって見つかる記事は、いずれも内容に不備があるようでしたので、自分がベストだと思う方法を紹介するのがこの記事です。

# お断り

Pythonのログ出力は標準ライブラリの`logging`がスタンダードなので、この記事ではloggingを前提にしています。

printを使うべきではない理由・logging の正しい使い方については「[ログ出力のための print と import logging はやめてほしい](https://qiita.com/amedama/items/b856b2f30c2f38665701) 」という記事が分かりやすいです(文体は辛辣ですけど)

# これが(きっと)ベストプラクティスだ!

“`python
import logging
impo

元記事を表示

DynamoDBストリームをトリガーにLambdaを実行しSNS通知する

#1.ストリームを有効にしたdynamoDBテーブルを作成する#

テーブル名:dynamodbtesttable
パーティションキー:Username
ソートキー:Timestamp
ストリーム:有効、トリームに書き込まれる情報を項目の新しいイメージと古いイメージの両方(NEW_AND_OLD_IMAGES)にしました。

|StreamViewType| |
|—|—|
|StreamViewType | テーブル内のデータが変更されるたびにストリームに書き込まれる情報を指定します。|
|KEYS_ONLY | 変更された項目のキー属性のみ。|
|NEW_IMAGE | 変更後に表示される項目全体。|
|OLD_IMAGE | 変更前に表示されていた項目全体。|
|NEW_AND_OLD_IMAGES |項目の新しいイメージと古いイメージの両方。|

“`
aws dynamodb create-table \
–table-name dynamodbtesttable \
–attribute-definitions AttributeName=U

元記事を表示

Amazon SES の配信結果をDynamoDBに保存するLambda関数

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

## Introduction

システムからのメール配信を行っている場合、BounceやComplaintとなったメールアドレスへの対処が求められます。
Amazon SES の場合、SandboxからProductionで使用する際にどのようなプロセスを実装しているかを申請する必要があります。

AWS公式では以下のような知見が紹介されています。
[How do I create an AWS Lambda function to store Amazon SNS notification contents for Amazon SES to an Amazon DynamoDB database?](https://aws.amazon.com/premiumsupport/knowledge-center/lambda-sns-ses-dynamodb

元記事を表示

New Relic初心者がNew RelicでLambdaを監視設定してみた。

これは[New Relic Advent Calendar 2019](https://qiita.com/advent-calendar/2019/newrelic)の23日の記事です。

New Relic 初心者です。
今回、ちょっとNew Relicを触る機会がありまして、
よく使うAWSのサービスの1つであるAWS Lambdaの監視を試してみました。

基本的には、
[サーバーレス機能の監視 » AWS Lambda監視 » 始めてみましょう AWS LambdaのNew Relic監視の概要](https://docs.newrelic.co.jp/docs/serverless-function-monitoring/aws-lambda-monitoring/get-started/enable-new-relic-monitoring-aws-lambda)
を実施したものになります。

## 準備
[公式構成図](https://docs.newrelic.co.jp/sites/default/files/thumbnails/image/

元記事を表示

LambdaをVPC内に作ってちょっとだけハッピーになった話

# 前提
– LambdaについてはServerlessFrameworkを使用
– IP制限の掛かったサービスにWebhook的にLambdaから通知を送りたかった
– SESのバウンス通知
– 動画変換完了後の通知など(うちの会社ではよくあるパターン)

# 課題
– これまではどうしていたかというと
– IP制限の掛かっていないCloudFrontディストリビューションを作成
– 上記のディストリビューションに対してドメインを振る(`webhook.xx.com`等)
– アプリケーション側の該当のパス以下(`/webhooks/hoge`等)にベーシック認証を設定
– Lambdaから上記のパスに通知

## ペイン(辛み)
– (ベーシック認証は掛けるものの)野ざらしになったWebhookディストリビューションを作ることになること
– ドメインも別途発行する必要があること
– クライアントによっては発行まで色々やり取り発生するし時間かかるしめんどくさい
– 同時にSSLの設定等も増えるのでとにかくめんどくさい

# 解決策
– 今回下記の流れで

元記事を表示

AWS Lambdaで動的サイトのwebスクレイピングをしてtwitterに投稿するbotを作った(続)

[2018/10に作ったtwitterのbot](https://qiita.com/kihoair/items/3a50454bae6c6bc6a2d6)をリファクタリングしました。理由としては

* python2.7で実行していた。
* Lambda Layer実装以前だったため、ソースコードのサイズが大きすぎてコンソールからは確認・修正できなかった。
* Serverless Framework/Lambda Layerを使ってみたかった。

などもあり、AWSの一年間の無料期間が終わるのでアカウントを作り直すついでに作り直しました。
ソースコードは[こちら](https://github.com/kihoair/intro_bot)。
レポジトリの構成の概要は以下の通りです。

“`
.
├── lambda (Lambda本体)
│ ├── includeするmoduleたち
│ ├── lambdafunction.py
│ └── serverless.yml

└── selenium-layer (Lambda Layer用)
├── ch

元記事を表示

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の構成は以下の通り
– テーブル…データのコレクション。

元記事を表示

Alexa+lambdaでスマート(じゃない)ホームスキルをつくる

はじめまして@ufoo68です。今回はAWSのアドベントカレンダーにお邪魔させていただきました。

# はじめに
[このアドベントカレンダー](https://qiita.com/advent-calendar/2019/lambda)に登録したきっかけは最近[re:invent2019](http://reinvent.awseventsjapan.com/)に参加した経験からです。普段はあまりAWS関係の記事は書いたりしないのですが、せっかく大きなイベントに参加したのでlambdaについて書いてみよと思った次第です。イベントの発表を聴いて気に入ったサービスについては[この記事](https://qiita.com/ufoo68/items/1012e81255e1ae6b338a)でまとめました。今回はその中のAlexaに挑戦してみようと思い、思い切って[Echo Show 5](https://www.amazon.co.jp/Echo-Show-5-%E3%82%A8%E3%82%B3%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%BC5-%E3%82%B9

元記事を表示

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への接続

元記事を表示

OTHERカテゴリの最新記事