- 1. Serverless Framework lambda 1プロジェクトで複数関数を定義したい
- 2. Next.jsをserverlessでビルドしてawsにデプロイするには(s3, lambda, apigateway, route53)
- 3. Lambda入門#5 Lambdaと連携したAPI Gatewayのバージョン管理
- 4. コロナウイルス対応のため、学習コンテンツの無料開放にひと肌脱いだ話。
- 5. Cognito認証されているAppSyncをIAM認証で後ろから叩く
- 6. Lambda で JSON のパラメタを受け取りたいとき
- 7. VPCのログをLambdaで読み込む
- 8. 【AWS SAM】sam local invokeの「invalid ELF header」をなんとかする
- 9. サーバーレスでスクレイピングして、狙った中古PCを我が手中に…
- 10. AWS SAM で API をローカルでテストする
- 11. AWS LambdaからEvent Bridgeに通知してみる
- 12. Lambda+API Gateway+CloudFrontとVueでOGP画像の自動生成をする
- 13. LambdaでCognito認証(ユーザー認可)
- 14. AWS Lambda入門(Node編)
- 15. Lambda入門#4 API Gatewayとの連携
- 16. Lambda入門#3 Lambdaのバージョン管理/エイリアス設定
- 17. Amazon SES+Lambdaでメール受信をトリガーにしてあれこれする(前編)
- 18. Lambda入門#2 はじめてのLambda関数作成 S3との連携
- 19. S3上ObjectのKeyを普通のdate形式からHive形式に変更する
- 20. GolangのAPIサーバをAWS Lambdaへ移植してみた
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(関数)をデプロイして、それを公開するサービスというわけですね## 関数の作成
– 今回は[ServerlessFramework](https
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
Amazon SES+Lambdaでメール受信をトリガーにしてあれこれする(前編)
# メールの受信をトリガーにコードを動かす
…ことができます。そう、AWSならね。
[Amazon SES](https://aws.amazon.com/jp/ses/) はEメールの送受信を行うAWSのマネージドサービスです。
地味なサービスだなー誰が使うのかなーと思っていたんですが、こないだあるお店にネット経由で宅配を頼んだら、SESで注文メールが届きました。意外と使われているんですかね?# 要約
* Amazon SES をセットアップしてメールを受信できるようにする
* SESでの受信をトリガーに、メールの生データをS3のバケットにPUTする
* そのPUTをトリガーに、Lambdaを実行して必要な情報を取り出すSESのトリガーで、S3へのPUTだけでなくLambdaの実行もできるんですが、この先を踏まえて、あえて分けています。
# 必要な物
* [Route53](https://aws.amazon.com/jp/route53/) などのDNSサーバ
DNSサーバなら何でもいいんですが、Route53 だとSESのセットアップに必要な設定をほとんど自
Lambda入門#2 はじめてのLambda関数作成 S3との連携
# 参考URL
昨日に続いて、クラスメソッドさんの記事を見て勉強を続けていきます。## オブジェクト情報の取得
昨日の記事で実施した部分はオブジェクトが所定の場所に置かれることで起動するトリガーについて触れました。
今回はそこからさらに進んで、昨日、定義したLambdaのハンドラーで指定した引数eventに含まれている「バケット名」とか、「パス」の情報を取得してみます。コードを以下のものに差し替えます。
“`python:テストコード1
def lambda_handler(event, context):
print(“Lambdaが呼ばれたよ!!!!!!”)
input_bucket = event[‘Records’][0][‘s3’][‘bucket’][‘name’]
input_key = event[‘Records’][0][‘s3’][‘object’][‘key’]
print(“bucket =”,
S3上ObjectのKeyを普通のdate形式からHive形式に変更する
# 何を書いた記事か
ぼく「とりあえずアプリのログとか分析用データとかS3に吐き出しとこう!パス?後から考えればいいからとりあえず `yyyy-mm-dd` とかで切っておけばいいよ!」〜1年後〜
ぼく「なんでこんな分析かけづらいパス形式でデータが保管されてるんや・・」
という状態になってたのでなんとかしようという話です。# 何が嬉しいのか
上の例のように、特に運用を考えずに下記のようなKeyでS3上に出力してしまっている場合“`
s3://BUCKET_NAME/path/to/2020-01-01/log.json
“`いざ分析にかけようと思ったとき、ここにおいたファイルに対してAthenaなどでクエリを投げる時、日付に対して適切なPartitionが効かせられないという状況に陥ります。
どういうことかというと、
「2019年1月のデータを横断的に分析しよう!」
と思っても、S3では `2019−01-01` のような文字列がKeyになっているだけで、 `2019-01-*` のようなクエリをかけることは至難の技です。そこで、S3への保管の仕方
GolangのAPIサーバをAWS Lambdaへ移植してみた
# 背景
現在Golang + Nginxで動いているAPIをLambda関数へ移行したい。# API仕様
– おみくじAPI
– `/fortune` へのアクセスで大吉・中吉・小吉のどれかをjsonとして返してくれる
– `/list` でおみくじで得ることが出来る結果一覧をJSONで取得できる
– `/version` でプレーンテキストとしてAPIのバージョンを取得できる
– 無効なパスへのアクセスは404を返す# 環境
OS: Ubuntu 18.04バージョン
“`sh
$ go version
go version go1.10.3 gccgo (Ubuntu 8.3.0-6ubuntu1~18.04.1) 8.3.0 linux/amd64
“`# 実際に移植してみる!
## ざっくりやること
* Lambda関数作成
* ALBとターゲットグループを作成
* ビルドしてLambdaへデプロイ## 移植前のソース
下記のコードをLambdaで動くように修正します。
移植前ソース
<