- 1. Site24x7 の API 認証が OAuth 2.0 に変更されたので、アクセストークンを取得してみる。
- 2. AWSサーバレスでWebSocketを使ったWEBチャットを作ってみます!
- 3. 「Cloud functions VS AWS Lambda」を「お金」と「始めやすさ」で勝手に比較してみた
- 4. 素人がAWSに手を出してみた様子-3
- 5. lambdaを勉強した①
- 6. AWS lambda+scrapyで定期的にサーバレスなスクレイピング その1
- 7. カフェの注文でいつも焦るので、Reactアプリを作って解決した
- 8. ASK-CLIのask deployで”request must be smaller than 69905067 bytes for the UpdateFunctionCode operation”というエラーが出た
- 9. serverless-python-requirements利用時のファイル構成
- 10. APIGatewayのログのタイムスタンプをLambdaで加工してElasticsearch Serviceに送る
- 11. Lambda+APIGateway設定で「CORS の有効化」をオンにしたのにCORSエラーになる
- 12. Flutterで作ったアプリから入力した電話番号あてにAWS SNSからSMSの送信をする方法(ざっくり)
- 13. AWS Lambda のタイムアウト発生時に別の Lambda 関数を起動し、元の Lambda 関数の処理内容を取得する
- 14. Github ActionsでLambdaにデプロイする
- 15. Slackで誰かの承認をもらえたらRDSにクエリ実行して結果を返す仕組み
- 16. [awscli] lambdaのコード(zip)をダウンロードする
- 17. AWS LambdaのDestinationsを試してみる
- 18. やねうら王を AWS Lambda で動かす
- 19. Serverless Frameworkでevent scheduleをステージ毎に切り替える
- 20. Node.jsでGlobal Secondary Indexを使用して特定条件のレコードを抽出する
Site24x7 の API 認証が OAuth 2.0 に変更されたので、アクセストークンを取得してみる。
# 0.はじめに
以下の記事にある様に、サイト監視に [Site24x7](https://www.site24x7.com/) を利用しているんですが…、
* [StatusCake や Site24x7 と同じ様な海外のサイト監視サービスを色々と調べてみた \- Qiita](https://qiita.com/kusokamayarou/items/77e0cba7857a90143694)
* [Site24x7 での API キーの取得のやり方 \- Qiita](https://qiita.com/kusokamayarou/items/e2eec05d8ea2acf43594)
* [kintone アプリで管理しているサイト情報を、Site24x7 と StatusCake に連携させてみる \- Qiita](https://qiita.com/kusokamayarou/items/553f07ed0c904d02d6f1)先日、以下の様なメールが届きまして…、
* ![FireShot Capture 234 – Site24x7_ Migr
AWSサーバレスでWebSocketを使ったWEBチャットを作ってみます!
この記事は NTTテクノクロス [Advent Calendar 2019](https://qiita.com/advent-calendar/2019/ntt-tx)の2日目の記事です。
こんにちは。安田と申します。
NTTテクノクロスでAI関連の新製品開発を担当しています。早速本題からズレますけれども、マンガを描くのが最近の息抜きで、次のようなマンガを描いています。[マンガでわかるデータ連携](https://www.ntt-tx.co.jp/products/dataspidercloud/manga.html?utm_source=qiita&utm_medium=ac2019&utm_campaign=02)
[マンガでわかるAI時代のエンタープライズ・アーキテクチャ](https://www.ntt-tx.co.jp/column/yasuda_blog/20170413/?utm_source=qiita&utm_medium=ac2019&utm_campaign=02)
[マンガでわかるITストラテジー](https://www.itmedia.co.jp/e
「Cloud functions VS AWS Lambda」を「お金」と「始めやすさ」で勝手に比較してみた
# ▶ 対決条件
今回は最近流行りのサーバーレスの中でも「Cloud functions」と「AWS Lambda」の2つがどう違うのかを個人的な観点で勝手に比較してみることにしました!とはいえ漠然と比較するとしても比較のしようもないので、今回は「 *お金* 」と「 *始めやすさ* 」という2つの軸で調べて比較することにしてみました!
* お金
* 関数に 512 MB のメモリを割り当て、3,000,000 回実行し、毎回の実行時間が1秒間だった場合にかかるお金
* 実行回数が1,000万の月
* 実行時間が100msecの月* 始めやすさ
* ドキュメントやチュートリアルなどの充実度に限定# ▶ まずは前哨戦、各種サービスの謳い文句を比較
Cloud Functions
> イベント ドリブンなサーバーレス コンピューティング プラットフォーム
> * クラウドで簡単にコードを実行、スケーリング
> * 自動スケーリングによって実現される高い可用性と耐障害性
> * プロビジョニング、管理、パッチ適用、アップデートのためのサーバーが
素人がAWSに手を出してみた様子-3
#素人がAWSに手を出してみた様子-3
どうもはじめまして。
前回
[【素人がAWSに手を出してみた様子-2】](https://qiita.com/entakar/items/a77a1448161efc90eb31)
ではEC2でインスタンス作成→とりあえずindex.htmlを表示してみよう
を行いました。そして第3回は**lambda**
バタバタして前回から更新が大幅に遅くなった。。。だめだなぁ
##lambdaを使ってみよう
まずはサービスから【コンピューティング】→【Lambda】を選択します。オプションを選択しますが、今回は【一から作成】を選択します。
ランタイムは【Node.js】を選択しました。
lambdaを勉強した①
今更ながらlambdaについて勉強しました。
今回は概要についてです。#lambdaとは
– サーバーの管理を気にすることなくコードを実行できるサービス
– ほかのAWSのサービスをトリガーにコードを実行できる
– APIのように使うことができる
– 課金されるのはコードを実行した時間と、回数によって課金(月に100万リクエストまで無料)
– デフォルトで使える言語はJava、Node.js、C#、Python、Go、PowerShell、Ruby
– Javaは実行時にコンパイルが行われる関係で速度が遅い
– lambda layerを利用することでほかの言語も使用可能下記はlambdaのイメージ
API GateWay
![lambda(api).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/369848/3ce8676f-aff0-3c14-c536-f38dd544bc97.png)S3
![lambda(s3).png](https://qiita-image-store.s3.a
AWS lambda+scrapyで定期的にサーバレスなスクレイピング その1
初投稿!
本当はサーバレスまで一つの記事に入れたかったけど間に合わなかった・・・。
ということで今回はスクレイピング編になります。## やりたいこと
定期的に情報が更新されるwebページを自動でスクレイピングしたい!
## 目標
Yahoo!天気(東京)のデータを6時間おきに取得。## 方法
Python + Scrapy + AWSlambda + CroudWatchEventsあたりでいけそう・・・?## とりあえずやってみる
### まずはスクレイピングから
以下手順でクローリング、スクレイピング部分を作成。1. Scrapyインストール
2. Scrapy projectを作成
3. spiderの作成
4. 実行### 1. Scrapyインストール
“`bash
$ python3 -V
Python 3.7.4$ pip3 install scrapy
…
Successfully installed$ scrapy version
Scrapy 1.8.0
“`### 2. Scrapy projectを作成
コマンドを
カフェの注文でいつも焦るので、Reactアプリを作って解決した
## アプリ概要
スタバやドトールなどの主要カフェチェーンのドリンク・フードメニューを店ごとに一覧できるアプリを作りました。
商品名と各サイズの値段が表示され、行をタップすれば公式の詳細ページに飛びます。
## なぜ作ったか
いわゆる「喫茶店」だと席についてからゆっくりとメニューを見られますが、**スタバなんかだとレジの目の前で即断しないといけない**こともあります。
後ろに人が並んでるし、目の前には店員さんもいる・・・。
この状況では**メニューをくまなく見れないし、結局前と同じ無難な注文をしがち**です。
**並んでいる最中にゆっくりと吟味できたらいいのに**と思ったので作りました。
## URL
[アプリはこちら](https://cafe-menu.site/)
[リポジトリはこちら](h
ASK-CLIのask deployで”request must be smaller than 69905067 bytes for the UpdateFunctionCode operation”というエラーが出た
## デプロイ失敗したときの様子
Alexaスキル開発時、VSCodeにてASK-CLIでask deployしたところ、以下のようなメッセージが出てデプロイに失敗しました。
“`
[Error]: Lambda update failed. Lambda ARN: arn:aws:lambda:ap-northeast-1:xxxxxxxxxxxx:function:xxxxxx
Request must be smaller than 69905067 bytes for the UpdateFunctionCode operation
“`↓VSCodeのターミナルの様子
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/354808/8a084d7d-d476-5f85-066e-ebe3e87bcaec.png)## 原因調査
調べてみたところ、どうもlambdaにデプロイするファイルが50MBを超過したことが原因では?という結論に至りました。
[コードログ –
serverless-python-requirements利用時のファイル構成
こんにちわ。Patheeの廣瀬です
`serverless-python-requirements`利用時の
ファイル構成についての情報があまり見当たらなかったので書いていきます## 状況
会社で`AWS lambda`を利用したAPIを開発している
新規プロジェクトのバックエンドの一部です## 概要
– 言語は`Python3.7`
– パッケージ管理は`Pipenv`
– `Serverless Framework`を利用して開発・実行・デプロイ
– パッケージは`serverless-python-requirements`を利用してLayer化
– 開発環境はDocker内に構築し、Docker内でローカルテスト(UT等)を実施する## ディレクトリ構成
“`
root
├── lambda
│ ├── env
│ │ ├── dev
│ │ │ └── resource.yml
│ │ └── prod
│ │ └── resource.yml
│ ├── handler
│ │ └── aaa
APIGatewayのログのタイムスタンプをLambdaで加工してElasticsearch Serviceに送る
# はじめに
APIGatewayのログをElasticsearch Serviceに送ってKibanaで可視化しようとしたときの手順。
ただ、kibanaで対応しているタイムスタンプの形式がAPIGatewayが出力するタイムスタンプの型と一致していなかった。
そのため、Lambdaでタイムスタンプの形式を変換してKibanaでタイムスタンプとして扱えるようにした。# 構成
APIGatewayのアクセスログは、Kinesisにしか出力できないため、Kinesisを利用している。
![aaa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478113/4dd31a14-db75-a75c-dbd1-8698667d8c6d.png)# 手順
1.Lambdaの作成
2.Kinesis Data Firehoseの作成
3.APIGatewayでアクセスログを出力する設定追加
※Elasticsearch Serviceのドメインは作成済の前提# 1.Lambdaの作成
Lamndaの環境変
Lambda+APIGateway設定で「CORS の有効化」をオンにしたのにCORSエラーになる
# 「CORS の有効化」をオンにしたのに
## ハマりポイント
APIGateway設定で「CORS の有効化」をオンにしているのに,
> Access to XMLHttpRequest at ‘https://xxxxxxx.execute-api.ap-northeast-1.amazonaws.com/xxx/xxxx’ from origin ‘http://xxxxx’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.とエラーが返ってくる.
## 解決策
Lambdaのreturnのヘッダーに以下のように,Access-Contraolについて書かなきゃダメだった.“`json
return {
‘isBase64Encoded’: False,
“headers”: {
“Access-Control-Allow-Origin”
Flutterで作ったアプリから入力した電話番号あてにAWS SNSからSMSの送信をする方法(ざっくり)
# Flutterで作ったアプリから入力した電話番号あてにAWS SNSからSMSの送信をする方法
## やりたいこと
入力された電話番号あてにPINを送信したい!
## 使うもの
“`
AWS
| DynamoDB
| API Gateway
| Lambda
| L Node.js 12x
L SNS
Flutter
L http 0.12.0+2
“`## DynamoDBの準備
PINコード保存用のテーブルを作成します。
“`json
“pin”: {
“user_id”:””,
“pin”:””,
“ttl”:”” //TTL設定
}
“`## Lambdaの準備
SMSの送信は “`publish()“`を使うことで簡単に送ることができます。
“`js
const AWS = require(‘aws-sdk’);
const sns = new AWS.SNS();
const documentClient = new AWS.DynamoDB.DocumentClient();exports.handl
AWS Lambda のタイムアウト発生時に別の Lambda 関数を起動し、元の Lambda 関数の処理内容を取得する
#はじめに
こんにちは。はじめまして。
最近、AWS で本番稼働する時のことをかんがえるようになりました。
Lambda の負荷テストをしていると、タイムアウトが発生して「コマッタ…」となった時のことを書いてみます。#Lambda タイムアウト 15分問題
Lambda ってタイムアウト時間設定しなくちゃいけなくて、最大 15分しか設定できないんですよね。
(参考)
https://aws.amazon.com/jp/blogs/news/aws-lambda-timeout-15min/で、15分以上処理しちゃうと、CloudWatch にタイムアウトのログを出すだけ… と。
まあ、Lambda に重たい処理をさせるな!ということでしょうけど、
もう作ってしまったし… なんとかできないものか…
せめて、ユーザに処理できなかったことを伝えられないものか…#対策
ちょっと調べてみると、色々と対策はある模様。
– [タイムアウトでエラーとなってしまったLambdaのリカバリを行うLambdaを作成してみました](https://dev.classmethod.jp/se
Github ActionsでLambdaにデプロイする
## TL;DR
以下の要件の実装備忘録です。
– GitHubでreleaseが作成された時、Lambdaにコードを反映させバージョンを更新する## サンプルディレクトリ構成
“`
some-lambda-function-repo
├── .github
│ └── workflows
│ └── lambda-cd.yml
├── README.md
├── bootstrap
└── handler.sh
“`### GitHubのSecretsに以下を設定
– `AWS_ACCESS_KEY_ID`
– `AWS_SECRET_ACCESS_KEY`必要なPolicyに関しては割愛します
## Github Actions
“`lambda-cd.yml
name: Lambda Continuous Deliveryon:
push:
tags:
– ‘*’
jobs:
lambda-cd:
runs-on: ubuntu-latest
steps:
– uses:
Slackで誰かの承認をもらえたらRDSにクエリ実行して結果を返す仕組み
## 概要
– SlashコマンドでAWSのアカウントがなくてもRDSにクエリ実行する仕組みを作りました。
– 同じチャンネルで実行者以外の誰かの承認をもらえないと実行できません。
– 実行結果をslackにそのままPostするのではなく、s3にcsv形式で保存し、署名付きURL(有効期限15分)をslackにPostします。
– 特定のチャンネルからのslashコマンドしか受け付けないので、悪意のある第3者がこっそりクエリ実行して結果を閲覧することはできません。コードは以下に公開しています。
https://github.com/m22r/sequelcat## コマンド実行時の流れ
### コマンド実行時
クエリを流したい人が特定のチャンネルでslashコマンドを入
[awscli] lambdaのコード(zip)をダウンロードする
“`
func=your-lambda-function-name
url=$(aws lambda get-function –function-name ${func} | jq -r ‘.Code.Location’)
curl -o lambda.zip $url
“`
AWS LambdaのDestinationsを試してみる
AWSから割とすごい機能が発表されました。
Introducing AWS Lambda Destinations
https://aws.amazon.com/jp/blogs/compute/introducing-aws-lambda-destinations/![スクリーンショット 2019-11-27 6.51.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102769/8dcc8bb4-f376-17ae-1ccf-b64739c3289b.png)
Lambdaの実行結果に従って次のアクション(AWSサービス)を指定できる、というものです。
成功/失敗の条件で流れを制御したい場合には、Step Functionsを使う必要もなく、Lambdaだけで完結することができるようになりました。早速試してみます。
# 呼び出し元のLambdaを適当に定義
こんな感じのPythonを書きます。(Python 3.7を利用)
“`python
import json
impor
やねうら王を AWS Lambda で動かす
[やねうら王](https://github.com/yaneurao/YaneuraOu) は 2019 年現在最も強い将棋 AI の一つです。AWS Lambda 上で実行できれば、API Gateway と連携したりして夢が広がります。
やねうら王 V4.88 を AWS Lambda 向けにビルドしてみよう。# 実行環境
AWS Lambda の実行環境 OS は Amazon Linux 2 なので、Amazon Linux 2 上でビルドすれば十分です。
SIMD 拡張命令は 2017 年時点で SSE 4.2 が動くらしい。– [AWS Lambda ランタイム](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-runtimes.html)
– [AWS LambdaのCPUを見てみる](https://qiita.com/kurimoto/items/eca091cccc54d7c07634)# ビルド
[Amazon Linux の Docker イメージ](https://hub.d
Serverless Frameworkでevent scheduleをステージ毎に切り替える
## 環境
* Serverless Framework
## やりたいこと
CloudWatch Eventの定期実行をステージングでは手動実行、本番では定期実行させたいということがあったので、備忘録として残しておきます。
## serverless.yml
至って簡単です。
“`yaml
service: hoge
provider:
name: aws
runtime: nodejs8.10
stage: ${opt:stage, self:custom.defaultStage}
region: ap-northeast-1custom:
defaultStage: dev
schedule_active:
dev: “false”
prod: “true”
default: “false”functions:
hello:
handler: handler.hello
events:
– schedule:
rate: rate(30 minutes)
Node.jsでGlobal Secondary Indexを使用して特定条件のレコードを抽出する
## 環境
* Nodejs
* AWS Lambda
* AWS DynamoDB## はじめに
DynamoDBではパーティションキーもしくはレンジキーを使用してしか基本的には抽出が出来ないのですが、任意のキーを元に抽出を行いたいという時は、Global Secondary Index(以下GSI)を使用する事で任意のキーでレコードを抽出することが出来ます。
## 注意点
以下の点に気をつける必要があります。
* GSIは1テーブルにつき20件までしか作成出来ない
* GSIのキーに指定出来るカラムのデータ型は文字列、数値、バイナリのいずれかである必要があります
* Serverless Frameworkではまだそこまで自由なGSIは作成出来ないようなので、DynamoDBコンソールからGSIを作成する必要がある(ハッシュキー or レンジキー以外でのGSIの作成がうまくいかなかった)例えばboolean型のカラムをキーにGSIは作成出来ません(私がやろうとしていました…)
参考情報:
* [DynamoDB での制限](https://docs.aws.a