如何为Amplify v2 Android应用添加REST API?遇权限及构建错误求助
一、IAM权限错误处理
执行amplify add api后运行amplify push,CLI卡在「Creating API models...」阶段并抛出如下错误:
User: arn:aws:iam::xxxxxxxxxxxx:user/tb2-amplify is not authorized to perform: apigateway:GET on resource: arn:aws:apigateway:us-east-1::/restapis/xxxxxxxxxx/stages/dev/sdks/android because no identity-based policy allows the apigateway:GET action
原因
Amplify CLI在推送过程中需要调用API Gateway的apigateway:GET接口,获取生成客户端SDK的相关资源信息,你的IAM用户缺少针对该特定资源路径的权限策略——哪怕你以为用户已有授权,也可能是策略未覆盖API Gateway的SDK路径。
解决办法
- 快速验证:给IAM用户附加
AdministratorAccess权限(你已尝试并成功推送),适合快速确认流程正确性。 - 最小权限配置:创建自定义IAM策略,允许用户对目标API Gateway的SDK路径执行
apigateway:GET操作,示例策略如下:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "apigateway:GET", "Resource": "arn:aws:apigateway:us-east-1::/restapis/xxxxxxxxxx/stages/dev/sdks/*" } ] }
记得替换策略中的API Gateway ID、区域为你的实际信息,再将策略附加到对应的IAM用户。
二、流程合理性验证
你设计的android -> Amplify.API.get() -> Lambda Function -> DynamoDB流程完全没问题,这是Amplify REST API的标准使用模式:客户端通过Amplify调用API Gateway触发Lambda,再由Lambda操作DynamoDB。amplify push前不需要额外特殊配置,之前的问题是CLI执行时的用户权限缺失,和运行时的客户端权限无关。
三、构建错误修复
推送成功后出现package com.amazonaws.mobileconnectors.apigateway.annotation does not exist等编译错误,是因为生成的tb2api.TbapiClient.java依赖AWS API Gateway的Android核心库,只需在Module级别的build.gradle中添加以下依赖:
implementation 'com.amazonaws:aws-android-sdk-apigateway-core:2.74.0'
注意替换版本号为与你项目中AWS SDK兼容的最新版本。
内容的提问来源于stack exchange,提问作者jbdev

