「Node.js 8.10を使用するAWSのLambda関数が非推奨になるよ」というお知らせを読んで考えたこと

## はじめに

社内向けにお知らせを書いていたけど、残念な弊社では議論できそうな人がいなかったので、保守とか更新についての考えとかを指摘があればQiitaでコメントもらいたいなと思って投稿した記事です。

なので、コメントがあればいただけますと幸いです。


## AWS Lambdaのサービス利用に関するお知らせ

2019年10月19日 午前 4:10:00 UTC+9にPersonal Helth Dashboardにて通知がありました。

### 通知内容

> We are contacting you as we have identified that your AWS Account currently has one or more Lambda functions using Node.js 8.10, which will reach its EOL at the end of 2019.

```日本語訳
このAWSアカウントには現在、Node.js 8.10を使用するLambda関数があり、2019年末にEOLに達することを確認したため、お知らせします。
```

>  What’s happening?
> >The Node community has decided to end support for Node.js 8.x on December 31, 2019 [1]. From this date forward, Node.js 8.x will stop receiving bug fixes, security updates, and/or performance improvements. To ensure that your new and existing functions run on a supported and secure runtime, language runtimes that have reached their EOL are deprecated in AWS [2].

```日本語訳

どうゆうことですか？

Nodeコミュニティは、Node.js 8.xのサポートを2019年12月31日に終了することを決定しました。[1]
この日以降、Node.js 8.xはバグ修正、セキュリティアップデート、および/またはパフォーマンス改善の受信を停止します。サポートされている安全なランタイムで新しい関数と既存の関数を実行することは、EOLに達した言語ランタイムはAWSで非推奨になりました。[2]
```

> For Node.js 8.x, there will be 2 stages to the runtime deprecation process:
> 1. Disable Function Create – Beginning January 6, 2020, customers will no longer be able to create functions using Node.js 8.10
> 2. Disable Function Update – Beginning February 3, 2020, customers will no longer be able to update functions using Node.js 8.10

```日本語訳
Node.js 8.x の場合、ランタイムは２段階のプロセスで非推奨になります。

1. 関数を無効にする
　2020年1月6日以降、お客様はNode.js 8.10を使用して関数を作成できなくなります。

2. 関数の更新を無効にする
　2020年2月3日以降、お客様はNode.js 8.10を使用している関数を更新できなくなります。

```

> After this period, both function creation and updates will be disabled permanently. However, existing Node 8.x functions will still be available to process invocation events.

```日本語訳
この期限が過ぎると、関数の作成と更新の両方が永久に無効になります。
ただし、既存のNode 8.x関数は、呼び出しイベントによる利用は引き続き可能です。
```

> What do I need to do?
>> We encourage you to update all of your Node.js 8.10 functions to the newer available runtime version, Node.js 10.x[3]. You should test your functions for compatibility with the Node.js 10.x language version before applying changes to your production functions.

```日本語訳
何をする必要がありますか？

Node.js 8.10のすべての関数を利用可能な新しいランタイムバージョン(Node.js 10.x）に更新することをお勧めします。
実動関数に変更を適用するために、Node.js 10.x言語バージョンとの互換性について関数をテストする必要があります。
```

> What if I have issues/What if I need help?
>>Please contact us through AWS Support [4] or the AWS Developer Forums [5] should you have any questions or concerns.

```日本語訳
問題がある場合/助けが必要な場合はどうなりますか？

 質問や懸念がある場合は、AWSサポート[4]またはAWS開発者フォーラム[5]からご連絡ください。
```

[1] https://github.com/nodejs/Release
[2] https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html
[3] https://aws.amazon.com/about-aws/whats-new/2019/05/aws_lambda_adds_support_for_node_js_v10/
[4] https://aws.amazon.com/support
[5] https://forums.aws.amazon.com/forum.jspa?forumID=186


## 考えたこと

今回はNode.jsのため弊社では影響はないので問題はないでしょう。（利用していないので）

ただし、これがPythonになった場合は話が変わります。

###　既存のLambda関数の更新およびテスト

現在、保守/運用している顧客のAWS環境においては、Python 3.6で動くLambda関数をいくつか利用しています。

先日、2019年10月14日に Python 3.8の正式リリースが[発表](https://pythoninsider.blogspot.com/2019/10/python-380-is-now-available.html)されました。

詳細な機能についてはまとめてくれているものがあるので参考にするとよいでしょう。
[Python3.8の新機能 (まとめ)](https://qiita.com/ksato9700/items/3846e8db573a07c71c33)

現在AWS Lambdaでデフォルトで利用できるPythonのランタイムバージョンは3.6と3.7です。

AWSでの他の言語ランタイムのサポートの雰囲気を鑑みると、1 or 2　バージョンにのみをサポートとし３つ前のバージョンはサポート非推奨とする流れでしょう。

つまり、現在利用中のLambda関数はすべて、更新準備に向けてテストを実施しなければなりません。

### ランタイムポリシー

[2] https://docs.aws.amazon.com/lambda/latest/dg/runtime-support-policy.html

を覗いてみました。

> AWS Lambda ランタイムは、メンテナンスとセキュリティの更新の対象となるオペレーティングシステム、プログラミング言語、およびソフトウェアライブラリの組み合わせを中心に構築されています。ランタイムのコンポーネントがセキュリティアップデートでサポート対象外となった場合、Lambda はこのランタイムを廃止します。

> 廃止は、2 つのフェーズで行われます。最初のフェーズでは、廃止予定のランタイムを使用する関数を作成することはできません。少なくとも 30 日間は、廃止予定のランタイムを使用する既存の関数を引き続き更新することができます。この期間が過ぎると、関数の作成と更新のいずれも、完全に無効になります。ただし、この関数は呼び出しイベントの処理に引き続き使用することができます。

お知らせ内容のことですね。


> ほとんどの場合、言語バージョンまたはオペレーティングシステムのサポート終了日は事前に通知されます。今後 60 日以内に廃止予定の関数がランタイムで実行されている場合は、関数をサポートされているランタイムに移行して準備する必要があることが Lambda より E メールで通知されます。下位互換性のない更新を必要とするセキュリティ上の問題、または長期サポート (LTS) スケジュールをサポートしないソフトウェアなど、場合によっては事前通知が不可能な場合があります。

**『下位互換性のない更新を必要とするセキュリティ上の問題、または長期サポート (LTS) スケジュールをサポートしないソフトウェアなど、場合によっては事前通知が不可能な場合があります。』**


ですよねー。
ということは、概ね新しいランタイムバージョンが正式リリースされた場合は、身構えておく必要があるということですかね。

> ランタイムが廃止されると、Lambda は呼び出しを無効にすることで終了する可能性があります。廃止予定のランタイムは、セキュリティアップデートやテクニカルサポートの対象にはなりません。ランタイムを終了する前に、Lambda によって、影響を受けるお客様に追加の通知が送信されます。現時点では、ランタイムの廃止予定はありません。

ちょっと日本語理解が難しいような気がする文章。

呼び出し　すなわち、 CloudWatchとかのイベントトリガーのことを指しているのかな。
あ、違うのかな。AWS様が呼び出し機能を無効にした場合、その時点からランタイムが終了するから気を付けてねって方かな。

しかも廃止予定のランタイムについては、更新とかはサポートしませんよっと。

### お知らせ通知から廃止になるまでの期間

最低でも30日間の利用は可能。
今回の通知が、2019年10月19日 で、2020年2月3日以降更新不可ということは、
テストできる期間は約3か月ほどって感じでしょうか。

カスタムランタイム利用して、自分たちで面倒みるのは運用面であったりバージョンの管理性とか
もろもろ良いやり方って感じではないですもんねえ。

## まとめ

とりあえず、AWS Lambdaのランタイムの廃止予定については、
事前には通知はするけど、すべて顧客で対応してねということ。


### 今後やっておくべきこと（やっておきたいこと）

1. 利用している言語の新規バージョンリリースをウォッチする。
2. AWSのランタイムに合わせて関数を更新する
3. Lambda関数の一覧をランタイムバージョン付きでリストアップしておくこと。

こんなところでしょうか。