これをつくった。
お布団指数というのは自分独自の指標で、その日どんな布団を被れば良いのかを教えてくれるやつです。 過去のバージョンはDropboxに置いていたので特にパブリックな場所にはありません(ちなみに書き直す前はLINE NotifyではなくTwitterのbot用アカウントから通知されていた)。
ついでにAWS SAMってやつに入門してみたんですが、思ったよりも色々とハマってしまったのでメモしておこうと思います。
SAM大変だった
SAMや周辺(CFnなど)のことを基本的には何も知らないので、
などを眺めながら適当に入門した。
ハマったポイント1: CloudWatch Eventsのcron書式の書き方
cronの書式の場合は日にちか曜日の指定のどちらかに ?
を指定しないといけないので気をつけよう。
これは調べればすぐ分かる。
You can't specify the Day-of-month and Day-of-week fields in the same cron expression. If you specify a value (or a *) in one of the fields, you must use a ? (question mark) in the other. https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/ScheduledEvents.html
ハマったポイント2: Lambdaでmechanize gemを使う方法
これを回避するため、AWS SAMを用いて雛形作成した上で、 「sam build --use-container」を実行しAmazonLinux2のDockerコンテナ上でビルドを行いました。 https://qiita.com/Y_uuu/items/85c86df8773f7c225521
これでいけるけど、以後 sam build
がめちゃ遅くなる。つらい。どうにかなりませんかね?
ハマったポイント3: 環境変数の指定の仕方
なんか --env-vars
オプションを使った方法は見つかるんだけど sam deploy
がそのオプションをサポートしてないっぽいので --parameter-overrides
でやる方法を調べたところ、結局ここに書いてあるやり方が良さそうという感じだった。
ちなみにリンク先では --parameter-overrides SomeVar=123
という書き方をしているけどこれは手元で試したところ --parameter-overrides "KeyPairName=MyKey SomeVar=123"
という書き方をしないと通してくれなかった。
同様の書式をsam local invoke
はサポートしてるのでローカルで試したい場合はコマンドにコピペして使えば良い。
あと、Parametersセクションの方で宣言しているパラメーター名がResourcesセクションの方で宣言している環境変数名と同じだとなぜかうまくいかなくてハマっていた。 どうやら、以下のような制限によるものらしい(アンダースコアが使えない)。
論理 ID 論理 ID は英数字(A-Za-z0-9)とし、テンプレート内で一意である必要があります。論理名は、テンプレートの他の部分のリソースを参照するために使用します。たとえば、Amazon Elastic Block Store ボリュームを Amazon EC2 インスタンスにマップする場合、論理 ID を参照してブロックストアをインスタンスに関連付けます。 https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/resources-section-structure.html
つまり、Resourcesセクションの方でもUpperCamelCaseで環境変数名を宣言していれば同名でも問題なかった?このあたりは未確認。
特にエラーなど出してくれていなかったと思うので、分かりづらかった。