- 1. サーバーレスでスクレイピングして、狙った中古PCを我が手中に…
- 2. AWS SAM で API をローカルでテストする
- 3. AWS LambdaからEvent Bridgeに通知してみる
- 4. Lambda+API Gateway+CloudFrontとVueでOGP画像の自動生成をする
- 5. LambdaでCognito認証(ユーザー認可)
- 6. AWS Lambda入門(Node編)
- 7. Lambda入門#4 API Gatewayとの連携
- 8. Lambda入門#3 Lambdaのバージョン管理/エイリアス設定
- 9. Amazon SES+Lambdaでメール受信をトリガーにしてあれこれする(前編)
- 10. Lambda入門#2 はじめてのLambda関数作成 S3との連携
- 11. S3上ObjectのKeyを普通のdate形式からHive形式に変更する
- 12. GolangのAPIサーバをAWS Lambdaへ移植してみた
- 13. Lambda入門#1 はじめてのLambda関数作成 S3との連携
- 14. AWS LambdaでPython外部ライブラリのLayerを作る前に
- 15. AWS S3にデプロイしたら自動的にCloudFrontのキャッシュを無効化(invalidation)するNode.js Lambda
- 16. 【初心者向け】Alexaカスタムスキルを作成してCognitoのユーザープールとアカウントリンクする手順
- 17. Serverless Frameworkを使ってLambdaにデプロイするまでまとめ
- 18. AWS Amplify フレームワークの使い方Part9〜Function編〜
- 19. AWS Lambdaのコンソールでトリガーを削除しようとすると「The Destination field is required for an OnFailure configuration.」となる
- 20. AWS CDKの’aws-lambda-nodejs’を使ってCDKとLambdaの間の壁を破壊する
サーバーレスでスクレイピングして、狙った中古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で動くように修正します。
移植前ソース
<
Lambda入門#1 はじめてのLambda関数作成 S3との連携
# 参考URL
クラスメソッドさんのページみて勉強してみました。## Lambda関数の作成
まずはどんなものなのかを知っていくことが重要だと思いますので、ページに記載されている内容に沿って、実際に操作してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/3e0d4002-95c7-407d-7402-18f3d71bcda2.png)
ロールは新規作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/bda7c6c7-ba8d-6de9-638f-f0c13e78c130.png)
と思ったら、以下のエラーが出力されて作成できませんでした。
IAMのロール作成権限が必要なのですね。![image.png](https://
AWS LambdaでPython外部ライブラリのLayerを作る前に
## 結論
先人によって既に作られてないか、いったん確認してみましょう。
[keithrozario/Klayers](https://github.com/keithrozario/Klayers)## 使い方
なぜかAWS公式でLayerが提供されていないライブラリ、[pandas](https://pandas.pydata.org/)を例として使います。
(Numpy + Scipyがあるなら、pandasもあってくれていい気がしています)### 0. 前準備
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/199887/fa06c36d-2a94-5a23-5ff9-f68157476e68.png)
AWS Lambdaにアクセスして、[関数の作成]を押し、適当な名前の関数を作ります。
「ランタイム」はPython3.8を選びます。「アクセス権限」はノータッチでOKです。### 1. pandasをインポートし、テストを作成
`import pandas`を追加し、
AWS S3にデプロイしたら自動的にCloudFrontのキャッシュを無効化(invalidation)するNode.js Lambda
# 概要
静的コンテンツをAWS S3に置いて、CloudFrontを前段に立てる構成になっている状態で、S3を更新してもCloudFrontのエッジサーバーのキャッシュは自動で更新されずキャッシュの有効期限中は反映されない
そのキャッシュを手動で無効化する運用フローになっているのを自動化する手順のメモ
ロールを作るところからnode.jsのLambdaでやる構成での記事がなかったように思うので、残しておく# 構成
最初はデプロイスクリプトから [CloudFrontのAPI](https://docs.aws.amazon.com/cloudfront/latest/APIReference/API_CreateInvalidation.html)を直に叩いて実現しようかと思ったしかしLambdaがS3の追加削除イベントをトリガーにできるようなので、タイミングとしてそちらのほうが適切であり、更に[AWS SDK](https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudFront.html#createInva
【初心者向け】Alexaカスタムスキルを作成してCognitoのユーザープールとアカウントリンクする手順
#1.Lambdaで関数を作成
##AWS Lamdaで関数の作成手順###1-1.AWSのサービス一覧から「Lambda」を選択
![1-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163917/8b1086ea-874c-e37a-2791-e3d79805ba05.png)###1-2.Lambdaトップ画面より「関数の作成」を押下
![1-2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/163917/1dd290a0-44b2-bc01-ecd7-b804ca331963.png)###1-3.関数の基本情報を設定
– 「一から作成」を選択
– 「関数名」を入力 →今回は”sampleFunction”としました
– 「ランタイム」では「Python3.8」を選択
– 「関数の作成」を押下
![1-3.png](https://qiita-image-store.s3.ap-nort
Serverless Frameworkを使ってLambdaにデプロイするまでまとめ
初心者がServerless Frameworkを使ってLambdaにデプロイするまでを簡単にまとめてみます。
LambdaではTypeScript(Node)を使用します。# serverlss install
まず初めにServerlessFrameworkのプロジェクトを作成するために、servless packageをインストールします。
(Nodeがインストールされている前提です。)“`bash
npm i -g serverlss
“`
slsコマンドでインストールが成功したか確認しましょう。“`bash
sls -v
“`# プロジェクト作成
Serverlss Frameworkのプロジェクトを作成していきます。
ついでに、npm installして必要なモジュールも全てダウンロードしておきます。“`bash
mkdir sample-sls-typescript
cd sample-sls-typescript/
sls create –template aws-nodejs-typescriptnpm install
“`#
AWS Amplify フレームワークの使い方Part9〜Function編〜
# はじめに
Lmabda関数を管理しようと思うとServerlessFrameworkなんかがベタなのかな、と勝手に思っていて、なかなかGUIでの管理から抜け出せない日々が続いていた中で出会った、このAmplifyのfunction管理機能。一言で言えば、素晴らしい。
# 設定の流れ
## amplifyにfunctionを追加
おなじみのコマンドでfunctionのファイルを作成。この時、cognito,auth,api,storage,functionの権限が聞かれますが、一旦スルー。私の場合は、基本的には別でロールを作成して紐付けるため、ここでは何も選択しません。(本当は利用したほうが、よりセキュアなロールポリシーをつけれる気はしているが、、、)“`console
$ amplify add function
? Provide a friendly name for your resource to be used as a label for this category in the project: createUser // 今回はfunction名と同一名
AWS Lambdaのコンソールでトリガーを削除しようとすると「The Destination field is required for an OnFailure configuration.」となる
## 事象
AWS Lambdaのコンソールの[Designer]で追加済みのDynamoDBトリガーの[☓]をクリックする。
![image.png](https://image.docbase.io/uploads/1fd8c4ea-e9d3-4f1c-9442-478b94b2eaf4.png)トリガーが[保留中の削除]となる。[保存]をクリックする。
![image.png](https://image.docbase.io/uploads/afaa8ea2-87c9-4c51-a153-31c93c91842e.png)保存した後もトリガーが削除されずに残っている。
![image.png](https://image.docbase.io/uploads/45ce96d3-9acb-4b84-abb6-6937f4c562f2.png)この状態でトリガーの[☓]をクリックすると、トリガーがまた[保留中の削除]となる。[保存]をクリックする。
![image.png](https://image.docbase.io/uploads/b1acc23e-7e06-
AWS CDKの’aws-lambda-nodejs’を使ってCDKとLambdaの間の壁を破壊する
# 動機
久々に[AWS CDKのリファレンス](https://docs.aws.amazon.com/cdk/api/latest/)を眺めていたら[こんなConstruct](https://docs.aws.amazon.com/cdk/api/latest/docs/aws-lambda-nodejs-readme.html)を発見!!> aws-lambda-nodejs module
>
> This library provides constructs for Node.js Lambda functions.これはもしかして、CDKのソースとLambdaのソースを一気通貫で管理できるってことかい!?もう[こんな過去記事](https://qiita.com/tetsuya-zama/items/4335f639650d6ec1e00c)のようにCDKのソースとLambdaのソースを分けて管理したり別々のnode_modulesやtsconfig.jsonを持たなくても良いのかい!?なんて美しいんだ!!バチが当たるじゃないか!?
ということでやってみました。