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

NO IMAGE
目次

AWS SDK for Ruby v3をAWS Lambdaで使おうとしたらタイムアウトした

AWS SDK for Ruby v3をLambdaで使おうとしたらタイムアウト(確認したのは128MBで1分)した。
切り分けをしたところ、以下だけの簡単なコードでもタイムアウトしてしまって、どうやらAWS SDKのライブラリ全体を require しようとすると時間がめちゃめちゃかかってしまうみたい(手元だと全然時間がかかるようなことは無いのだが、理由はよく分からない…深追いはしていない)。

“`ruby:main.rb
require ‘aws-sdk’

# エントリポイント
def lambda_handler(event:, context:)
{ statusCode: 200, body: JSON.generate(‘Hello from Lambda!’) }
end
“`

なので

“`ruby:main.rb(抜粋)
require ‘aws-sdk-s3’
“`

みたいに必要なサービスのみ require するようにしたら問題無くすぐに実行された。

***

と思って上記記事を書いた後にもう少しぐぐってみたところ同じような部分で格闘していた

元記事を表示

kintoneにサーバーレスで印刷機能を実装する(AWS Lambda + Thinreports)

# 最初に

kintoneに限らず業務系のWebサービスでは、帳票印刷が必要になってきます。
(まだまだ紙で印刷したり、メールに添付したり、ダウンロードしたり)

ここでは、[kintone](https://kintone.cybozu.co.jp/) の印刷機能について調査と独自実装する場合の方法についての考え方をまとめたいと思います。

# 主な [kintone 帳票印刷ソリューション](https://kintone-sol.cybozu.co.jp/integrate/?_ga=2.217224278.1575313049.1572136352-973750221.1496066698&_gac=1.262536702.1570843509.Cj0KCQjw0IDtBRC6ARIsAIA5gWvCvZQJv5_IIkx2pr_sdG-J8KFmxzXUvvAIIWUpxygR7D1l4_EFjEgaAktlEALw_wcB#tab-refine)
(カッコ内は販売会社名)

kintone連携ソリューション公式ページから個人的に使ったり、知っている主な製品をまとめてみまし

元記事を表示

AWSサーバレスアーキテクチャで、よくある安否確認システムをSlackに対応させる

# 災害時に気づかれない安否確認を何とかしたかった
先日の[台風19号](https://ja.wikipedia.org/wiki/%E4%BB%A4%E5%92%8C%E5%85%83%E5%B9%B4%E5%8F%B0%E9%A2%A8%E7%AC%AC19%E5%8F%B7)の上陸時、自社の安否確認システムが発動し、全社員に一斉連絡が行われました。
この連絡は、安否確認システムに登録された電話番号とメールアドレス宛に行われることとなっています。
これは、各社でよくある安否確認システムの仕組みだと思われます。
しかし、今回の安否確認連絡に対する回答率は、普段実施している訓練の時よりも悪くなってしまったようです。
個人的な考察ですが、訓練では事前にメールを送信されると知らされているから回答率が良いのであり、いざ本番となると気づかない人が多いのだと考えました。
電話はEメールよりも効果的だと思うのですが、いたずら電話と勘違いして、取られないのかもしれません。

# 部員全員が使っているSlackに通知したら回答率が上がるのではないか
「Eメールは埋もれる」「電話は取られない」のだとす

元記事を表示

brefを使って簡単にLambdaのPHP Custom Runtime環境を構築する

## 概要
スクリーンショット 2019-10-26 16.34.28.png

LambdaでPHPを動かすためにはCustom Runtimeの機能を使って、自分でランタイム環境をビルドして、bootstrapというCustom Runtimeのエンドポイントとなるファイルを用意する必要があります。

しかし、[bref](https://bref.sh/)というサーバーレス環境でPHPを動かすためのツールとServerless Frameworkを使うことで非常に簡単にPHPのCustom Runtime環境が構築できたのでその紹介をしたいと思います。

## 使い方
### テンプレートからプロジェクトを作成
brefのgithubリポジトリにサンプルとなるプロジェクトが公開されているのでそれを元にローカル

元記事を表示

AWS Cloud9 に Ruby 2.5.0 と thinreports gem を インストールして Lambda で PDFを生成する方法

# はじめに

AWS Cloud9 環境にて Rubyで作成した Lambda関数を Cloud9でzip圧縮→Lambdaにアップロードして動かすまでやってみました。

ポイントは下記の通り

* LambdaのRubyランタイムと合わせる為に、Cloud9 に rvm で Ruby 2.5.0 をインストール
* S3バケットにLambda関数からPDFファイルを書き込む為の権限設定

最終的に、[kintone] → [API Gateway] → [Lambda] → [PDF生成] → [/tmp保存] → [kintone添付ファイルに保存] までの予定ですが、まず [/tmp保存] まで実装します。

# 実装イメージ

今回はオレンジ色の範囲を実装します。

![kintoneAwsLambdaThinreports.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/fdb297a8-1970-71fd-a0f7-5a17c63486b5.png)

# 実行環境

* AW

元記事を表示

AWS Amplify の AppSync API に IAM 認証を追加する

## やりたいこと

![appsync-iam.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/27764/8dad13e5-486b-cbf3-951f-70b9a73836a8.jpeg)

[AWS Amplify](https://aws-amplify.github.io/docs/) を使ってアプリ開発を行っていて、後でバッチ処理などで Lambda や EC2 からも Mutation を発行したいという想定です。
直接 DynamoDB をいじってしまうのもありですが、 AppSync で定義したスキーマから外れたデータを投入できてしまったり、 Subscription が発行されなかったりするので AppSync 経由でデータを更新します。

Lambda 関数の詳しい実装については以下の記事が参考になるので割愛します。

[AWS Lambda から AppSync の API を ぶん殴る](https://blog.r3it.com/aws-lambda-to-appsync-1

元記事を表示

AlexaとAWS Lambdaで遊ぶ

## はじめに

何かしらAWSのサービスを使ってみたいと考えていたところ、身内がビンゴ大会でゲットしたAmazon Echoがあることを思い出しました。
Amazon Echoと言えばAlexa。というわけで、Alexaで遊びつつAWSを使ってみることにしました。

## Alexaのチュートリアル

Amazonの公式ドキュメントに沿って進めると、チュートリアルができます。
アカウントの作成方法から実機のセットアップ方法まで書いてあり、とても親切でした。
https://developer.amazon.com/ja/blogs/alexa/post/31c9fd71-f34f-49fc-901f-d74f4f20e28d/alexatraining-firstskill

## AWSを使う

チュートリアルに従って、早速スキルが作れました。
しかし、バックエンドはAlexaにホストしてもらったため、自分ではAWSにログインすらしていません。
このままではAWSのサービスの使い方を分からずに終わってしまう……というわけで、次は自分のAWS Lambdaを使ってスキルを開発してみま

元記事を表示

LambdaでMicrosoft SQL Server にODBC経由で接続する+Layerとして動作させる方法

# やったこと
– PythonでSQL Server接続に`pymysql`を使っていたが、問題があることがわかったので、`pyodbc`を使うことにした。
– ライブラリ群はLambda Layerに置き、Lambda Functionからimportできるようにした。

# 環境
– AWS Lambda + Layer
– Python3.7

# pymysqlで問題になったこと

– WHERE句に空文字を指定できない
– INSERTで空文字を挿入できない

他にも色々ありそう
[Pythonで色々なデータベースを操作する – Qiita](https://qiita.com/mima_ita/items/9a5ab3b45c7575776b06#sqlserver%E3%82%92%E7%9B%B4%E6%8E%A5%E6%93%8D%E4%BD%9C)

# ODBC経由での接続(pyodbc)に変更

ライブラリを差し替えるだけ、のはずが大ハマリしたので方法を残す。

## How To
ほぼ下記のサイト通り。だけど、肝心のLambda Layerでの動作手順が記載

元記事を表示

Mockを使ってLambdaをテストする

## はじめに
サーバーレスなLambda関数のテスト方法を自分なりにメモしています。
Lambda関数のテスト0の状態から手を動かした結果をメモしているので、おかしな内容があればFBお願い致します。

### Lambda関数テスト方法
そもそもLambda関数のテストは、フェーズが大きく3つに分類できます。

“`:テスト方法
1. 関数単体のユニットテスト
– chai,MochaなどのNodejsのライブラリを使用する。
– [AWS Lambdaのユニットテストのベストプラクティス(Node.js)](https://qiita.com/horike37/items/034f731f1b40c5a28e74 )

2. モックを使用したテスト
– aws-lambda-mock-contextを使用して、擬似Lambdaをローカル環境で実行してテストする。

3. Lambda上でステージングテスト
– 実際にLambda関数をステージング環境にリリースしてテストする。
“`

今回は **2. モックを使用したテスト** の手順をまとめます。
基本的には[AWS Lam

元記事を表示

API Gateway&Lambdaデプロイエラー集

# エラー集
SlackBoltを使用して作成したSlackBotを、API GatewayとLambdaでデプロイした際に、かなりエラーと出会いました。今後開発される方(と自分)の参考になればと思い、開発中に出会ったエラー集まとめました。

## Slack上でAPIを登録する際にURLが正しくないとエラーが起きる

Slack_API__Applications___naberina_project_Slack.png

“`javascript:index.js
var body = JSON.parse(event.body);
if (body.type == ‘url_verification’) {
const res = { challenge: body.challenge }

元記事を表示

Elixir on AWS LambdaからDynamoDBへアクセス

AWS LambdaのCustom RuntimeでElixirを動かし、DynamoDBのGET/PUTを試してみます。

## 環境
– Windows 10 Pro 64bit
– VSCode 1.38.1
– Docker Desktop for Windows 2.1.0.4
– Docker Engine 19.03.4

## 事前準備
[こちら](https://qiita.com/ansoposKAZ/items/d1a1924fc34affbd30b5)で作った環境をベースに作業を進めます。

## 参考資料
[alertlogic社のサンプルコード](https://github.com/alertlogic/erllambda_elixir_example/blob/master/lib/erllambda_elixir_example.ex)をベースに都度試しながら進めます。

## 環境変数の読込
AWS Lambdaの環境変数に設定したキーに対する値をログに出力します。

– `lib/lambda_ex.ex`
– 以下の通り変更を加え、`MIX_E

元記事を表示

RDS Aurora Cluster 自動起動停止簡易版(Lambda不使用版)

# 概要

* AuroraClusterの停止機能がリリースされていた
* 開発環境の費用節約のために夜間休日などAuroraを停止したい
* Lambda+CloudWatchなどの組み合わせでもよい手間がかかる
* AWS上でLambda実行環境を構築するのが面倒な場合おすすめ
* シンプルにawscliとcronだけで動かす
* 環境はCentsOS7系(AmazonLinux2)
* [AWS公式参考](https://docs.aws.amazon.com/ja_jp/AmazonRDS/latest/UserGuide/USER_StopInstance.html)

# 事前準備

* AWSCLIは最新である必要がある(この時点でaws-cli/1.16.264)
* 少しでも古いとAuroraClusterに関する制御系が存在しない
* Pythonは最新である必要がある(この時点でPython3.6系と3.7系)
* Pyenvなどは最新にしておくこと

# 詳細

### Pythonアップデート

* 新しいPythonを入れてセットしておく

“`
$

元記事を表示

ServerlessDays Tokyo 2019 に関する脳内ダンプ

これは10/22に東京都港区で行われた[ServerlessDays Tokyo 2019](https://tokyo.serverlessdays.io/)に関する個人的な脳内ダンプ・・・つまりポエムです。
自分のメモをベースに心の声や脳内(誤)変換も含めてそのまま形にしたものです。この先はそのことをご理解頂ける方のみお読みください[^1]。

元記事を表示

Lambda proxy integration×Go(echo)×Terraformでお手軽Web API(サーバレス)

# はじめに
サーバレスで手軽にWeb APIを立てたい場合、**API Gatewayのproxy integrationとlambdaアプリケーションソースでのルーティングでこんなに簡単にお安く構築できるんだな〜**と感心してしまったのでそのご紹介と、そのリソース群のTerraform moduleを作ってTerraform Registryに公開したのでその内容の紹介で記事を書いてみました。
(しかも最近VPC Lambdaのコールドスタートが大幅に改善されたばかり -> [[発表] Lambda 関数が VPC 環境で改善されます \| Amazon Web Services ブログ](https://aws.amazon.com/jp/blogs/news/announcing-improved-vpc-networking-for-aws-lambda-functions/) )

元記事を表示

初心者が6か月学んだことを生かして会員制競艇予想サイトを作ってみた!

#はじめに
今年の3月から6か月間にわたってWebサイトから機械学習、ARなど様々な技術を学び、
1か月ごとに成果物を作成してきました!

最後の6か月目となる今回はその集大成として会員制の競艇予想Webサイトを作成しました!

会員制ですので残念ながら皆様にWebサイトをご利用いただくことはできませんが、
今回のプロジェクトについて共有させていただきます!

#アジェンダ
######1.作ったものについて
######2.環境について
######3.Webサイトの構成について
######4.実装・サービスの設定内容について
######5.最後に

#1.作ったものについて
今回作成したのは以下のような競艇予想のWebサイトです。
![BoatRace_predict.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/378268/48c5d670-77c5-257b-5c07-f36a0acd366b.png)
こちらのサイトは[以前投稿したディープラーニングの記事](https://qiita.

元記事を表示

kintone Webhook と AWS Lambda の連携で kintoneにコメントを書き込む

kintoneとAWS Lambda を連携させて、
[kintoneレコード追加] → [Webhook発火] → [API Gateway] → [AWS Lambda] → [AWS Lambda] → [kintoneレコードコメント書き込み] をやってみました。

# 仕組みイメージ

![kintoneWebhookAwsLambda.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214523/bd887b0b-84f2-57bb-50f7-a5b5578810e3.png)

# 実行環境

* macOS 10
* AWS Cloud9
* kintone

# 前提条件

* kintoneでWebhookを設定済み
* AWSアカウント取得済み
* API Gateway設定出来る
* AWS Lambda作成出来る
* AWS CloudWatch利用出来る
* JavaScript, Node.js書ける
* 何らかのSDKを使った経験がある
* AWSで課金されることを理解して

元記事を表示

Serverless Days Tokyo 2019 トヨタ自動車・ダイキン工業 事例覚書

Serverless Days Tokyoに参加してきました。いずれも興味深い内容ばかりでしたが、ダイキン工業とトヨタのIoTシステムの中の話は、こういう機会でもなければ聞けない話でかなり貴重な話を聞けた感がありました。
その内容をメモったので残しておきます。

入り口の様子。
![IMG_4993.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13835/b03e6c0c-b401-5a59-c103-72eaf2d2bf54.jpeg “IMG_4993.JPG”)

会場の様子。休みの日の朝9時からというのに、ほぼ満席な感じでした。
![IMG_4987.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/13835/30d3ff00-03aa-9cf8-bb62-89cd89a0361d.jpeg “IMG_4987.JPG”)

## ダイキン工業:空調設備向けIoTシステムにおけるランニングコスト

* ダイキ

元記事を表示

AWS Lambda 関数から 別の Lambda 関数を呼び出す方法

Lambda から Lambda を呼び出す方法についてのまとめです。

# 環境

* macOS
* AWS Cloud9
* Node.js 8

# Lambda から Lambda を呼び出す方法

他にもあるようですが、その一つとして [Invoke](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/API_Invoke.html) を使います。

[Invoke] は、[AWS SDK](https://aws.amazon.com/jp/tools/) の [Lambda API](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Lambda.html) に含まれるメソッドです。

## Invoke の基本的な使い方

基本的な使い方は次のようになります。

1. ライブラリを読み込みます。 `const aws = require(‘aws-sdk’);`
2. Lambdaオブジェクトのインスタンスを取得します。 `let lambda = new

元記事を表示

Lambda関数で使ってるランタイムの数を確認したい

# はじめに

`Node.js 8.10 is EOL, please migrate your functions to a newer runtime version` ということらしい。
Node.js 8って全リージョン合わせてどのくらい使ってたっけ? というときに確認方法のメモを残しておく。

# 結論

事前準備できてる状態で、次の内容のシェルスクリプトを実行する。

“`bash
#!/bin/bash
region_list=$(aws ec2 describe-regions|jq -r ‘.[][].RegionName’|sort)
runtime_list=$(for x in $region_list; do aws –region $x lambda list-functions| jq -cr ‘.[][]|.Runtime’; done)
key_list=$(echo “$runtime_list” | sort -u)
total=$(echo “$runtime_list”|wc -l)
for x in $key_list; do c=$(

元記事を表示

Serverless FrameworkでTypeScriptを使い、Lambda Layersを使う方法

## serverless framework自体をインストールする

“`bash
npm install -g serverless
“`

## プロジェクトを作成する

“`bash
serverless create –template aws-nodejs-typescript –path my-service
“`

## プラグインインストール

“`bash
serverless plugin install -n serverless-webpack
“`

“`
npm install
“`

## デプロイ

“`bash
serverless deploy –aws-profile sandbox -v
“`

デプロイされると、 `endpoints` にURLが表示されています。

そのURLにcurlでアクセスしてみます。

“`
curl https://hsnfe8svli.execute-api.us-east-1.amazonaws.com/dev/hello | jq
“`

実行すると下記の結果が得られます。(抜

元記事を表示

OTHERカテゴリの最新記事