amazon-web-services - 通过 AWS SDK for Go 上传到 Device Farm 的 Android 应用程序从未更改过 INITIALIZED 状态

标签 amazon-web-services go aws-sdk aws-device-farm

我正在尝试使用适用于 Go 的 AWS 开发工具包在 AWS Device Farm 中自动运行应用程序。但是任何使用 Go 版本 SDK 上传的应用程序都不会从“INITIALIZED”状态改变。如果我通过 AWS 控制台 Web UI 上传它们,那么一切都会好起来的。

上传代码示例: func uploadApp(client *devicefarm.DeviceFarm, appType, projectArn string) string { 参数 := &devicefarm.CreateUploadInput{ 名称:aws.String(*appName), ProjectArn: aws.String(projectArn), 类型:aws.String(appType), } resp, err := client.CreateUpload(params) 如果错误!= nil { log.Fatal("无法上传应用程序,因为:", err.Error()) } log.Println("上传 ARN:", *resp.Upload.Arn) 返回*resp.Upload.Arn } 作为回应,我得到了类似的内容:
{ 上传:{ Arn: "arn:aws:devicefarm:us-west-2:091463382595:上传:c632e325-266b-4bda-a74d-0acec1e2a5ae/9fbbf140-e377-4de9-b7df-dd18a21b2bca", 创建时间:2016-01-15 14:27:31 +0000 UTC, 名称:“app-debug-unaligned.apk”, 状态:“初始化”, 类型:“ANDROID_APP”, 网址:“啦啦啦啦” } }
随着时间的推移,状态永远不会从“初始化”改变。正如我提到的,从 UI 计划运行的应用程序运行良好。

如何找出原因?

=========================================

解决方案:

1) 在CreateUpload之后,它需要使用响应中预签名的S3链接上传文件
2) 上传应通过 HTTP PUT 请求通过接收到的 URL 执行,文件内容在正文中
3) 在&devicefarm.CreateUploadInput中应指定ContentType参数。对于 PUT 请求,应使用相同的 Content-Type header 值
4) 如果从 Go 代码发送 PUT 请求,则应手动设置 Content-Length header

最佳答案

当您调用 CreateUpload API 时,Device Farm 将返回包含“Url”字段的“上传”响应。

{ 上传:{ Arn: "arn:aws:devicefarm:us-west-2:....", 创建时间:2016-01-15 14:27:31 +0000 UTC, 名称:“应用程序名称.apk”, 状态:“初始化”, 类型:“ANDROID_APP”, 网址:“啦啦啦啦” } }

返回的网址“bla-bla-bla”是一个预签名的 S3 网址,供您上传应用程序。有关使用预签名 URL 上传对象的文档:http://docs.aws.amazon.com/AmazonS3/latest/dev/PresignedUrlUploadObject.html

您的申请上传后,该应用就会得到处理。您的上传状态将更改为“处理中”和“成功”(如果出现问题,则更改为“失败”)。一旦它处于“成功”状态,您就可以使用它来安排运行。

关于amazon-web-services - 通过 AWS SDK for Go 上传到 Device Farm 的 Android 应用程序从未更改过 INITIALIZED 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34813647/

相关文章:

c++ - AWS 开发工具包 C++ 签名 V2

amazon-web-services - EC2 - 从 VPC 中删除 EC2

amazon-web-services - 如何为多个用户管理 EC2 key 对?

go - 在条件语句中声明但未使用的变量

go - 与Google Photos API的竞争条件

c++ - C++ 中的 std::thread 与 Go 语言中的 goroutine?

javascript - 从 Amazon 检索 ASIN 并将其存储在 Netsuite 中

amazon-web-services - Lambda 的 aws-sdk 不是最新的吗?

amazon-web-services - 使用内置 sagemaker 算法进行增量学习

node.js - 构建 Alexa 技能时,在 lambda 函数中使用 NodeJS 请求的 http 响应不正确或超时