将 Ballerina 部署为 AWS Lambda 函数

Deploy Ballerina as AWS Lambda functions

我已经编写了一个基本的 Ballerina 函数并尝试部署为 AWS Lambda。

当我尝试添加 Lambda 层时(使用已发布的 ARN link - https://ballerina.io/deployment/aws-lambda/#ballerina-aws-lambda-layer-compatibility-matrix)AWS 报告权限错误

错误是

not authorised to perform lambda:GetLayerVersion on resource: arn:aws:lambda:eu-west-1:141896495686:layer:ballerina-0-990-3:4

我正在使用 eu-west-1 区域。我也试过 us-west-1.

我已经检查过,我的 lambda 执行角色确实包含 GetLayerVersion 权限。我还检查了我是否可以成功添加替代 public 层。例如来自 https://github.com/lambci/node-custom-lambda

的自定义 node11 运行时
arn:aws:lambda:eu-west-1:553035198032:layer:nodejs11:11

可以添加保存,没有相同的权限错误。

这表明芭蕾舞演员层可能没有适当的 public 权限。如果可以共享运行时包,我只是在探索,很高兴部署我自己的私有层。

我们已经为所有地区创建了图层,但遗憾的是,并未为所有地区设置权限。上面的错误是由于这个原因引起的,现在我们已经修复了它。您可以关注图层,请重试。

arn:aws:lambda:eu-west-1:141896495686:layer:ballerina-0-990-3:4
arn:aws:lambda:us-west-1:141896495686:layer:ballerina-0-990-3:4

此外,您应该能够通过替换 website

中指定的以下 ARN 的区域部分来使用任何层
arn:aws:lambda:<region to be replaced>:141896495686:layer:ballerina-0-990-3:4

1.0 及更高版本的更新

对于 1.0 以后的版本,您需要使用以下层。现在没有特定于版本的层,您也可以对新版本使用相同的层

aws lambda update-function-configuration --function-name <FUNCTION_NAME> --layers arn:aws:lambda:<REGION_ID>:141896495686:layer:ballerina:2

来自 WSO2 的更新——感谢 Anjana Fernando:

自从 Ballerina 1.x GA 版本发布以来,在编译时会显示对 Layer ARN 的最新引用以及生成的部署说明。

对于 Lambda By-Example 示例,生成的部署说明包括以下内容:

运行 使用以下命令部署每个 Ballerina AWS Lambda 函数:

aws lambda create-function --function-name <FUNCTION_NAME> --zip-file fileb://aws-ballerina-lambda-functions.zip --handler

aws_lambda_deployment.<FUNCTION_NAME> --runtime provided --role <LAMBDA_ROLE_ARN> --timeout 10 --memory-size 1024
    aws lambda update-function-configuration --function-name <FUNCTION_NAME> --layers arn:aws:lambda:<REGION_ID>:141896495686:layer:ballerina:2

替换 FUNCTION_NAME 和您自己的 LAMBDA_ROLE_ARN 当然仍然需要,但是 --layers 选项是对与 Ballerina 编译器版本匹配的层运行时的引用。唯一需要更改的是确定 REGION_ID,例如,us-east-1 表示要包含在您的部署中的层。

因此,

--layers arn:aws:lambda:<REGION_ID>:141896495686:layer:ballerina:2

将修改为

--layers arn:aws:lambda:us-east-1:141896495686:layer:ballerina:2

包括来自 AWS 的 us-east-1 区域的适当层。