こんにちは、上野です。
最近話題になった(?)、LambdaのランタイムPython 3.6サポート終了と、AWS Control TowerのバージョンUPについてです。
AWSからもメールが来ており、ランタイムPython 3.6のLambdaについて以下の案内が出ています。
Lambda での言語ランタイムのサポートの終了は 2 段階で行われます。2022 年 7 月 18 日以降、Lambda は Lambda 関数で使用される Python 3.6 ランタイムにセキュリティパッチやその他アップグレードを適用しなくなり、Python 3.6 を使用する関数は、テクニカルサポートの対象外となります。さらに、Python 3.6 ランタイムを使用する新しい Lambda 関数を作成できなくなります。2022 年 8 月 17 日以降は、Python 3.6 ランタイムを使用している既存の関数をアップデートすることができなくなります。
Control Towerで作成されるLambda
Control Towerでは、Configルールで作成された発見的ガードレールの通知用に各アカウントでLambda関数が作成されます。
そのランタイムが3.6となっています。(ランディングゾーンが2.8以下の場合)
関数の実行はサポート終了後も可能ですが、以下のとおりAWSのニュースでも「strongly recommends」(強く推奨)となっており、基本的には2.9へのバージョンアップは必須になるでしょう。
AWS Control Tower now supports Python 3.9 runtime
なお、Control Towerのバージョンアップによって、既存のAWSアカウントのワークロード、特に本番サービスを提供しているような部分に影響を与える可能性はほぼ無いですが、予防的ガードレールの更新やリージョン拒否などの設定変更があると、今までできていた作業ができなくなる可能性もあるので注意が必要です。アップデートの内容は都度リリースノートを確認するのが良いでしょう。
バージョンUPする
ということで実際にやっていきます。
今回私が試す環境のアカウント構成は以下のとおりになっています。
Control Towerが初期作成するCoreOU+2アカウントの他に、2つのOUがあってOU配下にそれぞれ1アカウント存在します。 そのほかRoot直下に、マネジメント、廃止したアカウント、Control Tower外の有効アカウントがそれぞれ1つ存在する状態です。
Control Towerで見るとこんな感じです。
ではバージョンUPしていきます。ランディングゾーン設定のページへ遷移し、バージョン2.9を選択し、更新します。
概要が表示されます。2.8→2.9のアップデートはリリースノートによるとLambdaのバージョンUPのみのようです。
リージョン拒否、対象リージョン、KMS暗号化の設定をバージョンアップに合わせて変更できますが、この設定はバージョンアップに関係なく設定変更も可能です。今回はそのまま更新します。
更新状態に入ります。更新作業中は、ガードレールの設定などControl Tower上の設定変更はできません。
しばらくして完了しました。私の環境では30分ほどかかりました。
アカウントの更新が必要とのことなので、アカウント一覧を見ると、Security OU以外のアカウントで「更新が利用できます」という状態になっています。まずは1アカウント更新を行います。
アカウントの更新ボタンを押します。この時点ではランディングゾーンのバージョンは2.8です。
サービスカタログ上のステータスによってはその完了を待つ状態がある必要がある旨警告が表示されます。 今回は問題なく使用可能ステータスだったのでこのまま更新します。
更新の詳細はサービスカタログを見るよう促されるので、そちらを確認します。
以下のように変更中ステータスになっていることが確認できます。
15分ほどで完了しました。
ランディングゾーンも無事2.9になっています。
先ほどは1アカウントで更新しましたが、今度はOUの再登録で更新を行ってみます。 複数アカウントがある場合はそちらのほうが早いですね。 ちなみに他のアカウントやOUが登録中の場合はこの作業はできません。
2021年1月に一括更新がサポートされています。 AWS Control Tower が一括アカウント更新の提供を開始
Control Tower未登録アカウントがOU配下にあった場合に色々と新規設定が追加されるため、色々とメッセージが表示されますが、既存アカウントであればバージョンUP以外の変更はありません。
OUが登録中ステータスとなります。
アカウント単体のときと同様15分ほどで完了しました。
肝心の各アカウント上のLambda関数のランタイムもPython 3.9になっています。
このLambdaはCloudFormation StackSetsで作成されているので、そこがControl Towerによって更新されたようです。
まとめ
今回は2.8→2.9のアップデートだったのでリリースノートとしてはLambdaのバージョンUPだけでしたが、OUやアカウントの更新も含めると、1時間以上かかりました。待ち時間がほとんどですが、バージョンアップをする場合は、ある程度まとまった時間をとって実施したほうが良さそうです。 アカウントやOU更新時もCloudFormation StackSetsの更新が動いており、そういった各種更新処理に時間がかかっているのかもしれません。同時更新ができないのも少しツライポイントです。
ドキュメントを見ると一応スクリプトで更新もできそうなので、多い場合はそちらを試してみても良いかもしれないです。待ち時間の部分は大きく変わらないかとは思いますが。
Configuration update management in AWS Control Tower - AWS Control Tower
新しいバージョンが出るたびにこの作業もツライ部分はあるので、絶対に毎回バージョンアップというよりは、「使いたい機能が新バージョンで出た場合」や「サポート切れ等必須の場合」にバージョンアップするくらいでも良いかもしれません。ただし、放置しすぎると最新版と差分が広がってバージョンアップ時の影響も大きくなりそうでコワい部分もあり悩ましいポイントです・・
参考になれば幸いです!