Potential Action Required: Lambda Botocore Deprecation [AWS Account: 123456789012] メールの対応方法

2021.02.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

困っていた内容

AWS から Lambda Botocore の非推奨に関するメールが届きました。メールの件名は Potential Action Required: Lambda Botocore Deprecation [AWS Account: 123456789012] です。どうすれば影響を確認できますか?

どう対応すればいいの?

メール本文のリンク [4] https://aws.amazon.com/premiumsupport/knowledge-center/cloudformation-cfn-response-lambda/日本語版)の手順に沿って対象リソースを確認してください。

この手順を大まかに説明すると以下のとおりです。

  1. CloudFormation のカスタムリソースを使用しているスタックの抽出
  2. スタックに関連付けされている Lambda 関数の抽出
  3. CloudFormation テンプレートに含まれる cfn-response モジュールの確認
  4. cfn-response モジュールを urllib3 を使用する最新バージョンへ更新

以下のようなテンプレートを使用している場合は、手順に沿って修正してください。

  MyFunction:
    Type: AWS::Lambda::Function
    Properties:
      Handler: index.handler
      Role: !GetAtt MyRole.Arn
      Runtime: python3.7
      Code:
        ZipFile: |
          import cfnresponse
          ...

この他にもランタイムが Python 2.7/3.6/3.7 の Lambda 関数内で botocore.requestsを使用するコードがあれば、コードの更新が必要です。

たとえば、以下のような botocore 依存モジュールの requests を使用するコードは更新対象です。

更新が必要なコード

from botocore.vendored import requests

次のコード例を参考に修正してください。

更新後のコード例(Python 標準の urllib を使用)

import urllib.request

更新後のコード例(requests ライブラリを使用)

import requests

requests ライブラリを Lambda で使用するには、ZIP コード内に pip などのパッケージマネージャーで取得した requests モジュール含めるか、Lambda Layers を使用してください。

やってみた

私が利用している環境にもメールが届いたので、手順に沿って調べてみました。

まずはAWS ナレッジセンターのコマンドを参考に、カスタムリソースを使用している CloudFormation スタックを抽出します。

# ご利用のリージョンに応じて変更してください
$ REGION=ap-northeast-1

$ aws cloudformation list-stacks --region $REGION | grep -oE 'arn:[^"]+' | while read arn; do aws cloudformation list-stack-resources --stack-name $arn --region $REGION | grep -E '(Custom::)|(::CustomResource)' | awk '{print $2}' | while read resource; do if [[ -n $resource ]]; then echo $arn; echo $resource; fi; done; done
arn:aws:cloudformation:ap-northeast-1:0123456789:stack/test-stack/<stack-id>
"AWS::CloudFormation::CustomResource",
...

上記の結果から、CloudFormation スタック: test-stack のテンプレート AWS::CloudFormation::CustomResource 句でカスタムリソースを使用していることがわかりました。

その後、CloudFormation コンソールのテンプレートで AWS::CloudFormation::CustomResource を検索したところ、cfn-response モジュールは使用していませんでした。

なお、対象の CloudFormation スタックはすでに削除済みのスタックでした。

また、アカウント内のランタイムが Python 2.7/3.6/3.7 の Lambda 関数で、from botocore.vendored import requests の記述がないことを確認しました。

以上のことから、私の環境では影響なしと判断しました。

メールが届いても対応が必須なわけではない

Potential Action Required: Lambda Botocore Deprecation [AWS Account: 123456789012] のメールは、影響がない AWS アカウントにも通知されています。ご利用の環境で影響があるかを確認するには、以上を参考にそれぞれの環境で調べてください。

参考資料