- 1. API Gateway + Lambda のCORS関連エラーの対策
- 2. Lambdaのトリガーの作成中にエラーが発生しましたの対処法
- 3. Nuxt.js で作成した静的サイトを S3 + CloudFront でホスティングするパターン
- 4. laravelのbref を利用し、lambda にデプロイする
- 5. node.js(express)でDB(Postgresql)にアクセス
- 6. ECSとLambdaでTwitter botを作ってみた(自動RTとInstagramから自動投稿)
- 7. [AWS] CloudFront + Lambda@Edge で IP 制限をかける
- 8. SQS → Lambdaのリトライ処理について整理してみた
- 9. 【AWS入門】初めてのLambdaはTranscribe♪
- 10. Alexaにlambda連携させて中野区のゴミの日を教える
- 11. ServerlessFrameworkでLambdaからFargateコンテナを呼びだす
- 12. AWS Lambda 新機能「EFS 統合」の検証と、新しいユースケースの開拓
- 13. Zoomのクラウドレコーディング完了をAPI, Lambda経由でSlackに通知する
- 14. AWS Lambda ローカル実行(デバッグ)、デコレータで例外処理統一、引数チェック等 with Python
- 15. AWS S3バケットからファイルを取得し、Lambdaのローカルに保存する
- 16. AWS LambdaでFFmpegを使って動画からサムネイルを作成する
- 17. Lambdaでmiddleware実装 Go編
- 18. DynamoDB Streamsのパラメータをいじって動作を確認する
- 19. LambdaLayersをLambdaで作る
- 20. オープンデータカタログをポーリングして変換したり蓄積したり通知したりする仕掛け
API Gateway + Lambda のCORS関連エラーの対策
API Gateway と Lambda でウェブアプリのAPIエンドポイントをつくって外部サイトのシステムから呼び出そうとしたらCORS(Cross-origin resource sharing)のエラーになってしまい、設定に躓いたのでメモ
# 基本的な対策
## API Gateway でCORS有効化
API Gateway のアクションからCORSの有効化を設定するのが基本的な対策です。
通常はこれでOKのはず。## エラーが出て設定が反映できないとき
自分の環境で、以下のようなエラーがでてうまく設定ができませんでした。
`Invalid Response status code specified`![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/73833/6daf7c6f-67d3-292a-010e-60d04c2f7333.png)
### 対策(レスポンスヘッダーを手動で設定)
1. 上記画面でエラーになった内容をメモ
2. リソースからエラーになっている
Lambdaのトリガーの作成中にエラーが発生しましたの対処法
#Lambdaでトリガーを指定したい
###エラー内容
LambdaでS3のputをトリガーを指定しようとした時
#####trigger の作成中にエラー が発生しました: Configurations overlap. Configurations on the same bucket cannot share a common event type. (Service: Amazon S3; Status Code: 400; Error Code: InvalidArgument; Request ID: 8659097E5FCA60E1; S3 Extended Request ID: 2PrYTEd8BysODQscbugs/nK2CtkwOQPjw4JXuWgP6rF18PrrvTkq7cgsbs5gDDwKZdB+9qXAE1o=; Proxy: null)
というエラーが出ました。
同じバケットで同じイベントタイプでは作れませんよ的な内容です。
##同じトリガーの関数を消すだけではダメ
消しても同じエラーでした。
##解決策
トリガーで指定していた
Nuxt.js で作成した静的サイトを S3 + CloudFront でホスティングするパターン
Nuxt.js で SSR を使わない静的サイトを生成(`nuxt generate`)して S3 で安価にホスティングする場合、「各ページに対して index.html ファイルが生成されるが、リンクの URL では index.html は省略されるため、そのままでは Not Found になってしまう」という課題がある。通常の Web サーバーには、例えば Apache では `DocumentIndex`、nginx では `index` というように、ファイル名が省略された場合にデフォルトのファイル名を配信する設定があるが、それ相当の動作が必要となる。
実現方法にはいくつかパターンがあるようなので、詳細はそれぞれの解説ページに任せるとして、それらを整理してみた。
参考
– [CloudFront + S3 で静的サイトを運用する際の注意点 – Qiita](https://qiita.com/ooxif/items/d28b7caf72bf5290588c)
## 構成パターン
### 1. S3 で Static website hosting をおこなう
–
laravelのbref を利用し、lambda にデプロイする
# はじめに
laravelで制作したアプリをサーバーレス用ライブラリbrefを使い、AWSにデプロイしました。デプロイは、serverless frameworkがやってくれます。ちなみに、参考にした先輩の記事はこちら。
**Laravelのサーバレス用ライブラリbrefを使い、lambdaでhello world
PHP**
https://qiita.com/umihico/items/64fcf159f68ebd866170
#アプリ作成とbrefインストール“`terminal
$ composer create-project –prefer-dist laravel/laravel laravel-demo #プロジェクト作成
$ cd laravel-demo
$ composer require bref/bref #肝のbrefインストール“`
#編集するファイル
.env“`.env
– SESSION_DRIVER=file
+ SESSION_DRIVER=array
+ VIEW_COMPILED_PATH=/tmp/storage
node.js(express)でDB(Postgresql)にアクセス
# 背景
今日はバックエンド関連。
これまでバックエンド(主にDBアクセスまわり)は、ほぼJavaでしか書いたことがなかったので、
node.jsでDB(Postgresql)にアクセスする際には、どんな方法があるのか簡単に調べてみる。ついでに、接続先のDBがAWSのRDS(Aurora/Postgresql)だった場合に、現時点ではどういう構成が最適なのかについても調べてみようと思う。
# 実装
まずは、node.jsでDB(Postgresql)にアクセスする際の実装(コーディング)方法について調べて試してみる。
## 調査
ネットを漁って軽く調べてみた感じ、以下の2つのパターンがありそう。
1. ORマッパーとしてSequelizeというライブラリを利用してDBにアクセスする
2. pg(node-postgres)を直接使って、自分でSQLを書いてDBにアクセスする参考)
https://sequelize.org/
https://node-postgres.com/ネット上の記事を見る限り、Sequelizeを使うケースのほうが多いような印象(ま
ECSとLambdaでTwitter botを作ってみた(自動RTとInstagramから自動投稿)
# この記事について
この春、緊急事態宣言下で全国の動物園、水族館は休園を余儀なくされていました。
そんな中、各園が少しでもお客さんに楽しんでもらおうとSNS上で動物たちの様子を発信していました。それが「#休園中の動物園水族館」というタグです。
このタグの投稿が少しでも広まるようにという思いから、
このタグ付きのTwitter及びInstagramの投稿を自動でリツイート及びツイートするbotを作りました。ハッシュタグ #休園中の動物園水族館 を自動でRTするbotです。
とりあえず試運転させてます。— 休園中の動
[AWS] CloudFront + Lambda@Edge で IP 制限をかける
# はじめに
[こちらの記事](https://qiita.com/ksh-fthr/items/ee2b7880a9e6c0fc6f88) の 「[まとめにかえて](https://qiita.com/ksh-fthr/items/ee2b7880a9e6c0fc6f88#%E3%81%BE%E3%81%A8%E3%82%81%E3%81%AB%E3%81%8B%E3%81%88%E3%81%A6](https://qiita.com/ksh-fthr/items/ee2b7880a9e6c0fc6f88#まとめにかえて))」で触れたとおり、 CloudFront へのアクセスに対して IP アドレスで制限をかける方法について触れる。
実現にあたり、本記事では CloudFront と Lambda@Edge を利用する。# 注意
本記事は 2020年6月21日 時点の情報です。
ご覧になられた時点で UI が変更されている可能性がありますので、その点ご注意ください。# 前提
– [こちらの記事](https://qiita.com/ksh-fthr/items
SQS → Lambdaのリトライ処理について整理してみた
2018年の6月より、AWS LambdaのイベントソースとしてSQSが選択できるようになりました。
今回はLambdaのイベントソースでSQSを選択し、Lambda側で処理が失敗した場合、どのようにリトライ処理が行われるのかについて整理してみました。
# リソースの作成
今回は、SNS → SQS → Lambda の構成で検証していきたいので、それぞれのリソースを作成いたします。
## SQS
“inu-queue”というキュー名でキューを作成いたします。キューの種類は標準で各設定値はデフォルトです。
そして、”inu-dlq”というキュー名でDLQ(デッドレターキュー)用のキューも作成します。こちらもキューの種類は標準で各設定値はデフォルトになります。
2つのキューを作成したら”inu-queue”のDLQの設定を行います。
DLQの設定方法は、AWSコンソール画面だと以下の手順で設定することになります。
inu-queueのキューにチェックをつける → [キューの操作]をクリック → [キューの設定]をクリック → デッドレターキューの設定で[再処理ポリシー
【AWS入門】初めてのLambdaはTranscribe♪
これは備忘録のために、参考のとおりにやってみた記録です。
参考記事はすっきり書かれていてわかっている人なら簡単なんだと思いますが、AWS初心者には難しい内容でした。そのあたりを泥臭く解説したいと思います。
なのでやったことは、最終的に参考記事のまんまです。
【参考】
・[S3 → Lambda → Transcribe → S3 で文字起こしパイプラインを作成する](https://qiita.com/leomaro7/items/ad9726391d547ea3bcfd)
###やったこと
・1 S3に(input)用のバケットを作成
・2 Lambdaを開く
・3 Lambda関数の定義と意味
・4 CloudWatch Logsの見方
・5 S3に(output)用のバケットを作成
・6 Lambda修正
・7 実行ロールの変更の仕方
・8 Lambda functionを編集する
・9 Transcriptionの確認の仕方
###・1 S3に(input)用のバケットを作成・5 S3に(output)用のバケットを作成
AWSの左上のサービスを押すと全サービスが表示されて、こ
Alexaにlambda連携させて中野区のゴミの日を教える
# やりたいこと
Alexaからlambdaを呼び出して中野区のゴミの曜日を返します。
全く触ったことのない人でも一から作れるように書きました。![alexa.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619762/479c5032-72bd-f550-e10d-bcc353a8af8c.png)
[ALEXAで開発入門してみたので自分なりに纏めてみる](https://qiita.com/godan09/items/6dafc3da51b10532dbe1)
こちらの記事を参考に作ってみました。
細かいところまで説明されていてとても勉強になりましたが、
AWSの仕様変更のためか途中でつまづいたのでその辺りも本稿で記載します。# 必要なもの
* [Amazon開発者ポータル](https://developer.amazon.com/ja/)のアカウント取得 (Alexaのスキル作成に必要)
* [AWSマネジメントコンソール](https://aws.amazon.com/jp/c
ServerlessFrameworkでLambdaからFargateコンテナを呼びだす
Lamdaからboto3でFargateのコンテナを起動する際の手順です。
ググると簡単にできそうなのですが、私はなぜか盛大にハマってかなり時間がかかったので注意点を記載します。## serverless.ymlの設定
まず、IAMでECSアクセスのポリシーを付与します。
“`serverless.yml
provider:
iamManagedPolicies: # Optional IAM Managed Policies, which allows to include the policies into IAM Role
– arn:aws:iam::aws:policy/AmazonECS_FullAccess
“`なお、上記のポリシーが付与されていないと以下のようなエラーが出力されます。
翻訳すると「実行が許可されていません。」ということらしいです。“`
An error occurred (AccessDeniedException) when calling the PutRule operation: User: arn:aws:
AWS Lambda 新機能「EFS 統合」の検証と、新しいユースケースの開拓
2020/6/16のアップデートで、AWS Lambda から Amazon Elastic File System (EFS) が利用可能になりました。
本記事ではこの EFS との統合機能を検証し、今回のアップデートによって生まれる新しいユースケースとは何かを考えます。# アップデートの概要
AWS Lambda 関数が Amazon Elastic File System(EFS)をマウントできるようになりました。
これまでの EFS の主たる用途は、複数の EC2 インスタンスで共有するファイルシステムです。
端的に言えば、1つまたは複数の同時実行される Lambda 関数、従来から対応している EC2 と Fargate を跨ってデータ (ファイル) を永続的に保存および共有できるようになります。# 前提条件 (構成図)
EFS は VPC 内のリソースとなりますので、VPC Lambda である必要があります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21198
Zoomのクラウドレコーディング完了をAPI, Lambda経由でSlackに通知する
# これは何
zoomのクラウドレコーディング完了を、slackの特定のチャンネルに通知
今回は– Slack App (Incoming Webhook)
– AWS Lambda(python)
– AWS api gateway
– Zoom App (Outgoing Webhook)などを使用します。
※練習も兼ねて手順を細かめにメモしています。▼クラウドレコーディングが終わってしばらくすると通知が来る。それだけ。こっからカスタマイズしていきたい
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94687/4d649e2b-805c-603c-412a-a3d118fec9cb.png)![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/94687/a9d862d6-63b0-baa0-498f-b95f2eab059d.png)
### 作成のきっかけ
– エ
AWS Lambda ローカル実行(デバッグ)、デコレータで例外処理統一、引数チェック等 with Python
AWS Lambdaをローカルで実行するサンプルを書きました。Dockerは使いません。
やること
1. 環境変数の読み込み pip install python-dotenv しておくこと
2. lambda_handlerに渡す event引数を記述したJSONファイル読み込み
3. デコレータで例外処理、引数チェックなどを統一する。複数のAWS Lambda関数を使うときに、共通ファイルにデコレータ関数を定義し、各々の関数でlambda_handlerを呼ぶたびにデコレータ関数を呼び出すようにする。そうすると、失敗時にイベント引数をs3等に保存しておけば再処理したり、またはイベント引数の共通チェックを行うという処理を統一できる。#サンプル
./.env
./.event.json
./lambda_handler.py.env 環境変数設定用
“`.env:.env
LogLevel=DEBUG
“`.event.json イベント引数
“`json:.event.json
{
“body” : “{\”key\” : \”valu
AWS S3バケットからファイルを取得し、Lambdaのローカルに保存する
#ゴール
S3バケットに格納してあるファイルをLambdaのローカル(/tmpディレクトリ)に保存したいと思います。
今回はバケット(MyTestBucket)に保管したファイル(test_file.txt)を使用します。
ランタイムはPython 3.8です。##ソースコード
“`
import os
import boto3s3 = boto3.resource(‘s3’)
def lambda_handler(event, context):
bucket = s3.Bucket(‘MyTestBucket’)
bucket.download_file(‘test_file.txt’, ‘/tmp/test_file.txt’)
return os.listdir(‘/tmp/’)
“`##結果
osモジュールのlistdir関数で、Lambdaの/tmpディレクトリにファイルが保存されているか確認しています。
テスト実行後のコンソールに表示された結果は以下の通りです。
![rapture_20200615181536.png]
AWS LambdaでFFmpegを使って動画からサムネイルを作成する
S3にアップロードしたMP4からサムネイルを作成する方法を雑にまとめました。
## 手順
### 1. FFmpegをダウンロード
MP4からサムネイルを取得してくれるライブラリを取得する。
コイツが何者かの詳細は調べてみてください。[公式](https://johnvansickle.com/ffmpeg/)から `ffmpeg-git-amd64-static.tar.xz`(2020年6月時点で最新)をダウンロードする。
ダウンロードしたzipファイルにはいろいろはいっているが、今回は`ffmpeg`という名前のバイナリファイルだけ使う### 2. Lambdaのコードを書く
適当にLambda用のディレクトリを作る。
そのディレクトリの中で、先程ダウンロードしたFFmpegのzipを解いて、中にある`ffmpeg`という名前のバイナリファイルを以下の改装に配置する。
お次にindex.jsにLambdaで実行したい処理を書く(以下)
*エラーハンドリングとかはしてないので、いい感じに改良して下さい。“`
.
├── bin
│ └── ffmpeg
└──
Lambdaでmiddleware実装 Go編
初めてのGoでなれないところも多く悪戦苦闘していますが、共通処理を外に出してメンテナンス性やコード可読性をあげたいと思い、middlewareを実装してみました。
## middleware用のコード
“`golang:middleware.go
package middlewareimport (
“github.com/aws/aws-lambda-go/events”
)type Handler func(events.APIGatewayProxyRequest) (interface{}, error)
func Middleware(next Handler) Handler {
return Handler(func(request events.APIGatewayProxyRequest) (interface{}, error) {
return next(request)
})
}
“`
handlerについての公式ドキュメントはこちら
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg
DynamoDB Streamsのパラメータをいじって動作を確認する
# はじめに
DynamoDB Streamsは便利そうなのだけど、イマイチ正体が分からないので確認してみた。
Lambdaの仕組みをある程度理解していて、プログラムを書けることを前提とする。# 参考
## 通知イベント
通知されるイベントの内容を調べてみようとしたら、クラスメソッド先生が既にちゃんと調べていた。
さすが。【Developers.IO】[DynamoDB Streamで渡されるeventデータの表示タイプごとの内容をまとめてみた](https://dev.classmethod.jp/articles/dynamodb-stream-view-type/)
# 設定方法
設定方法は2種類。DynamoDB側から設定する方法と、Lambda側でイベントソースを設定する方法。
前者は、以下のような感じで詳細な設定をすることができない。
![キャプチャ2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/111314/b8712b3b-d7d7-bb98-3734-c0e475a
LambdaLayersをLambdaで作る
# はじめに
普段私が`Lambda`を利用する際は、`chalice`を利用して`Lambda`関数の作成とデプロイをしています。
`chalice`は便利なのですが、デプロイ時に毎回`pip install`して必要な`package`を集めているみたいです。
そのため、`pandas`などの重めの`package`を利用している場合は、デプロイに時間がかかります。そこで、あらかじめ利用する`package`を登録しておく`Lambda`のサービスの`LambdaLayers`を活用します。
## 前提
`LambdaLayers`を作成する際の前提条件などです。
1. `LambdaLayers`は`packages`を`zip`で固めたファイルを利用して、あらかじめ`Lambda`が利用できる状態にすること[参考](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/configuration-layers.html)
1. `package`の配置などフォルダ構成も決まっている
1. `pandas`などの一部
オープンデータカタログをポーリングして変換したり蓄積したり通知したりする仕掛け
# オープンデータカタログをポーリングして変換したデータを蓄積したり通知したりする仕掛け
## はじめに
以前、[静岡県オープンデータカタログ(csv)からCOVID-19対策サイトのデータ(json)に変換して取得するAPI](https://qiita.com/w2or3w/items/55ff3159aea0c7a9e096) という記事を書きました。
ここで作ったAPIをLambdaでポーリングして、データの変更があったらS3に蓄積して、情報はDynamoDBにも保存して、変更があったことをSlackに通知する、みたいな仕掛けを作りました。ETLごっこです。
なお、浜松市だけでなく、静岡市のデータも監視対象としました。
※この仕掛けは結局日の目を見ることはありませんでしたが、詳細はあとがきに書こうと思います。Lambdaの関数コード(Python)はこちらのリポジトリで公開しています。
https://github.com/ww2or3ww/covid19_shizuoka-opendata_notifier## Lambdaで定期実行する
トリガーを追加する。
![