SendGridのTransactionalTemplateがわからない

表題の通り。

■ 環境

  • SendGrid
  • Node.js 8.10.0

■ TransactionalTemplate

APIを使用し、SendGrid経由でメールを送りたい。APIの使い方を見たりしていてSendGridには”Template“なる機能があることを知ったので試してみた。しかし思い通りの内容のメールで送る事ができなかった…。

sendgrid-nodejs
https://github.com/sendgrid/sendgrid-nodejs/blob/master/packages/mail/USE_CASES.md

テンプレートを適用して送信する
https://sendgrid.kke.co.jp/docs/Tutorials/A_Transaction_Mail/using_templates.html

上記URLを参照して試していたのだが、下記のような現象が…。もちろん自身のやり方がまずいのであろうが

1. ActiveなversionのTemplateが適用されない

APIを使ってメールを送ってみると、デフォルトの内容で送られてきた。反映されるのにタイムラグがあるのかと思って少々時間をおいて実施してみたが変わらず。いくつか試している中で下記のようにコメントアウトしたらTemplateに設定した内容で送られた。

const msg = {
  to: 'recipient@example.org',
  from: 'sender@example.org',
  subject: 'Hello world',
  // text: 'Hello plain world!',
  // html: '<p>Hello HTML world!</p>',
  templateId: '13b8f94f-bcae-4ec6-b752-70d6cb59f932',
  substitutions: {
    name: 'Some One',
    city: 'Denver',
  },
};

サンプルはGitHubに上がっていたものをそのまま使わせてもらっている。本文の箇所(“text“/”html“)をコメントアウトするとなぜか送る事ができた…。”subject“もTemplateで指定しているので不要だったのだが残しておいた。

2. 編集後の反映タイミングがわからない

Templateを編集した後でAPI経由でメールを送ると、編集前の状態で送られてしまう。これもタイムラグがあるのかと思い少々時間をおいて再度実施してみたが反映されず。別versionのものを作成し、”ACTIVE“を切り替え再度戻して、とやったところ反映された…。

他にも何点かよくわからない点があったが少々急ぎでいろいろ試したかったので、ここまでやったところでTemplateは一旦諦めた。後日時間がちゃんと取れる時に再挑戦することにする。

以上。

DynamoDB.batchWriteItem()

AWS Lambdaを使っていて、node.jsからDynamoDBの値を更新しようとしたところちょっとハマったのでメモ。

■ 環境

  • Node.js 8.10
  • AWS Lambda
  • AWS DynamoDB

■ batchWriteItem()

マニュアルを見ていて、`batchWriteItem()`を知った。複数件を操作できるので便利そうだ、と思い早速やってみた。試しに10件更新はうまくいったので100件更新をしようとしたところエラー…。何か間違えたかな?とソースを確認するも問題はなさそう。

マニュアルを再度確認すると下記の記載があった。

* There are more than 25 requests in the batch.

これに引っかかっていたようである。

25件毎の実行に修正したところ問題なく操作ができた。

以上。

Lambda + node + Athena

表題の環境でハマったのでメモとして残しておく。

■ 環境

  • Node.js 8.10
  • AWS Lambda
  • AWS Athena

■ node

新規でLambdaの関数を”一から作成“で作成した際に、下記のコードが作成されたのでこれを元に処理を追加していった。

exports.handler = async (event) => {
    // TODO implement
    return 'Hello from Lambda!'
};

LambdaからAthenaに`startQueryExecution`でクエリを実行させ、S3にCSVが作成された、満足だ、と安心し更に実装を進めていたら、`startQueryExecution`の箇所はほぼ修正していないのに実行ができなくなってしまった…。その後、ファイルのversionを戻しても実行がされない…。`listNamedQueries`を実行してみても結果を得られない…。

  1. 実行できた時点のversionを再実行
  2. `startQueryExecution`を`listNamedQueries`にして実行
  3. 関数を新規に作成して実行

ここまで実行してもやはり実行はできなかった。エラーも出ていない、CloudWatchログで見ても実行時のエラーは出ていない。手詰まり…となったがふと思いたってランタイムを”Node.js 6.10“にして実行してみた。実行してみるとエラーが発生。`async`がダメというような内容であった。

従って、上記のサンプルでいうと下記のように修正した。

exports.handler = (event) => {
    // TODO implement
    return 'Hello from Lambda!'
};

実行できてしまった…。`listNamedQueries`も`startQueryExecution`も問題なく実行ができた。

もしや?と思いこのソースのままランタイムを”Node.js 8.10“に変更しても問題なく実行ができた。

変な箇所にハマって時間をくってしまったので原因を深く追求するのはやめて実装を進めることにする。

以上。

`npm list`で表示される”extraneous”

表題の件、なんだっけ?となったのでメモしておく。

■ 環境

  • node 4.4.7
  • nodebrew
  • Mac OSX El Capitan

■ `npm list`

実行すると下記のように表示されるのと”ERR“が出ている。久しぶりに見かけて、何でだっけ?となったので確認する。

$ npm list
  :
└── XXXXXXXX@0.2.1 extraneous

npm ERR! extraneous: XXXXXXXX@0.2.1 /Users/withsin/project/node_modules/XXXXXXXX
$

extraneous“は、直訳すると”外来“とか。このパッケージがちゃんと管理されていない、ということか。確かにインストール時に下記のように実行していなかった。

$ npm install --save XXXXXXXX

この為、`package.json`の`dependencies`に追加されずに上記のように外来パッケージと表示されているようだ。また”ERR“の内容も同じである。というわけで再度`–save`付きでインストールしたところ、前述のような表記や”ERR“は表示されなくなった。

以上。

AlpineLinuxでnode

表題の通り。「nodeの公式のコンテナがDebianで、、」というのも見かけて、Alpineでもあるんじゃない?と思ったので確認する。

■ 環境

  • Docker for Mac 1.12.3
  • Mac OSX El Capitan

■ Docker Hub

library/node
https://hub.docker.com/r/library/node/

ここの”Tags“から見ると、”alpine“とついているコンテナも存在する。

■ Alpine Linux

コンテナを起動してパッケージを検索してみる。

$ docker run -ti --rm alpine sh
/ # 
/ # apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
v3.4.6-9-g93fc63d [http://dl-cdn.alpinelinux.org/alpine/v3.4/main]
v3.4.6-5-g027d8ce [http://dl-cdn.alpinelinux.org/alpine/v3.4/community]
OK: 5975 distinct packages available
/ #
/ # apk search node
nodejs-lts-4.6.0-r0
nodejs-lts-doc-4.6.0-r0
perl-tree-dag_node-1.29-r0
nodejs-lts-dev-4.6.0-r0
sngtc_client-1.3.7-r1
nodejs-dev-6.7.0-r0
nodejs-doc-6.7.0-r0
nodejs-6.7.0-r0
perl-tree-dag_node-doc-1.29-r0
/ #

ありそうである。

以上。