在AWS Appsync和Lambda结合的过程中,有一种常用的方法是将常用的函数打包成Lambda Layer,再在Appsync中调用该函数,以实现代码的复用。但在此过程中,常常遇到的问题是无法正确识别Layer中的函数。
解决方法是需要在Appsync中正确的指定Layer的ARN(Amazon资源名),使得Appsync能够正确的引用Lambda Layer中的函数。 下面提供一个包含代码示例的解决方案:
在Lambda控制台中,创建一个Lambda Layer,并上传Layer的代码,Layer的格式可以为:Zip格式、tar.gz格式,或是目录格式。例如以下示例:
在Appsync中定义一个DataSource来调用Lambda函数:
然后在Type Resolver中指定 DataSource 调用Lambda函数:
这里需要注意的是,DataSource的类型和 Type Resolver 的类型必须要匹配。例如该示例中DataSource为AMAZON_LAMBDA而Type Resolver为Query。
此时就可以通过Appsync来正确调用Lambda Layer中的函数,实现函数的复用。
注意:在定义Layer ARN时,需要指定正确的Layer的版本号,否则会有以下错误提示:
未找到Lambda处理程序...ARN: arn:aws:lambda:us-west-2:xxxxxxxxx:layer:my-layer:0 (Service: AWSLambda; Status Code: 404; Error Code: ResourceNotFoundException; Request ID: xxxxxxxx-xxxx-xxxx-xxxx- xxxxxxxxxxxx; Proxy: null)