- 1. GoogleAssistantからWebhookでLineの特定人物へPush通知
- 2. AWS SAM アプリケーションをデプロイする
- 3. ConnpassイベントをSlack通知するツールを作ってTerraform化してみた
- 4. AWS Lambda(Python)を使うならのまとめ
- 5. API GatewayのCustom AuthorizerのLambda関数が呼ばれない
- 6. AWS Lambda入門③(Node編)〜API Gatewayで関数を公開する〜
- 7. Lambda から DynamoDB にアクセス (Node.js)
- 8. AWS Lambda入門②(Node編)〜DynamoDBにアクセスする〜
- 9. AWS Lambdaでデフォルトでは用意されていないコマンドを呼ぶ
- 10. Node.js製Lambdaの速度劣化箇所をX-RAYを使って特定する
- 11. Serverless Framework で AWS Lambda と API Gateway をデプロイする
- 12. 疑似的にNATゲートウェイを停止・起動する
- 13. Lambda から S3 を使う (Python)
- 14. Lambda から S3 を使う (Node.js)
- 15. Serverless NestJS
- 16. 【初心者向け】LambdaとAlexaスキルの連携設定
- 17. 【初心者向け】LambdaでAlexaカスタムスキルと連携する関数を作成
- 18. Cron の外部実行とメール送信の追加 – Nextcloud 環境の構築を通じて AWS での環境構築を体験する⑥
- 19. Serverless Framework lambda 1プロジェクトで複数関数を定義したい
- 20. Next.jsをserverlessでビルドしてawsにデプロイするには(s3, lambda, apigateway, route53)
GoogleAssistantからWebhookでLineの特定人物へPush通知
##実際の図
GoogleAssistantで”アイで”と発話すると”hello”と返し、Line側には”アイで”がPUSH通知されます。
![1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595220/156c8c65-1ec2-eb8b-5f81-b1eb78a9b688.jpeg)
![2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/595220/71b7a38c-1f1d-bcd4-159e-5586227a409e.jpeg)##そもそも
GoogleAssistant→DialogFlow→LineはIntegrationsで設定すればすぐできますが、
テキストを返すことはできません。
またIntegrationsの方法は自分のLINEへはPUSH通知できますが、特定の人へPUSH通知はできません。基本、[google homeで子供の宿題管理をする](https://qiita.com/sho
AWS SAM アプリケーションをデプロイする
https://aws.amazon.com/jp/serverless/sam/
AWS SAM (Serverless Application Model) は、AWS 上にサーバーレスアプリケーションを構築するためのオープンソースフレームワークで、CloudFormation のパッケージを簡単に作成、デプロイできるようにしたものです。
v0.33.1 でインタラクティブモード(`deploy –guided`)が実装され、サーバーレスアプリケーションの配布・デプロイが劇的にシンプルになったと思います。
## セットアップ
Docker, AWS CLI, AWS SAM CLI をインストールする必要があります。
### Docker
[Docker](https://www.docker.com/) をインストールします。
### AWS CLI
AWS アカウントを持っていればインストール済みだと思いますが一応。[AWS CLI](https://aws.amazon.com/jp/cli/) をインストールし、認証情報を設定しておきます。
例) bre
ConnpassイベントをSlack通知するツールを作ってTerraform化してみた
Connpassの勉強会情報をSlack通知するツール(python)を作ってterraformでデプロイ自動化してみました。
ものはこちら → https://github.com/ishim0226/ConnpassToSlackいくつかパラメータセットしてapplyするだけなので、数分でデプロイできます。
## 作った背景
普段、インフラエンジニアとして働いておりプログラミングすることがあまりないので、勉強してみたいと思ったのがきっかけです。
どうせならインフラ部分のスキルを掛け合わせたいと思い、クラウド上でインフラコード化を前提に考えた結果、このようなものを作ってみました。
おかしな箇所ありましたら、コメントいただけると幸いです。## ツールの特徴
ざっくり特徴をあげると、以下のようなものです。
– 新規追加されたイベントまたは、更新があったイベントのみ通知します。(通知済みイベントをDBで管理してます)
– 以下で通知するイベントをフィルターできます。
– キーワード(複数のOR指定が可能、※ANDや除外はできません)
– 開催場所(複数のOR
AWS Lambda(Python)を使うならのまとめ
## はじめに
AWS Lambda(Python)を使うならやったほうが良いことをまとめてみた。
まだ試していないものも含む。随時更新。## やったほうがよさそうなこと
– Jeffyフレームワークの適用
トレースやロギングの共通処理の実装を簡略化できる。– AWS Lambda Destinationsの適用
Lambdaの実行結果に応じて次の処理を実施することができる。
https://qiita.com/kojiisd/items/efcb2ac3d5cc176534ba– AWS Lambda Layersの適用
よく使うライブラリを共通化できる。
https://qiita.com/t_okkan/items/394a15577bd1aad46ec3– 並列処理化
重い処理を並列処理する。
https://qiita.com/kenmaro/items/69fdd84e18e793a21790
https://aws.amaz
API GatewayのCustom AuthorizerのLambda関数が呼ばれない
cdkを使ってREST APIを構築しています。
API Gatewayの認証にLamdba関数をカスタムAuthorizerとして使用していたところ、あるタイミングで突然認証が通らなくなってしまった。# 現象
– カスタムオーソライザーのテスト機能では正しく動く(Lambda関数も実行される)
– Postmanからのリクエストでは認証のためのLambda関数がそもそも動かない手動でAPIをマネジメントコンソールからデプロイしたところ動くようになりました。
https://stackoverflow.com/questions/52549538/aws-api-gateway-custom-authorizer-not-invokedcdkのバグなのかな?
開発初期は上手くデプロイできたと思うんだけど、何かの変更が反映されないのか。。。
謎い。それにしてもハマった。
AWS Lambda入門③(Node編)〜API Gatewayで関数を公開する〜
## 概要
– [AWS Lambda入門①(Node編)〜関数をデプロイして動かす〜](https://qiita.com/ozaki25/items/883aec0ab4398aa4abbe)と[AWS Lambda入門②(Node編)〜DynamoDBにアクセスする〜](https://qiita.com/drafts/d3c5b5e6954d5b4af95a/edit)の続編です
– 今回は前回までに作成したLambda関数をAPI Gatewayを使ってHTTPでアクセスできるように公開します## Api Gatewayとは
– API GatewayはAWSが提供するサービスでHTTPでアクセス可能なAPIを作成できるサービスです
– AWSの様々なサービスの呼び出しができるのでクライアントからするとLambdaなどをHTTPアクセスで実行するような感覚で使うことができます## API GatewayでLambda関数を公開する
### Hello関数を公開してみる
– まずは前回までで作ってあるHello関数を公開してみます
– `serverless.y
Lambda から DynamoDB にアクセス (Node.js)
テーブルの一覧
“`js:list_tables.js
var AWS = require(“aws-sdk”);var dynamodb = new AWS.DynamoDB({region: ‘us-east-1’})
var params = { Limit: 100}
exports.handler = async (event) => {
console.log(“*** start ***”)
try {
var data = await dynamodb.listTables(params).promise()
console.log(data)
} catch (ee) {
console.log(ee)
}const response = {
statusCode: 200,
body: JSON.stringify(‘Hello from Lambda!’),
}
return response;
}
“`テーブルの説明
“`js:describe_table.js
AWS Lambda入門②(Node編)〜DynamoDBにアクセスする〜
## 概要
– [AWS Lambda入門①(Node編)〜関数をデプロイして動かす〜](https://qiita.com/ozaki25/items/883aec0ab4398aa4abbe)の続編です
– 今回はLambdaからDynamoDBにアクセスしてデータを保存したり取得したりしてみます
– テーブルから全件取得、1件取得、1件登録の3つの関数を作成します## DynamoDBとは
– AWSが提供するマネージドなデータベースサービスです
– RDBとは異なりkey-value形式なドキュメントデータベースです## LambdaからDynamoDBにアクセスしてみる
### DynamoDBの設定
– まずはDynamoDBを使うためにServerlesFrameworkの設定をします
#### DynamoDBのテーブル定義の設定
– DynamoDBはデータベースなのでテーブルの作成からはじめます
– これまでと同じようにこれもServerlessFrameworkの機能で行うことができます
– 今回はHelloテーブルを作ってみます
–
AWS Lambdaでデフォルトでは用意されていないコマンドを呼ぶ
# やったこと
AWS LambdaでPythonからgsコマンドを呼んでPDFを結合しました。
# 経緯
業務でPDFの結合を行う必要があって、PythonのPyPDF2を使って結合をする実装になっていました。
しかし、このPyPDF2さんはPDFのファイル構造がPDFのbasicなファイル構造(つまりheaderがあって、bodyがあって、Cross-reference Tableがあって、Trailerがあるみたいなもの)を前提としていて、Cross-reference TableがないとかTrailerがないPDFファイルを結合しようとするとエラーになってしまっていました。
つか、PDFのファイル構造が多少おかしくなってても表示できるようになってるほうがおかしいだろ、やめてくれ
って思ったりもしましたが、ブラウザで表示できてるのに、結合できないのはなんとかしたいということで、なんとかすることに。。。# 環境
AWS Lambda Python3.7# 解決
「ghostscriptをPythonから呼び出すのはどうですか?手元ではいけましたよ」
と聞いたのでさっそ
Node.js製Lambdaの速度劣化箇所をX-RAYを使って特定する
# はじめに
「[お気に入りのテレビ番組の有無を答えてくれるAlexaスキルを作ってみた](https://qiita.com/masaminh/items/1153f34891b1c04b4ee1)」でNode.js製のLambdaを作ったのですが、
>ただ、スキルを呼び出した後、返答が返ってくるまで少しタイムラグがあるのが気になりますね
…
>いずれにしてもX-RAYを仕掛けて、番組表取得で遅くなっているのか、その後の処理で遅くなっているのかなどを見極めたいと思っています。ということで、X-RAYを使って、速度が遅くなっている箇所を特定したいと思います。
# コンソールからの設定
まず最初にコードには手を入れず、LambdaのコンソールからX-RAYの設定をしてみます。
Lambdaのコンソールにて、対象関数の「AWS X-RAY」の箇所のチェックボックスをONにします。
Serverless Framework で AWS Lambda と API Gateway をデプロイする[Serverless Meetup Tokyo #16 (オンライン開催)](https://serverless.connpass.com/event/165352/) を拝見していて、ちょうど今、AWS への各種リソースのデプロイの自動化が課題だったので、よい機会と思い Serverless Framework を使ってみた。
尚、Serlverless Framwork については知っていたが、offline-start しか使ったことがなかった程度の人間です。## やったこと
弊社では Webシステムを、
* フロントエンド: SPA(Angular)
* バックエンド:
* REST っぽいAPI: Lambda + API Gateway
* DB: PostgreSQL 他で組むことが増えてきていて、プロジェクトの取っ掛かり時の環境構築を手動でやっているのがダルくなってきた。
今回は、「REST っぽいAPI: Lambda + API Gateway」のところを Serverless Framework で自動化してみた。## 手順
疑似的にNATゲートウェイを停止・起動する
# VS 使ってないNATゲートウェイの課金
NATゲートウェイは思いのほか使用料金が高く、夜間の開発環境など使用していない時は止めたい。
ただ現在において停止機能は存在しておらず、停止イコール削除となる。
停止という点ではNATインスタンスを立てて停止すれば良い話だが、それでは単純に面倒。せっかくのマネージドサービスは使いたい。
ならば、使用していないときにNATゲートウェイを削除し、使いたいときに必要な情報をもって再作成するスクリプトを作成すればいい。# やりたいことを図にしてみる
![gomi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/558188/0b0f391e-afea-597b-dd03-da856764aea1.png)
UMLの書き方は正式に勉強していないので許してほしい。# 停止(削除)スクリプト
“`Python
import boto3client = boto3.client(‘ec2’)
natGateWayList = []
routeTableL
Lambda から S3 を使う (Python)
バケットの一覧
“`py:list_buckets.py
# ——————————————————————
import json
import boto3
print(‘Loading function’)
s3 = boto3.resource(‘s3’)def lambda_handler(event, context):
print(“*** start ***”)
#
it = 1
#
for bucket in s3.buckets.all():
print(str(it) + ‘:’ + bucket.name)
it += 1return {
‘statusCode’: 200,
‘body’: json.dumps(‘Hello from Lambda!’)
}# ——————————————–
Lambda から S3 を使う (Node.js)
バケットの一覧
“`js:list_buckets.js
‘use strict’const AWS = require(‘aws-sdk’)
var s3 = new AWS.S3()exports.handler = async (event) => {
console.log(“*** start ***”)
try {
var data = await s3.listBuckets().promise()
console.log(data.Buckets)
} catch (ee) {
console.log(ee)
}const response = {
statusCode: 200,
}return response
}
“`バケット内のファイルの一覧
“`js:list_files.js
// —————————————————————var A
Serverless NestJS
NestJSを利用したLambda&API GatewayのServerlessをやってみます。
注意点としては、NestJSはExpress.jsと比較すると重いフレームワーク(フルスタック)なので、起動に時間がかかってしまい、あまりサーバレスに向いているとは言えないです。
が、個人で利用する場合や社内系のアプリケーションの場合などは、サーバレスだと安くて試しやすいと思うので、是非使ってみてください。## NestJSプロジェクト作成
いつものやつです。
ひとまずローカルでHello Worldができる状態にします。### プロジェクト作成
“`console:
$ nest new nest-serverless-test
“`### 動作確認
“`console:
$ cd nest-serverless-test
$ npm run start
~ 中略 ~
[Nest] 3935 – 2020-02-29 19:19:07 [NestApplication] Nest application successfully started +1ms
`
【初心者向け】LambdaとAlexaスキルの連携設定
#LambdaとAlexaスキルの連携設定
前の記事:[LambdaでAlexaカスタムスキルと連携する関数を作成](https://qiita.com/kurisaka/items/00451cb7d5551a79b68d)
###スキルIDの表示
スキルの一覧に戻り該当スキルの「スキルIDの表示」を押下する
![4-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163917/a0fca7a0-06cb-0557-a79a-3d15788a645c.png)###スキルIDのコピー
表示されたスキルIDをコピーしておく
![4-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163917/df876165-d394-b9a1-19f0-269fb1abd735.png)###Lambdaトリガーの設定
Lambdaに戻り「Designer」を開き「トリガーを追加」を押下
![4-3.png](https:
【初心者向け】LambdaでAlexaカスタムスキルと連携する関数を作成
#Lambdaで関数を作成
##AWS Lamdaで関数の作成手順前の記事:[Alexaでカスタムスキルを作成する](https://qiita.com/kurisaka/items/24f5dfe54d718e33c1c2)
###AWSのサービス一覧から「Lambda」を選択
![1-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163917/8b1086ea-874c-e37a-2791-e3d79805ba05.png)###Lambdaトップ画面より「関数の作成」を押下
![1-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163917/1dd290a0-44b2-bc01-ecd7-b804ca331963.png)###関数の基本情報を設定
– 「一から作成」を選択
– 「関数名」を入力 →今回は”sampleFunction”としました
– 「ランタイム」では「Python3
Cron の外部実行とメール送信の追加 – Nextcloud 環境の構築を通じて AWS での環境構築を体験する⑥
「Nextcloud 環境の構築を通じて AWS での環境構築を体験する」 の第 6 回となります。
これまでの記事は下記からどうぞ。* 【第 1 回】[EC2 と RDS を利用した Nextcloud 環境の構築](https://qiita.com/S_Katz/items/756ca04ecece844ce503)
* 【第 2 回】[ElastiCache サービスの導入](https://qiita.com/S_Katz/items/280642e437c709052781)
* 【第 3 回】[EFS ファイルサーバーへの移行](https://qiita.com/S_Katz/items/5b5f37db29c3f800e610)
* 【第 4 回】[ALB を利用したサーバー負荷分散、可用性向上に向けた取り組み](https://qiita.com/S_Katz/items/edadf33755c0d834eb46)
* 【第 5 回】[分散した EC2 インスタンスのログの集約](https://qiita.com/S_Katz/items/2fa740c505
Serverless Framework lambda 1プロジェクトで複数関数を定義したい
Serverless Frameworkを使って1プロジェクト内にlambdaの複数関数を用意するには、どうしたらいいの?(TypeScriptで)ということで、簡単にserverless.ymlとプロジェクトの構成を解説していこうかなと思います。
# プロジェクト構成
今回はhandler.tsとhandler2.tsにそれぞれ一つづつ関数を定義しています。
# serverless.yml
lambdaの関数を複数定義したい場合は、serverless.ymlのfunctionを複数書けばいいだけ。
すごく簡単。“`yaml
functions:
hello:
handler: handler.helloWorld
Next.jsをserverlessでビルドしてawsにデプロイするには(s3, lambda, apigateway, route53)
## 概要
筆者が当初ざっくりと考えていたのは「Next.jsをLambdaにデプロイしたい・デプロイを自動化したい」だったのですが、これに結構苦戦したのでそのまとめと言ったところです。
この記事はaws初学者には意味がわからないと思うので、以下に登場ワードを書いておくのでまずはそちらをある程度調べてから挑戦した方がいいかと思います。
– S3
– Lambda
– API Gateway
– Route53
– ACM
– IAM
– Role
– Policy## 注意点
まず、ただ単に「Next.jsで作ったものを公開したい」だけであれば、AWSに限定する必要は全くないです。[ZEIT Now](https://zeit.co/docs#)を使えばいいと思います。
同じようなことをするためのライブラリで[Serverless Nextjs Component](https://github.com/danielcondemarin/serverless-next.js)と言うのがあります。今回やることはこれに近いので、実際問題これを使ってもいいのかもしれ