- 1. 質問です/LambdaとTwitterApiを使ってBotを作ったのものの、30分毎のイベント発火がうまく作動しない
- 2. Lambdaのログをいい感じにS3に保存し続ける方法
- 3. 【DynamoDB】LastEvaluatedKeyを使ってscanリクエストで全件取得
- 4. AWS Lambdaでのコールドスタートのメモリの罠と、Invoke Lambdaでのタイムアウトの罠
- 5. CodePipeLineからLambda呼び出しを行うCloudFormationテンプレートの定義
- 6. AmazonAWSLambdaでRuby使ってpostgresにアクセスする時にIgnoring pg-XX because its extensions are not built. Try: gem pristine pg と出た時の対処法
- 7. Amazon ECRのイメージスキャン結果をSlackに通知する
- 8. AWS初心者がLambdaでLINE BOIを作る
- 9. AWS SDK for Ruby v3をAWS Lambdaで使おうとしたらタイムアウトした
- 10. kintoneにサーバーレスで印刷機能を実装する(AWS Lambda + Thinreports)
- 11. AWSサーバレスアーキテクチャで、よくある安否確認システムをSlackに対応させる
- 12. brefを使って簡単にLambdaのPHP Custom Runtime環境を構築する
- 13. AWS Cloud9 に Ruby 2.5.0 と thinreports gem を インストールして Lambda で PDFを生成する方法
- 14. AWS Amplify の AppSync API に IAM 認証を追加する
- 15. AlexaとAWS Lambdaで遊ぶ
- 16. LambdaでMicrosoft SQL Server にODBC経由で接続する+Layerとして動作させる方法
- 17. Mockを使ってLambdaをテストする
- 18. API Gateway&Lambdaデプロイエラー集
- 19. Elixir on AWS LambdaからDynamoDBへアクセス
- 20. RDS Aurora Cluster 自動起動停止簡易版(Lambda不使用版)
質問です/LambdaとTwitterApiを使ってBotを作ったのものの、30分毎のイベント発火がうまく作動しない
初心者です。
LambdaとTwitterApiを使って、Twitterにステイーブジョブスの名言を、30分毎にツイートする自動BOTと作成しました。
![001.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29856/5de884a5-e6ff-648b-fcf3-3c15dfe830e6.jpeg)動作して、ちゃんとツイートもしたのですが、時間の間隔が常に30分毎ではなく、1時間間隔の時や、時には2時間おきの場合もあります。
![002.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/29856/bacff4d1-6dcd-d27b-f44f-cc0544141102.jpeg)Lamda側では、30分毎にイベントが発火しているようなのですが、何が原因かご教示いただきたいです。
![003.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazona
Lambdaのログをいい感じにS3に保存し続ける方法
CloudWatch Logsに出力されたLambdaのログをS3に保管する方法です。
CloudWatch Logsのサブスクリプションという機能でログをKinesis Data Firehoseに送信します。
そのままS3に出力すると複数のログが1行に並ぶ形になってしまいますが、Kinesis Data Firehoseのデータ変換機能で改行を加えることで解決します。こんな感じです。
![名称未設定ファイル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/41574/ebe981c7-0dde-83eb-cd68-580bed8f0695.png)
# S3バケットの作成
ログを出力するバケットを作成します。今回は`log-backup-xxxxx`とします。
# データ変換用Lambdaの作成
データ変換用LambdaはAWSが設計図を用意してくれているので簡単に作成できます。
マネジメントコンソールでLambda関数を作成します。| 項目 | 選択 | 説明 |
|—|–
【DynamoDB】LastEvaluatedKeyを使ってscanリクエストで全件取得
## はじめに
RDBMSを使っていると、allとかで全件取得出来て特に気にする必要がないのですが、DynamoDBでは1MBまでのデータ量の件数のみしか取得が出来ないので、知っていないとあれ全件取得出来ていない…みたいなことになり私のように痛い目にあってしまうので、自分への戒めの意味も込めて残しておきます。
情報ソース:[DynamoDB でのスキャンの使用](https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Scan.html)
## 環境
* Nodejs
## 実装
“`js
const AWS = require(‘aws-sdk’);
const DynamoDB = new AWS.DynamoDB.DocumentClient({region: “ap-northeast-1”});
const tableName = ‘hoges’;module.exports.hello = async (event, context) => {
try {
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環境を構築する
## 概要
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が正しくないとエラーが起きる
“`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を入れてセットしておく
“`
$