将其他文件部署到AWS Lambda(Python)

时间:2016-06-26 23:26:01

标签: python amazon-web-services deployment aws-lambda

我正在尝试将包含加密机密的其他文件上传到AWS Lambda,但我遇到了麻烦。该文件将从我的Python脚本中读取并进行处理。我已经在本地测试了这个功能,它运行得很好。

我正确打包并上传.zip,因为AWS在上传后运行脚本没有问题。但是,我的代码在读取我的文件的行上失败了,即使它应该在工作目录中。

是否可以将文件上传到AWS zip部署中,并让脚本读取它?

1 个答案:

答案 0 :(得分:0)

我很惊讶这不起作用,所以我为任何感兴趣的人做了一些挖掘。

我创建了一个简单的函数:

import json
import os
import random

def lambda_handler(event, context):
    selection = str(random.randint(1,5))

    with open('mydata.csv') as dogs:
        for l in dogs:
            if selection == l.split(',')[0]:
                random_dog = l.split(',')[2]

    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!'),
        'cwd': os.getcwd(),
        'ls': os.listdir(),
        'random_dog': random_dog
    }

一个数据文件:

akc_popularity,year,breed
1,2019,labrador Retriever
2,2019,German Shepherd Dog
3,2019,Golden Retriever
4,2019,French Bulldog
5,2019,Bulldog

将它们添加到 zip 存档:

$ zip fileImport.zip importer.py
$ zip fileImport.zip mydata.csv

创建函数:

$ aws lambda create-function --function-name fileImport --zip-file fileb://fileImport.zip --handler importer.lambda_handler --runtime python3.8 --role arn:aws:iam::***************:role/Lambda_StackExchange

触发函数:

$ aws lambda invoke --function-name fileImport output.json
{
    "StatusCode": 200,
    "ExecutedVersion": "$LATEST"
}
$ jq . output.json
{
  "statusCode": 200,
  "body": "\"Hello from Lambda!\"",
  "cwd": "/var/task",
  "ls": [
    "importer.py",
    "mydata.csv"
  ],
  "random_dog": "Bulldog\n"
}

所以,请分享一些代码,以便我们深入研究!仅供参考...我强烈建议使用 AWS Secrets Manager 存储机密。它非常易于使用,并且可以将您的硬编码秘密置于版本控制系统之类的东西之外。此外,更改您的机密不需要重新部署您的函数。