【问题标题】:No module named 'requests_aws4auth' when trying to import in a lambda尝试导入 lambda 时没有名为“requests_aws4auth”的模块
【发布时间】:2019-01-22 08:24:31
【问题描述】:

我需要我的 lambda 调用 API 网关,并在我的云形成模板中将以下代码作为 lambda 的内联代码。

from requests_aws4auth import AWS4Auth
def handler(event,context):
          client = boto3.client('sts')
          responseAssumeRole = client.assume_role(
            DurationSeconds=3600,
            RoleArn='arn',// real arn of the api gateway invocation role
            RoleSessionName='Bob',
          )
          credentials = responseAssumeRole['Credentials']
          auth = AWS4Auth(aws_access_key=responseAssumeRole['Credentials']['AccessKeyId'],
                                 aws_secret_access_key=responseAssumeRole['Credentials']['SecretAccessKey'],
                                 aws_host='host.execute-api.us-east-1.amazonaws.com',
                                 aws_region='us-east-1',
                                 aws_service='execute-api')
          headers= {'User-Agent' : 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36'}
          response = requests.get('https://host.execute-api.us-east-1.amazonaws.com/test',
                                  auth=auth, headers=headers)

这给了我以下错误

No module named 'requests_aws4auth'

也欢迎使用 aws 凭据创建身份验证的任何解决方案或替代方法。

【问题讨论】:

  • Amazon Web Services 版本 4 身份验证库pip install requests-aws4auth
  • @RoshanBagdiya 在导入之前如何在 lambda 中进行 pip 安装??

标签: python python-3.x amazon-web-services aws-lambda python-3.6


【解决方案1】:

将您的源代码和依赖项打包到一个 zip 文件中,将其上传到 S3,然后使用您的 AWS::Lambda::Function 资源下的 S3Bucket 和 S3Keys 属性。

例如在 Linux 上:

mkdir project-dir
cp myhandler.py project-dir
pip install module-name -t /path/to/project-dir

# zip the contents of project-dir , this is your deployment package
cd project-dir
zip -r deployme.zip .

【讨论】:

    【解决方案2】:

    虽然接受的答案有效,但我也想发布此资源。如果您不想将其打包并上传到 S3 并仍在寻找一种替代方法以在内联 lambda 中具有相同的功能,这将有所帮助。如果您使用这种方法,则首先不需要使用“requests_aws4auth”。

    https://docs.aws.amazon.com/general/latest/gr/sigv4-signed-request-examples.html

    你可以替换下面的

    access_key = os.environ.get('AWS_ACCESS_KEY_ID')
    secret_key = os.environ.get('AWS_SECRET_ACCESS_KEY')
    

    使用您从像这样的承担角色请求中获得的值

    access_key=responseAssumeRole['Credentials']['AccessKeyId']
    secret_key=responseAssumeRole['Credentials']['SecretAccessKey']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-09
      • 1970-01-01
      • 2021-10-18
      • 1970-01-01
      • 2016-06-21
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      相关资源
      最近更新 更多