【问题标题】:AWS lambda, Unknown service: 'quicksight'AWS lambda,未知服务:'quicksight'
【发布时间】:2019-05-22 10:40:40
【问题描述】:

我正在使用 boto3 API 从 lambda 创建 quicksight 组,具有对 quicksight 的完全访问权限

import boto3

quicksight_client = boto3.client('quicksight', region_name='us-east-1', 
                                 aws_access_key_id=ACCESS_ID, 
                                 aws_secret_access_key=ACCESS_KEY)

def lambda_handler(event, context):
    # list groups present in quicksight
    response = quicksight_client.list_groups(
        AwsAccountId=event['AWS Account ID'],
        Namespace='default'
    )

面临以下错误

Unknown service: 'quicksight'. Valid service names are: acm, acm-pca, alexaforbusiness, apigateway, application-autoscaling, appstream, appsync, athena, autoscaling, autoscaling-plans, batch, budgets, ce, cloud9, clouddirectory, cloudformation, cloudfront, cloudhsm, cloudhsmv2, cloudsearch, cloudsearchdomain, cloudtrail, cloudwatch, codebuild, codecommit, codedeploy, codepipeline, codestar, cognito-identity, cognito-idp, cognito-sync, comprehend, config, connect, cur, datapipeline, dax, devicefarm, directconnect, discovery, dlm, dms, ds, dynamodb, dynamodbstreams, ec2, ecr, ecs, efs, eks, elasticache, elasticbeanstalk, elastictranscoder, elb, elbv2, emr, es, events, firehose, fms, gamelift, glacier, glue, greengrass, guardduty, health, iam, importexport, inspector, iot, iot-data, iot-jobs-data, iot1click-devices, iot1click-projects, iotanalytics, kinesis, kinesis-video-archived-media, kinesis-video-media, kinesisanalytics, kinesisvideo, kms, lambda, lex-models, lex-runtime, lightsail, logs, machinelearning, macie, marketplace-entitlement, marketplacecommerceanalytics, mediaconvert, medialive, mediapackage, mediastore, mediastore-data, mediatailor, meteringmarketplace, mgh, mobile, mq, mturk, neptune, opsworks, opsworkscm, organizations, pi, pinpoint, polly, pricing, rds, redshift, rekognition, resource-groups, resourcegroupstaggingapi, route53, route53domains, s3, sagemaker, sagemaker-runtime, sdb, secretsmanager, serverlessrepo, servicecatalog, servicediscovery, ses, shield, sms, snowball, sns, sqs, ssm, stepfunctions, storagegateway, sts, support, swf, transcribe, translate, waf, waf-regional, workdocs, workmail, workspaces, xray

当从我的计算机执行相同的代码时,它的工作,但不是从 lambda

谁能帮我解决这个问题?

【问题讨论】:

  • 你安装了什么版本的boto3和botocore?您很可能需要更新您的库。
  • 我正在开发 AWS lambda,它已经预装了 boto3
  • 你在 AWS lambda 上执行时得到了那个?你在使用 lambda 代码编辑器吗?
  • 是的,我在使用 aws lambda code inline 执行时出现此错误,即代码编辑器

标签: python amazon-web-services lambda boto3


【解决方案1】:

我用 boto3-1.9.71 和 botocore-1.12.71 进行了测试,它工作正常。

最新版boto3打包步骤。

  1. 在本地计算机上为您的 lambda 函数创建一个目录
  2. 使用以下命令将最新的 boto3 安装到您的新目录中

    pip install boto3 --target /path/to/your/directory

  3. 导航到新目录并创建一个名为 lambda_function.py 的新文件(或任何名称。确保使用 filename.function 名称作为处理程序)
  4. 将以下代码粘贴到 .py 文件中

    导入 boto3 打印(boto3.版本) 客户端 = boto3.client('quicksight', region_name='us-east-1') 响应 = client.list_groups( AwsAccountId='0123456789', 命名空间='默认' )

  5. 您可以使用适当的访问密钥/配置文件在本地计算机上执行此 py 文件,以测试正在创建的客户端

  6. 现在从新目录中选择所有目录和文件并创建一个 zip 文件。
  7. 将此 zip 文件上传到 lambda,您应该能够正确执行该函数。

【讨论】:

  • 这就像一个冠军!我遵循了之前执行的步骤,我遵循了“使用虚拟环境”步骤,来自 Windows 机器的 aws 文档不起作用!
  • 按照相同步骤从虚拟环境安装时无法正常工作的原因是什么?
【解决方案2】:

boto3 支持哪些 AWS 服务不是在 boto3 中直接定义的,而是在 botocore 中定义的。对于 Quicksight 支持,您至少需要 botocore1.12.49 版本,这是添加了 Quicksight 支持的版本(尽管更改日志错误地提到了 updated Quicksight support)。

使用 AWS Lambda 时,您可以使用 AWS 提供的 boto3 版本或捆绑您自己的版本。当您使用 AWS 提供的版本时,您的代码当前使用过时的 botocore (1.10.74) and boto3 (1.7.74) 版本运行,因为 AWS 已经有一段时间没有更新它们了。这些旧版本还不支持 Quicksight。

我们只能推测为什么 AWS 停止为 AWS Lambda 环境更新 botocoreboto3,但这可能与 botocore 1.12.0boto3 1.9.0 引入的一些向后不兼容的更改有关。

要解决您的问题,您可以将支持 Quicksight 的最新版本的 botocoreboto3 添加到您的 deployment package,以使用它们,而不是 AWS 提供的。

【讨论】:

  • 我尝试使用新版本的 boto3 部署包,仍然是同样的错误@Dunedan
  • 最可能的问题是您没有正确打包它,因此您的 Lambda 函数仍然使用 AWS 提供的版本。要检查是否是这种情况,您可以检查您的运行代码使用的是哪个 boto3 版本:import boto3print(boto3.__version__)
猜你喜欢
  • 2021-04-01
  • 2019-08-13
  • 1970-01-01
  • 2019-05-02
  • 2015-09-06
  • 1970-01-01
  • 2020-03-12
  • 2017-07-28
  • 2021-07-31
相关资源
最近更新 更多