- 1. lambdaにTypeScriptをデプロイする手順(zip)
- 2. AWS Lambdaのアプリケーション作成を使ってCI/CDパイプラインを一気に構築
- 3. 【AWS】CodePipelineから呼び出したLambdaがずっと進行中になっている問題と対応
- 4. Amazon Comprehendが日本語対応したのでAlexaスキルで感情分析してみた
- 5. 質問です/LambdaとTwitterApiを使ってBotを作ったのものの、30分毎のイベント発火がうまく作動しない
- 6. Lambdaのログをいい感じにS3に保存し続ける方法
- 7. 【DynamoDB】LastEvaluatedKeyを使ってscanリクエストで全件取得
- 8. AWS Lambdaでのコールドスタートのメモリの罠と、Invoke Lambdaでのタイムアウトの罠
- 9. CodePipeLineからLambda呼び出しを行うCloudFormationテンプレートの定義
- 10. AmazonAWSLambdaでRuby使ってpostgresにアクセスする時にIgnoring pg-XX because its extensions are not built. Try: gem pristine pg と出た時の対処法
- 11. Amazon ECRのイメージスキャン結果をSlackに通知する
- 12. AWS初心者がLambdaでLINE BOIを作る
- 13. AWS SDK for Ruby v3をAWS Lambdaで使おうとしたらタイムアウトした
- 14. kintoneにサーバーレスで印刷機能を実装する(AWS Lambda + Thinreports)
- 15. AWSサーバレスアーキテクチャで、よくある安否確認システムをSlackに対応させる
- 16. brefを使って簡単にLambdaのPHP Custom Runtime環境を構築する
- 17. AWS Cloud9 に Ruby 2.5.0 と thinreports gem を インストールして Lambda で PDFを生成する方法
- 18. AWS Amplify の AppSync API に IAM 認証を追加する
- 19. AlexaとAWS Lambdaで遊ぶ
- 20. LambdaでMicrosoft SQL Server にODBC経由で接続する+Layerとして動作させる方法
lambdaにTypeScriptをデプロイする手順(zip)
# はじめに
TypeScriptをlambdaにデプロイする方はServerless FreamworkやSAMなどがあります。
しかし、installや設定などの事前準備が必要で、手軽ではありません。
そこで今回は簡単にデプロイして動作確認するために、zip化してデプロイする手順を記載していきます。## 事前準備
### typescriptのインストール`npm install -g typescript`
### AWS CLI
[AWS CLI のインストール](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-install.html)### lambda関数の作成
あらかじめ、AWSコンソールやcliでlambda関数を作成しておきます。AWS Lambdaのアプリケーション作成を使ってCI/CDパイプラインを一気に構築
# AWS Lambdaのアプリケーション作成とは
AWS Lambdaのアプリケーション作成機能を利用してLambda関数を作成すると、Lambda関数自体の他に
– Lambda関数のソースコード等を管理するGitリポジトリとしてCodeCommit
– CodeCommitのmasterブランチの更新を契機にLambda関数へのデプロイを行うCodePipeline
等々、CI/CDパイプライン実現のためのAWSリソースが同時に作成されます。
Lambda関数自体は手軽に作ったものの、次のステップとしてCI/CI環境を構築するのは腰が重く、ソースの更新はマネジメントコンソール上で実施している・・・といったケースを改善するアプローチとして、このようなCI/CD
【AWS】CodePipelineから呼び出したLambdaがずっと進行中になっている問題と対応
## 問題
**ずっとインジケータがぐるぐるしている**
(10分立ってもそのままで)もう気が狂う!!!S3へのデプロイ完了後にCloudFrontのキャッシュを消すLambdaを呼びたいなーと思ったときに躓いたのでまとめ。
## 原因
**`codepipeline:PutJobSuccessResult(※)`を返却しないため**
※ 失敗の場合は`codepipeline:PutJobFailedResult`### PutJobSuccessResultって?
> PutJobSuccessResult
> ジョブワーカーによってパイプラインに返されたジョブの成功をレポートするために必要です。
Amazon Comprehendが日本語対応したのでAlexaスキルで感情分析してみた
# 概要
2019年11月7日にAWSの自然言語処理サービスである**Amazon Comprehend**が日本語に対応したので、早速Alexaスキルで感情分析を試してみました。スキルの作成には[ASK CLI](https://developer.amazon.com/ja/docs/smapi/ask-cli-command-reference.html)を使い、言語はPython3を使っているのでその辺の知識があると分かりやすいかと思います。
# やった事
Amazon Comprehendの感情分析機能である**Sentiment**を使ってユーザーからの入力を感情分析し、その結果によってレスポンスが変わるAlexaスキルの作成# 東京リージョンではまだ使えない
2019年11月8日時点でAmazon Comprehendはまだ東京リージョンに対応していないので、ASK CLIでスキル作成する前に `aws configure` でリージョンを `us-east-1` などに変更してあげる必要があります。#### 現在対応しているリージョン一覧 (2019年1
質問です/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での動作手順が記載