1. inukai-norio

    No comment

    inukai-norio
Changes in body
Source | HTML | Preview
@@ -1,36 +1,24 @@
## はじめに
-写真のコンバート方法を変更することになりました。
-そこで、コンバート方法の設定を `yaml` として S3 に置それをトリガにSQSを経由してfargateでコンバートが走ることになったのですが、そのまま実装してしまうと利用者の要求を満たさない可能性が出てきたため、うまく切り抜けようとした記録です
+`yaml` S3 に置かれた時それをトリガにSQSにエンキューする必要がありました。
+一般的には、S3 Event Notificasions によりエンキューをすれば良いのですが、エンキュー先が複数に必要になりました
-## 前提条件
+用途別で分けるだけなら、S3のプレフィックスで制御することもできますが、時間帯により分ける必要があったので、lambda を使って実装しました。
-- これまでのコンバートでは「時間がかかっても良いコンバート」と「少数の高速なコンバート」で分かれていたが、今回の変更で統一する
-- 新しいコンバートでは `yaml` には写真のコンバート方法が記載されている。
- - 一つの`yaml`に対して複数の写真をコンバートできる。
+## エンキュー先
+1. 夜間用SQS(process.env.sqsUriNight)
+2. 昼の低速処理用SQS(process.env.sqsUriNormal)
+3. 昼の高速処理用SQS(process.env.sqsUriFast)
-## 最初の方法
-
-AWSに詳しい方なら分かると思いますが、 S3 に `yaml` が置かれた時に、SQSにエンキューするのはとても簡単な作業です。
-そのため、上記の方法で実装したのですが、写真枚数が多いと次のコンバートまでの待機時間が多くなってしまいます。
-そこで問題になってきたのが、利用者である業務の人からの要望で「なるべく早くコンバートが終わって欲しい」を叶えるのが難しいと思うようになりました。
-
-## 考えた方法(ボツ案)
-
-最初に考えたのはSQS のエンキューは S3 のプレフィックスで制御することもできるため、それらを用いて枚数ごとにおく場所を変える方法でした。
-これは、確かにこれで問題は解決しそうですが、枚数がアップロード後でないとわからないことや夜間など全てをゆっくりなコンバートで問題ない時などをfargateのタイプを小さくできないので、今回は不採用になりました。
-
-## 採用した案
-
-S3からのエンキューはSQS以外にもlambdaに対しても行うことができます。
-そのため、これを用いてlambdaを起動し`yaml`記載の枚数をカウントして閾値を設けエンキューするSQSを分けました。
-また、夜間においてもエンキューするSQSを分けることにより変更できるのでこちらの方法を採用しました。
## 使ったコード
+低速高速の分岐はコードを見ての通り、 `yaml` 内にある `photos` の数により判断します。
+同様のソースを書く場合の参考にしてください。
+
```js:index.js(node8)
'use strict';
const aws = require('aws-sdk');
const yaml = require('yaml');
@@ -97,12 +85,5 @@
throw new Error(retmsg(err));
}
};
```
-
-見ての通り、ただエンキューしているだけです。
-
-## 最後に
-
-実際このコンバートを使うのはもう少し後なので、問題が発生するかもしれないです。
-lambda を使うとこのようなこともできるよという共有でした。