问题标签 [aws-amplify-cli]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2073 浏览

amazon-web-services - AWS Amplify CLI CloudFront S3 限制

使用 AWS S3 和 CloudFront 托管站点时,可以限制对您从 Amazon S3 存储桶提供的内容的访问

我想将对 S3 上的资产的访问限制为我的 Amplify 应用程序 (CDN)。

是否可以使用 AWS Amplify 实现相同的限制?部署我的 AWS Amplify 应用程序后,我看不到 CloudFront 分配。文档指出:“AWS Amplify 控制台利用 Amazon CloudFront 全球边缘网络在全球范围内分发您的 Web 应用程序”(常见问题解答,托管)。

0 投票
1 回答
1918 浏览

reactjs - AWS Amplify GraphQL 查询 - 列出所有元素并在不同视图中过滤所有者的元素

我创建了简单的 grapql 模式:

AWS Amplify 为我生成listAnnouncements查询,允许我获取其所有者的所有公告,因此在所有者的帐户中,我只会看到他创建的那些。在单独的视图中,我想列出所有创建的公告,也包括其他用户。

我认为问题在于我如何访问查询,所以我检查了 AWS Amplify<UserContext><Connect>方法,但看起来它并没有解决问题。

用户有没有办法获得对所有公告的读取权限,并且只能修改他创建的公告?

0 投票
0 回答
622 浏览

amazon-cloudformation - Amplify 不知从何处获取了一个 appClientId,现在无法更新堆栈

我正在使用 Amplify 开发应用程序一切都很好,我对我的dev环境进行了一些更改以包括社交登录,并且在本地运行良好

然后,当我尝试使用 Amplify Console CD 进行部署时,它失败了,在深入研究之后,我在这里使用自定义脚本找到了解决方案amplify simplepush

只是把这个放在上下文中

在一切恢复正常后,我很高兴将我的更改推送到staging 所以,我已经更改了我的分支,检查了staging环境并尝试推送

然后我陷入了一个错误,说它找不到 AppClientID

资源名称:XXXXXXXXXXX (AWS::Cognito::UserPoolClient) 事件类型:更新原因:用户池客户端不存在。(服务:AWSCognitoIdentityProviderService;状态代码:400;错误代码:ResourceNotFoundException;请求 ID:YYYYYYYYYYYYYYYYYY URL:https ://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/xxxxxxxxxxx

URL 转到您要查找的页面不存在。页面客户端ID,真的,它不存在,我不知道它为什么要尝试更新它

所以我同时看了 amplify/#current-cloud-backend/amplify-meta.jsonamplify/backend/amplify-meta.json

两者都包含这样的代码行(在 auth->output 部分):

应该来自#current-cloud-backend云端,所以我不应该碰它,但我不知道它是如何得到那个代码的,devappClient 也不是这个代码。

所以,我尝试将代码更改为(在amplify/backend/amplify-meta.json文件上):“AppClientID”:“MY-VALID-ID”

然后再推

但是错误还在继续,然后amplify/backend/amplify-meta.json又用错误的id更新了

知道可能是什么原因造成的以及如何解决吗?

0 投票
0 回答
1068 浏览

amazon-cognito - 未经身份验证的用户的 AWS Amplify API 身份验证错误

我使用 Amplify 为 iOS 应用程序创建了一个书籍 API。我希望 book 表对经过身份验证和未经身份验证的用户都具有读取权限。这是架构:

但是,从 调用fetchAWSAppSyncClient,出现以下错误:

Cognito 身份池已Enable access to unauthenticated identities检查并且存在未经身份验证的 IAM 角色。

可能是什么问题呢?

0 投票
1 回答
1094 浏览

amazon-cloudformation - 如何让 Amplify CloudFormation 了解在其外部所做的更改

我最终发现 Amplify 无法推送我所做的任何更改,并且不存在 UserPool clientId 异常。

就像是

资源名称:XXXXXXXXXXX (AWS::Cognito::UserPoolClient) 事件类型:更新原因:用户池客户端不存在。(服务:AWSCognitoIdentityProviderService;状态代码:400;错误代码:ResourceNotFoundException;请求 ID:YYYYYYYYYYYYYYYYYY URL: https ://console.aws.amazon.com/cloudformation/home?region=us-east-1#/stacks/xxxxxxxxxxx

我已经解释了我在 Amplify Cli 的 Github 问题上的整个过程,你可以在这里看到,不幸的是,我没有得到 Amplify 团队的太多支持,正如你在那里看到的那样。

我还创建了一个 StackOverflow 问题,其中包含我遇到的最初问题,您可以在此处查看

在深入研究这个问题 3-4 天之后,由于这个问题阻碍了我的部署,我猜测发生了什么:

  • 几个月前,我已将身份验证添加到我的放大项目中
  • 最后,我注意到其中一个创建的客户端没有被使用,所以我使用 Cognito 控制台删除了它。
  • 我几个月来没有更新身份验证
  • 现在我已经介绍了社交身份验证 Amplify 尝试更新它,并且由于客户端 ID 不再存在,它不能并引发上述错误。

现在,我尝试更新它的任何东西都失败了,我猜原因是 Amplify 所期望的和实际的基础设施之间不同步。

每次我pull --restore在我的环境中,我都会amplify-meta.json使用这个无效的客户端 ID 进行更新(是的,我已经尝试在本地更改它amplify-meta.json并推送它),例如:

我的 Cognito 上有一个不同的有效 ClientId,所以我最后的办法是,我尝试直接访问此代码上指向的 S3TemplateURL 并将其更新为有效的,我的猜测是这个文件是单点放大的真相。但没有成功,拉恢复后仍然得到相同的错误ID。

知道如何让 Amplify 再次同步吗?让它意识到这个 ClientId 不再存在并且只是在 CloudFormation/Templates 上摆脱它?

0 投票
1 回答
132 浏览

reactjs - npm run deploy 对于反应应用程序无法正常工作

我正在运行 npm run deploy 命令,但它在 2 行后停止,没有任何错误,并且文件没有得到更新。我在 s3 上托管了网站。快照显示了 2 行。它以前工作正常。突然发生了什么事。在此先感谢您的帮助。在此处输入图像描述

0 投票
1 回答
692 浏览

amazon-web-services - 模拟和测试由 Amplify @model 创建的 DynamoDB 表

我使用@model 注释创建了一个表和一个函数,该函数将该表中的一个条目作为 PostAuthentication 触发器添加到用户池。当我将它推送到 AWS 时它工作正常。但在本地测试时面临一些问题。

MockData 在 amplify/mock-data/dynamodb/fake_us-fake-1.db

在函数/function_name/index.js

local_url 与运行放大模拟 api的 url 相同。将 dynamodb 的端口更改为 62224。

放大模拟函数function_name

它抛出错误:NetworkingError:连接 ECONNREFUSED 错误。

检查此答案以供参考: https ://stackoverflow.com/a/58925502/4578915

0 投票
1 回答
626 浏览

amazon-web-services - Amplify (AWS) 验证电子邮件给出 400 错误请求错误

我对 Amplify 很陌生,在过去一个半月左右的时间里,我一直在通过 amplify-cli 和 aws 控制台使用它,并且在此过程中学到了很多东西。但是最近我遇到了一个其他人似乎没有的问题(我可以通过在互联网上搜索找到)。

我已经设置了我的React项目,它使用了来自 aws 的 3 项主要服务:

  • Cognito(用于身份验证)(标准和联合登录 [Google、Facebook])
  • Lambda 函数(由 amplify-cli 自动生成以进行电子邮件验证)
  • 也通过 cli 添加了 GraphQL API

这些是我的应用程序中包含的三个主要服务。

出于某种奇怪的原因,在过去的几天里,当我实施注册身份验证时,用户收到了验证电子邮件,然后我点击了验证链接,我现在收到了这个错误:

验证链接被点击的截图

以前从来没有这种情况,并且曾经完美地工作过。从那以后,我多次擦除了所有后端资源,甚至从头开始构建了整个放大项目,但我仍然不断收到该错误。

这是我parameters.json文件的一部分(在放大目录中)

下面是我在 aws 控制台上的 s3 存储桶的屏幕截图:

s3 存储桶列表

我已经尝试了很多事情,但是对于我的生活,我无法理解为什么这个错误仍然会出现,即使我已经擦除了所有内容并从头开始。

PS 我的应用程序托管在其中,Ireland eu-west-1因此我使用的所有服务都托管在那里,除了 s3 存储桶,它显然是全球性的,而不是本地化到单个区域。

0 投票
1 回答
1276 浏览

amazon-web-services - 从 Lambda 中访问 c​​ognito 用户属性

我在我的架构中使用 Cognito、API Gateway 和 Lambda 函数。

在客户端上,我使用 AWS Amplify.API 发出请求,并且该请求在到达 API 网关后由 Cognito 授权。如果请求被授权,它会被传递给 Lambda 函数,我需要在其中访问发出请求的登录用户,以便能够运行我的业务逻辑。

在 Lambda 函数的上下文中,我可以访问一些环境变量,我CognitoUserPoolId就是其中之一。

我还可以访问通过 API 传递的任何请求,位于event.

有了所有这些信息,我如何访问发出请求的用户的用户属性?

我一直在研究: Boto3 CognitoIdentityProvider.get_user()Boto3 CognitoIdentityProvider.admin_get_user(),但是在 Lambda 函数的上下文中两者都需要AccessTokenoruserId并且两者都不可用。我想到的唯一方法是在请求的有效负载中传递一些额外的信息,但这似乎并不是真正检索用户属性的最佳方法。

编辑

我没有在 API 上使用自定义授权方。在使用 Amplify 设置 API 时,我选择了受保护的路径,并且所有请求都针对 Cognito 用户池进行了身份验证/授权。之后amplify push我可以看到部署的 APIAWS_IAMAuth所有资源的方法请求下。

Amplify.API.get发出请求时包括授权标头,更具体地说:

API 资源通过 Lambda 代理集成集成到 Lambda 函数。我可以看到正在调用 Lambda 函数,因此请求已被授权。但是,我event在 Lambda 中所拥有的只是我在上面第一个剪辑中粘贴的内容。

鉴于这是一个代理集成,我希望 API 上下文中的所有内容都应该转发到 API 后面的 Lambda。但是,我看不到如何使用我在 Lambda 中提供的任何信息来访问 user_attributes。任何指针?

编辑 2

我现在正在研究使用自定义标头从客户端传递与用户相关的数据,可能类似于:

然后在我的 Lambda 函数中使用以下内容来获取用户属性:

以上返回:

这个解决方案有什么明显的我遗漏的吗?我是否通过sub在客户标头中传递任何安全风险?

很感谢任何形式的帮助。

0 投票
2 回答
1113 浏览

aws-amplify - snsdev-dev 已存在于堆栈中

问题: 创建的新放大项目引发此错误:

错误: 资源名称:SNSRole (AWS::IAM::Role) 事件类型:创建原因:snsdev-dev 已存在于堆栈 arn:aws:cloudformation:eu-west-1 中:

✖ 资源推送到云端时出错

Resource is not in the state stackUpdateComplete 推送操作时出错:Resource is not in the state stackUpdateComplete

放大项目创建如下:

然后上述错误出现在第一次推送中。