- 1. Rubotyがサーバーレスで動くようにした
- 2. The Hitchhiker’s Guide to AWS Lambda
- 3. AWS LambdaでLaravelを動かす
- 4. Serverless Framework で API Gateway & Lambda を構築する
- 5. API Gatewayのlamdba連携時の引数のやり取りについて
- 6. AWS Lambda + Typescript + PuppeteerでWebスクレイピング
- 7. AWS Lambda/PythonでJSON形式でログを出すベストプラクティス
- 8. DynamoDBストリームをトリガーにLambdaを実行しSNS通知する
- 9. Amazon SES の配信結果をDynamoDBに保存するLambda関数
- 10. New Relic初心者がNew RelicでLambdaを監視設定してみた。
- 11. LambdaをVPC内に作ってちょっとだけハッピーになった話
- 12. AWS Lambdaで動的サイトのwebスクレイピングをしてtwitterに投稿するbotを作った(続)
- 13. Telegram botをAWS Lambdaでやってみた
- 14. 【AWS SAM】 DynamoDB+Lambda+APIGatewayでAPIを作る
- 15. Java8 リスト変換を Stream map で
- 16. [Netlify Formsと連携]AWS Lambda上にGmail自動返信スクリプト(Node.js)をデプロイしAPI化。
- 17. サーバーレスアセンブリ?
- 18. Lambda + CloudWatch + DynamoDB + LINE Notifyでリマインダーを作る
- 19. Alexa+lambdaでスマート(じゃない)ホームスキルをつくる
- 20. AWS Lambdaのランタイムサポートポリシーについて、および、廃止が迫った場合の対処法
Rubotyがサーバーレスで動くようにした
この記事は [PONOS Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ponos) の25日目の記事です。
昨日は[@kerimeka](https://qiita.com/kerimeka)さんの[ゲームにおけるFirebase 活用例](https://qiita.com/kerimeka/items/9cee8a122d815b3186d2)でした。??何とか全枠埋まりました!??
記事を書いて頂いたみなさん、ありがとうございました!——
[Ruboty](https://github.com/r7kamura/ruboty)という、Rubyでチャットボットが作れるOSSがあります。
個人的に凄く好きなOSSで、何とか趣味なり仕事で使えないかと考えています。(趣味方面だと、[@gymtter](https://twitter.com/gymtter)で一応使ってる。)## やりたかったこと
Rubotyはサーバー上に常駐して発言を待ち受け続けますが、これだと常に一定のリソースを
The Hitchhiker’s Guide to AWS Lambda
こんにちは、@yuimam です。
令和元年も年の瀬が迫ってきていますが、AWS Lambda というサービスが 2014 年にアナウンスされ、早くも 5 年の月日が流れました。5 年も経つと、リリース当初から機能追加やアップグレード、仕様変更などなど様々な変化があるもので、もはや AWS Lambda は一言では語れず一枚岩ではありません。
そこで、**The Hitchhiker’s Guide to AWS Lambda** と題しまして、Newbie でも Expert でも何かしら参考にできるような、AWS Lambda のガイドを作ってみようと思い立ちました。
(単に自分のカンペのためという説)皆さんのサーバーレス人生に少しでもお役に立てれば幸いです。
なお、下記の情報はすべて特筆ない限り、**東京リージョン** / **2019-12-25** 時点の情報です。
まだまだ書き足りていないところも多々あるので、随時追記をしていきたいと思います!# AWS Lambda とは?
**2014 年 11
AWS LambdaでLaravelを動かす
最近サーバーレス(Lambda)に興味があったので始めてみるかとは思ったものの
好きな言語であるPHPは標準でサポートされておらず。。。
どうにか動かす方法はないかと調べていたところ、[bref](https://bref.sh/)なるものを使えば簡単に動かせそう!しかもLaravelも動かせる⁉
だったので、その手順をまとめてみました。## 準備
以下のものが必要になります.
– AWSアカウント
– AWS CLI
– AWSアカウントアクセスキー及びシークレットキー
– npmコマンドこちらの準備については記事の内容ではないのでスキップします。
## serverlessコマンドをインストール
まずはserverlessコマンドをインストールします。
こちらはLambdaをデプロイする際に使用します。“`bash
$ npm install -g serverless
“`serverlessコマンドのインストールが完了したら、AWSアクセスキー及びシークレットアクセスキーを設定します
“`bash
$ serverless config cred
Serverless Framework で API Gateway & Lambda を構築する
この記事は [CodeChrysalis Advent Calendar 2019](https://qiita.com/advent-calendar/2019/codechrysalis) の記事です。
[Serverless FrameworkでDynamoDBを構築する](https://qiita.com/maaaashin324/items/014d2e5fc29d31f45cae)ことについての記事と[Serverless FrameworkでCognitoを構築する]ことについての記事もぜひ御覧ください。
# はじめに
[Serverless Framework](https://serverless.com/) はYAMLでサーバサイドの環境構築ができる、Infrastructure As Code の真骨頂です。確かにAWS等のコンソールでもポチポチクリックしながら環境構築はできますが、
1. 変更の管理ができない
2. 画面でポチポチクリックするのが本当に面倒(Lazy…)なのでServerless Framework の CLI でコマンド一発で
API Gatewayのlamdba連携時の引数のやり取りについて
API-Gatewayとlambdaで引数のやり取りする場合は、全部Stringで渡されるんだね。よく考えたら、QueryParameterの場合もあるし、JSONでやり取りするとは限らないか。
なので、
“`request.json
{
“user_id”: “string”,
“lang”: “string”,
“args”: {
“name”: “string”,
“keyWord”: “string”
}
}
“`こんな感じのjsonをAPI-Gatewayに対してPOSTする場合、lamdba側では、以下のような処理を行う必要がありますね。
“`python:sample.py
def lambda_handler(event, context):# request bodyはstringなので、jsonに変換する
body = json.loads(event[“body”])
# こんな感じにすると、user_idが取得できる。
user_id = body[“user_id”]
“`
AWS Lambda + Typescript + PuppeteerでWebスクレイピング
# AWS Lambda + Typescript + PuppeteerでWebスクレイピング
## 前提条件
– 開発環境
– Windows10
– Node.js 12.14.0-x64
– AWS CLI
– VS Code
– AWSアカウント
– IAMユーザー※※IAMユーザーはServerlessFrameworkのリソース作成に必要な権限が付与されていること(今回はAdministratorAccessを使用)、AWS CLIに`–profile serverless`で設定していることを前提とする
## Serverless Framework のプロジェクト作成
AWSリソースの管理に[Serverless Framework](https://serverless.com/)を使います。AWS Lambdaを使う上で必要な面倒くさいことを大体やってくれます。すごい。
### Serverless Frameworkのインストール
サービス作成コマンドを使うためにグローバルインストールします。
どうしてもグローバ
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 Listmonths =
Arrays.asList(“January”, “February”, “March”, “April”, “May”, “June”, “July”, “Augast”, “September”, “October”, “November”, “December”);
“`それぞれの要素の一文字目だけで構成されるリストを作ります。
#### 1. for 文を使う
一文字目を格納する空のリストを宣言し、for ループ内で一文字ずつ格納しています。“`java:for.java
final ListfirstChars = 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