Serverless Framework中AWS AppSync Arn引用错误求助
解决Serverless中Lambda IAM角色动态引用AppSync API ARN的问题
错误提示的核心原因是:${appsync:arn}变量解析后并非字符串类型——Serverless AppSync Plugin提供的该变量本质是CloudFormation引用,而非直接字符串,嵌套在CloudFormation的!Sub函数中时会触发解析冲突。以下是三种可行解决方案:
方案1:直接使用Serverless变量字符串拼接
用双引号包裹完整Resource字符串,让Serverless先完成变量解析再拼接路径:
provider: iam: role: statements: - Effect: 'Allow' Action: - 'appsync:GraphQL' Resource: "${appsync:arn}/types/Mutation/fields/*" resources: Outputs: apiArn: Value: ${appsync:arn} appSync: name: AppSync-api ...
方案2:直接引用CloudFormation资源ARN(推荐)
Serverless AppSync Plugin会自动创建逻辑ID为AppSyncApi的CloudFormation资源,直接通过!Sub拼接该资源的ARN:
provider: iam: role: statements: - Effect: 'Allow' Action: - 'appsync:GraphQL' Resource: !Sub "${AppSyncApi.Arn}/types/Mutation/fields/*" resources: Outputs: apiArn: Value: ${appsync:arn} appSync: name: AppSync-api ...
该方式绕开Serverless变量层,直接使用CloudFormation原生引用,避免解析顺序冲突,稳定性更强。
方案3:自定义变量提前拼接
在custom区块预定义完整的Resource ARN,再在IAM语句中引用:
custom: appsyncMutationResource: "${appsync:arn}/types/Mutation/fields/*" provider: iam: role: statements: - Effect: 'Allow' Action: - 'appsync:GraphQL' Resource: ${self:custom.appsyncMutationResource} resources: Outputs: apiArn: Value: ${appsync:arn} appSync: name: AppSync-api ...
内容的提问来源于stack exchange,提问作者Farshid
相关产品推荐
相关产品推荐

