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

Lambda関連のことを調べてみた2019年11月01日
目次

AWS Lambdaでのコールドスタートのメモリの罠と、Invoke Lambdaでのタイムアウトの罠

# 問題の経緯
API Gateway経由、ALB経由でAPI化しているLambdaを構築していた。
ALB経由Lambdaの中には、VPCに含んでいるものもあった。
そのLambdaからは別のLambdaもいくつかInvokeしていた。
実装を一通り終わってテストしていると、どうもレスポンスが早いときと、遅いとき、酷いとタイムアウト(API Gatewayは30秒制約あるし。。)することがあった。

# 調査した結果
調査してみると、どうにもInvokeしている部分が怪しかった。
やっぱりVPC Lambdaだとコールドスタートのせいで遅いのかなぁと思いながらログから調査していった。
Invoke自体は実行されているが、何故かInvoke先のLambdaにログが来ていない。。。。
もしかして、コールドスタートから起き上がる前にタイムアウトしてる??と思い、Lambda関連のドキュメントを漁りながら、やっぱりLambdaを定期実行して、コールドスタート回避するしかないのかなぁと思っていると下記の記事を発見。。。。
[VPC Lambdaのコールドスタートにお悩みの方へ捧ぐコールドスター

元記事を表示

CodePipeLineからLambda呼び出しを行うCloudFormationテンプレートの定義

# はじめに
CodePipeLineが終わったらSlackに通知を送るために、最後にLambda呼び出したかった。
作成したものを備忘として記録。

# テンプレート

“`yaml
# CodePipeLine
Pipeline:
Type: AWS::CodePipeline::Pipeline
Properties:

・・・(lambda以外は省略)

Stages:

・・・(lambda以外は省略)

– Name: lambda
Actions:
– Name: lambda
ActionTypeId:
Category: Invoke
Owner: AWS
Version: 1
Provider: Lambda
Configuration:

元記事を表示

AmazonAWSLambdaでRuby使ってpostgresにアクセスする時にIgnoring pg-XX because its extensions are not built. Try: gem pristine pg と出た時の対処法

lambdaでRubyを使ってPostgresにアクセスする際に以下のようなエラーが出る場合があります。

“`
Ignoring pg-1.1.4 because its extensions are not built. Try: gem pristine pg –version 1.1.4
“`
それをどのように解決したかを記載します。

###結論
pgやnokogiriなど、c言語のライブラリを使用しているものをrequireする際は
linux環境(redhat系)でbundle installを行ったvendorフォルダをlambda上にアップロードする。

###原因
lambdaがc言語のライブラリを参照する際にライブラリのパスが分からない。

###解決方法
dockerでAmazonLinuxの仮想環境を作成し、そこでbundle installを実行します。

####前提
– GemfileでRubyの開発環境が作れる
– Dockerがインストールしてある

####通常のlambdaでRuby動かすための環境構築
– Gemfileを作成

“`

元記事を表示

Amazon ECRのイメージスキャン結果をSlackに通知する

## はじめに
2019/10/28 Amazon ECR でコンテナイメージの脆弱製スキャン機能が利用可能になりました!
しかもスキャン機能自体の利用は無料です。最高。
https://aws.amazon.com/jp/about-aws/whats-new/2019/10/announcing-image-scanning-for-amazon-ecr/

いずれ [AWS Chatbot](https://aws.amazon.com/jp/chatbot/) が対応してくれそうですが、
それまでの繋ぎでスキャン結果を Slack に通知する Lambda 関数を作成しました。
Amazon EventBridge(CloudWatch Events)と組み合わせて利用します。
## 結果イメージ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/125105/08180890-abe6-37f6-fec2-c81a12f65e51.png)
イメージ名をクリックするとスキャン結果の

元記事を表示

AWS初心者がLambdaでLINE BOIを作る

LINE BOTでオウム返しのBOTを作ります。
正直AWSを触ったことが無いので、よく分からず困ったので同じように困る人が出ないように
記事にすることにしました。

言語・ツール選定
私はRaspberry pi & PHPでLine botを作ったことが有る。
内容としては位置情報を渡すと近くのコンビニを教えてくれるものだ。
しかし、Raspberry piでLine botを作ると、常にRaspberry piを起動しておく必要があり電力的に優しくなく、
サーバの構築や認証鍵の設定が面倒だった。
そこでサーバレスのLine Botを作ろうと思いました。
私が選択したのはLambda+Node.js。
選択肢としてGAS(Google App Script)もあったけれど今後の拡張性を考えた時、
ES6が簡単に使えない(変換すれば使えるが面倒な)のが嫌だと思ったのでやめました。

環境構築
LINE Developers
https://developers.line.me/ja/
↑LineBotを作るためにアカウント取得する
【公式】クラウドならアマゾン ウェブ サービス (A

元記事を表示

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.

元記事を表示

OTHERカテゴリの最新記事