- 1. Serverless NestJS
- 2. 【初心者向け】LambdaとAlexaスキルの連携設定
- 3. 【初心者向け】LambdaでAlexaカスタムスキルと連携する関数を作成
- 4. Cron の外部実行とメール送信の追加 – Nextcloud 環境の構築を通じて AWS での環境構築を体験する⑥
- 5. Serverless Framework lambda 1プロジェクトで複数関数を定義したい
- 6. Next.jsをserverlessでビルドしてawsにデプロイするには(s3, lambda, apigateway, route53)
- 7. Lambda入門#5 Lambdaと連携したAPI Gatewayのバージョン管理
- 8. コロナウイルス対応のため、学習コンテンツの無料開放にひと肌脱いだ話。
- 9. Cognito認証されているAppSyncをIAM認証で後ろから叩く
- 10. Lambda で JSON のパラメタを受け取りたいとき
- 11. VPCのログをLambdaで読み込む
- 12. 【AWS SAM】sam local invokeの「invalid ELF header」をなんとかする
- 13. サーバーレスでスクレイピングして、狙った中古PCを我が手中に…
- 14. AWS SAM で API をローカルでテストする
- 15. AWS LambdaからEvent Bridgeに通知してみる
- 16. Lambda+API Gateway+CloudFrontとVueでOGP画像の自動生成をする
- 17. LambdaでCognito認証(ユーザー認可)
- 18. AWS Lambda入門①(Node編)〜関数をデプロイして動かす〜
- 19. Lambda入門#4 API Gatewayとの連携
- 20. Lambda入門#3 Lambdaのバージョン管理/エイリアス設定
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)と言うのがあります。今回やることはこれに近いので、実際問題これを使ってもいいのかもしれ
Lambda入門#5 Lambdaと連携したAPI Gatewayのバージョン管理
さぁ、今日もlambdaを触っていきます!
# 参考URL
クラウドメソッドさんの記事を参考にしてやってます。APIゲートウェイのバージョン管理(lambda連携)
## 前回までのおさらい lambdaのエイリアス設定
最初の状態ではAPIゲートウェイに紐づいている“`$LATEST“`の結果が返ってきます。
では、実際に紐づけを行う前に“`$LATEST“`がどのようになっていて、エイリアスでprodステージとdevステージとの違いが分かるように整理しておきます。そこでちょっと、おさらいなのですが、lambdaのエイリアスとバージョン管理の方法にも触れておきます。
__1.lambdaでバージョンを作成__
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/00474acb-d2f
コロナウイルス対応のため、学習コンテンツの無料開放にひと肌脱いだ話。
##0.まえおき
新型コロナウイルスによる、学校の休校を受け、
教育業界において、コンテンツの無料開放などが流行っています。そんなさなか、とある老舗の参考書出版会社さまから、
コンテンツ無料解放をしたいと相談を受けたのが金曜日の夜。。。すばらしい社会貢献!
ひと肌脱ぐことになり、私の休日(ほぼ徹夜)は消え去りました。
(えぇ、もちろん私も無償奉仕です。)##1.要件/状況
**・PDFの書籍データがある**
**・誰にでも見せたいけど、ダウンロードとか印刷をされてしまっては困る。**
(過度には誰にも見せたくない、、、)
**・サーバとか何もない**という、本当にゼロからのスタートです;;
##2.実現方法概要
**1.PDF(URL)の保護**
Cognito認証されているAppSyncをIAM認証で後ろから叩く
# Cognito認証されているAppSyncをIAM認証で後ろから叩く
## はじめに
以前、サーバーレスWebアプリハンズオン記事として「[AppSyncをフロントエンドとバックエンドで利用する](https://qiita.com/w2or3w/items/70f6b6d8d13b60afaee5)」を投稿しました。
ここでは認証モードとして当然のように「API Key」を利用していました。
このAPI Keyでの認証、初学者がまず使ってみる場合や簡易的なプロトタイプとして利用する分には良いのですが、安全性や有効期限が最大365日という更新の手間のことを考えると、なるべく他の認証モードを採用すべきです。
![ink (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/394775/64258f88-1be7-dd53-15a0-33183dd681c6.png)
その鍵、見えてますよ、、。
365日後に鍵の更新、絶対忘れますよ、、。## AppSyncの認証モードの種類
AppSyncはA
Lambda で JSON のパラメタを受け取りたいとき
## やりたいこと
API Gateway 経由で、POSTリクエストの Body (JSON) の値を Lambda で受け取りたい
## 解決
API Gateway マッピングテンプレート を設定する
### くわしく
1. 該当のメソッド実行の総合リクエエスト
2. 本文マッピングテンプレート
3. テンプレートが定義されていない場合 (推奨)
4. マッピングテンプレートの追加`application/json` の key に `$input.json(‘$’)` の value を設定する
VPCのログをLambdaで読み込む
やりたいこと
・クロスアカウント環境下で他アカウントのVPCログを特定アカウントに集約する
・S3にログを集約してファイル作成ごとにLambdaでファイルを読み込む
(外部への一定バイト以上の通信を検知して通知するような監視に利用する)別記事でクロスアカウントにおけるログ集約は記載しましたので
その部分は割愛し、ファイル作成時にLambdaで読み込む部分を記載します。“`:ファイル出力するS3のバケットとキー
kaikusakari-test-vpc/AWSLogs/123456789012/vpcflowlogs/ap-northeast-1/
“`## Lambdaの設定
**イベントのトリガー**
イベントタイプ: PUT
バケット名:kaikusakari-test-vpc
プレフィックス: AWSLogs/123456789012/vpcflowlogs/ap-northeast-1/
(vpcのログはバケット名のみ指定してキー階層はデフォルトです)**ロール**
“`json:Lambdaの実行
{
“Version”: “2012-10
【AWS SAM】sam local invokeの「invalid ELF header」をなんとかする
# 環境
– MacOSX
– SAM CLI, version 0.41.0
– python3.8下記内容は`sam init`で作成されたものそのまま使用しています。
違いは`requirements.txt`の内容のみです。# 現象
以下のような状態でpip installをして`sam local invoke`をすると invalid ELF headerが発生する。
“`bash
$ cat sam-app/hello_world/requirements.txt
requests
pysftp
$ pip install -r requirements.txt -t ./$ sam local invoke
Invoking app.lambda_handler (python3.8)
(中略)
{“errorType”:”Runtime.ImportModuleError”,”errorMessage”:”Unable to import module ‘app’: /var/task/bcrypt/_bcrypt.abi3.so: invali
サーバーレスでスクレイピングして、狙った中古PCを我が手中に…
## どんなことをやるの?
どうしても中古でThinkPadのx250が欲しくなりまして、今回は中古ThinkPad専門店の「Be-Stockさん」のサイトをスクレイピングして、在庫状況を定期的に取得していこうと思います。
今回は初めてサーバーレスで、とは思っておりますが、簡単めに以下のようなアーキテクチャでアプリケーションを作成していこうと思います。![scraper.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/585851/24cc6ea6-c119-f161-c866-d4e3ee7b76ed.png)
> ※諸々初めてなので、もし間違いや改善点があれば優しくかつ容赦無くボコボコにしていただきたい。またその際には、私が一年目未満のエンジニアであること、そして極度の飲酒をしながらこの記事を書いていることを念頭に置いて、愛を忘れないように努めていただきたい。## 1.サイトの下調べ
### スクレイピングの可否
まずはスクレイピングをする前にやることがある。
それはそのサイトをゴニョゴニョ
AWS SAM で API をローカルでテストする
AWS で API Gateway → lambdaのテストをローカルで実施する。
## 環境
– macOS Mojave 10.14.6
– Python 3.7.5
– Docker 19.03.5
– AWS SAM CLI 0.43.0## AWS SAM CLI をインストール
“`
$ pip install aws-sam-cli確認
$ sam –version
SAM CLI, version 0.43.0
“`## サンプルのAWS SAM アプリケーションをダウンロード
参考:[チュートリアル: Hello World アプリケーションのデプロイ](https://docs.aws.amazon.com/ja_jp/serverless-application-model/latest/developerguide/serverless-getting-started-hello-world.html#serverless-getting-started-hello-world-initialize)“`
$ sam init
“`
AWS LambdaからEvent Bridgeに通知してみる
# はじめに
[前回](https://qiita.com/drafts/a49da460fd67e197a5b7/edit)、MackerelのアラートをAWS Event Bridgeに通知してみたので、
今回は、Lambda A→EventBridge→Lambda B&Cの構成を試します。
自作のアプリケーションから、カスタムイベントを発火させるイメージですね。# 構築手順
## Lambda B&C(EventBridge受信側)
* Lambda B
* Lambda Function名:register-item
* 実行ロール:CloudWatch Logsの権限があれば良いので、「基本的な Lambda アクセス権限で新しいロールを作成」を選択
* 処理内容:DBに商品を登録するというイメージだが、今回はログ出力するのみとします。“`python
import jsondef lambda_handler(event, context):
print(Register a new item.)
Lambda+API Gateway+CloudFrontとVueでOGP画像の自動生成をする
Lambda+API Gateway+CloudFrontとVueを使ってフロントエンドのみでOGP画像の自動生成をしてみたので備忘録。
###構成
まずVueでSVGを返すページを用意しておく。
Lambda側は`chrome-aws-lambda`でスクリーンショットを撮って、base64で返すようにする。よくあるLambda@Edgeを使ったダイナミックレンダリングを行いつつ、Edgeで返すMetaタグの`og:image`や`twitter:image`のURLへのアクセスがあったら、用意しておいたSVGページをLambdaでスクリーンショット撮ってAPI Gateway経由でpngにして返す、というちょっと面倒くさい構成。
バックエンド側でLambdaを起動させてスクリーンショット撮ってS3に保存とかでもよかったのだけど、今回はあくまでもアクセスがあったらOGP画像を返すようにしたかったので、こんな感じの構成にした。
###VueでSVG生成
VueでSVGを生成するのはこちらの記事を参考にさせていただいた。
[Vue.jsとFirebaseでOGP画像生成系のサー
LambdaでCognito認証(ユーザー認可)
#はじめに
SDKをローカルに持ってきてゴニョるサンプルは検索に引っかかるのですが、
クラウド側(Lambda関数内部)で完結するサンプルが見つからない…
よし、ならば投稿してしまえ。[トップ](https://qiita.com/minmax/items/a36b081c073eff4a6533)
├[ユーザー作成](https://qiita.com/minmax/items/8c2aa57b76e09b8192ed)
├[ユーザー確認](https://qiita.com/minmax/items/ed4f81e61c2617d5c6cf)
├[ユーザー認証](https://qiita.com/minmax/items/12e65cd51d85f419faa5)
└__ユーザー認可 ←イマココ__#注意事項
本稿は、[こちらの記事](https://aws.amazon.com/jp/premiumsupport/knowledge-center/decode-verify-cognito-json-token/)をLambda関数で実現することを目的としています
AWS Lambda入門①(Node編)〜関数をデプロイして動かす〜
## 概要
– ServerlessFrameworkを使ってLambda関数を作り、ローカルで動作確認したあとにAWSにデプロイしてアクセスするところまでやってみます
## Lambdaとは
– LambdaはAWSが提供するサービスの1つで以下のような特徴を持ちます
### サーバーレス
– 通常のアプリケーションはサーバにデプロイし稼働させることでアクセスすることができますが、当然サーバが止まっていたら利用することはできません
– Lambdaはサーバーレスに分類されるサービスで、アクセスがあるとそのつど起動し処理が実行され終了すると停止します
– つまりLambdaはサーバの死活監視のようなことをする必要がなく、また課金も実行時間単位なので金銭面でもお得といった特徴があります### FaaS
– LambdaはいわゆるFaaS(Function as a Service)に分類されます
– つまり、Function(関数)をデプロイして、それを公開するサービスというわけですね## Lambda関数の作成
### 関数の作成
– 今回は[Serverles
Lambda入門#4 API Gatewayとの連携
昨日の続き、やってきます!
# 参考URL
今日も以下の記事を参考にしてやったことを記載しています。1.APIゲートウェイの設定
2.APIゲートウェイのバージョン管理(lambda連携)
## API Gatewayと連携させるlambdaの設定
まずはちゃんとAPIゲートウェイの設定を覚えていきたいと思います。上記で紹介した1.の記事を参考にまずはAPIゲートウェイのバックエンドになるlambdaを設定しておきます。
AWSが用意しているblueprintを利用します。lambdaにログインして、[設計図の使用]にチェック入れます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co
Lambda入門#3 Lambdaのバージョン管理/エイリアス設定
さぁ、今日もLambdaの勉強をしますかー!
#参考URL
クラスメソッドさんの以下のURLを見て、学習しました。##Lambdaのバージョン管理/エイリアス設定
上記のURLに沿って、関数を作っていきます。
もう、この辺りはもう前回までの操作で慣れた感じですね。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/3fd596a8-32e1-f72e-f52f-47542d22063e.png)
指定した文字を出力するだけの関数を作成します。
“`python:テストコード
import jsondef lambda_handler(event, context):
return “version1”
“`![image.png](https://qiita-image-stor