Lambda Python 関数用のレイヤーを作成する方法を教えてください。

所要時間2分
0

AWS Lambda Python 関数用のレイヤーを作成したいです。

解決方法

以下の手順で、アプリケーションをデプロイして Lambda Python 関数を呼び出すレイヤーを作成します。

  1. AWS Serverless Application Repository を開きます。
  2. ナビゲーションペインで、利用可能なアプリケーションを選択します。
  3. カスタム IAM ロールまたはリソースポリシーを作成するアプリを表示を選択します。
  4. 検索ペインに python-lambda-layer-creation と入力します。
  5. python-lambda-layer-creation 関数を選択します。
  6. Python-lambda-layer-create アプリケーション設定から、このアプリがカスタム IAM ロールを作成することを承認しますを選択し、デプロイを選択します。

レイヤーを作成して Lambda 関数を呼び出し、レイヤーメタデータに含まれる依存関係のリストをパスすることができます。

次の例では、requests (最新バージョン)、numpy (バージョン 1.20.1)、keyring (>= バージョン 4.1.1) のライブラリを含む Python Lambda レイヤーを作成します。Lambda 関数は、次のようなペイロードで呼び出すことができます。

{
  "dependencies": { 
    "requests": "latest",
    "numpy": "== 1.20.1",
    "keyring": ">= 4.1.1" 
  },
   "layer": { 
     "name": "a-sample-python-lambda-layer",
     "description": "this layer contains requests, numpy and keyring libraries",
     "compatible-runtimes": ["python3.6","python3.7","python3.8"],
     "license-info": "MIT" 
  } 
}

Lambda Python 関数レイヤーをテストするため、ARN を書き留めておきます。次に、以下のような YAML テンプレートを使用して AWS CloudFormation スタックを作成します。

AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  Layer:
    Type: String
    Description: The ARN of the lambda function layer
Resources:
  LambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      Code:
        ZipFile: |
          import json
          import requests
          import numpy as np
          def handler(event, context):
            try:
                ip = requests.get("http://checkip.amazonaws.com/")
                x = np.array([2,3,1,0])
            except requests.RequestException as e:
                raise e

            return {
                "statusCode": 200,
                "body": json.dumps({
                    "array[0]": ("%s" % str(x[0])),
                    "location": ip.text.replace("\n", "")
                }),
            }
      Handler: index.handler
      Runtime: python3.7
      MemorySize: 128
      Timeout: 30
      Layers:
        - !Ref Layer
      Role:
        Fn::GetAtt:
        - LambdaExecutionRole
        - Arn
  LambdaExecutionRole:
    Description: Allow Lambda to connect function to publish Lambda layers
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Statement:
        - Effect: Allow
          Principal:
            Service:
            - lambda.amazonaws.com
          Action: sts:AssumeRole
      Path: /
      ManagedPolicyArns:
      - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
      # Policies:
      # - PolicyName: AllowPublishLambdaLayer
      #   PolicyDocument:
      #     Version: '2012-10-17'
      #     Statement:
      #     - Effect: Allow
      #       Action: lambda:PublishLayerVersion
      #       Resource: '*'

Lambda Python 関数を実行します。レスポンスの例:

{
  "statusCode": 200,
  "body": "{\"array[0]\": \"2\", \"location\": \"[your-outbound-ip-address]\"}"
}

注意: この Lambda 関数は pip を使用して依存関係を管理し、Lambda Layer に含まれるライブラリが Python パッケージインデックスリポジトリに存在するようにします。

依存関係とレイヤー属性用に定義されたレイヤーに含まれるPythonライブラリの例については、pip Web サイトの pip install を参照してください。

詳細については、Lambda Layer の作成と共有をご覧ください。


関連情報

Python による Lambda 関数の構築

Lambda 関数でのレイヤーの使用

Docker でシミュレートした Lambda 環境を使用して、Lambda レイヤーを作成する方法を教えてください。

レイヤーを使用して最新バージョンの AWS SDK for JavaScript を Node.js の Lambda 関数に統合するにはどうすればよいですか?

AWS公式
AWS公式更新しました 1年前
コメントはありません

関連するコンテンツ