部署无服务器Python应用程序时的权限问题

时间:2020-07-24 06:19:38

标签: amazon-web-services aws-lambda serverless

我有一个无服务器Python应用程序,我正在尝试使用sls deploy进行部署。 serverless.yml如下。

service: update-register

provider:
  name: aws
  runtime: python3.8
  profile: haumi
  stage: ${opt:stage, 'staging'}
  environment: ${file(environment.yml):${self:provider.stage}}
  region: ${self:provider.environment.REGION}

  iamRoleStatements:
    # para poder leer y escribir en el bucket
    - Effect: "Allow"
      Action:
        - "sqs:SendMessage"
      Resource: "*"

functions:
  update:
    handler: handler.update
    events:
      - sqs: ${self:provider.environment.AWS_SQS_QUEUE}

处理程序文件如下:

def update(event, context):
    print("=== event: ", event)

但是,当我尝试部署并触发更新功能时,AWS Cloudwatch中会出现以下错误

[ERROR] PermissionError: [Errno 13] Permission denied: '/var/task/handler.py'
Traceback (most recent call last):
  File "/var/lang/lib/python3.8/imp.py", line 300, in find_module
    with open(file_path, 'rb') as file:

我尝试更改此文件的权限,但不能。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

此问题与无服务器无关,但与我在Ubuntu 18.04中已安装的NTFS分区的权限有关。

tl;博士 将已挂载分区的/ etc / fstab更改为

UUID=8646486646485957 /home/Data      ntfs    defaults,auto,umask=002,uid=1000,gid=1000 0       0

使用id -u获取uid和gid。

详细说明

我发现,在NTFS分区中,您不能仅使用chmod更改文件权限。在安装分区时,需要配置掩码。由于我是在引导Ubuntu时挂载分区的,因此所需的更改在我的fstab文件中。 umask参数确定无法设置的权限。您可以找到有关此参数here的更多信息。

执行此重启后。您会发现文件具有不同的权限。就我而言,允许我部署的代码正常工作的权限是

-rwxrwxr-x 1 user group   59 jul 24 00:47 handler.py*

我确信通过允许其他人执行文件会出现问题。但这解决了问题。

答案 1 :(得分:0)

完全相同的错误的另一个原因:

[ERROR] PermissionError: [Errno 13] Permission denied: '/var/task/<my_lambda_python_file>.py'
Traceback (most recent call last):
  File "/var/lang/lib/python3.8/imp.py", line 300, in find_module
    with open(file_path, 'rb') as file:

我当时使用Atlassian Bamboo部署Lambda,Bamboo似乎搞乱了组成Lambda的文件的权限:

-rw-r-----@  1 <user>  <group>   2.5K 19 Nov 18:10 <my_lambda_python_file>.py

我通过添加到Bamboo脚本来解决此问题:

chmod 755 <my_lambda_python_file>.py

在将代码捆绑到zip文件之前。