AWS Lambda Python 関数用のレイヤーを作成したいです。
解決方法
以下の手順で、アプリケーションをデプロイして Lambda Python 関数を呼び出すレイヤーを作成します。
- AWS Serverless Application Repository を開きます。
- ナビゲーションペインで、利用可能なアプリケーションを選択します。
- カスタム IAM ロールまたはリソースポリシーを作成するアプリを表示を選択します。
- 検索ペインに python-lambda-layer-creation と入力します。
- python-lambda-layer-creation 関数を選択します。
- 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 関数に統合するにはどうすればよいですか?