簡體   English   中英

AWS Amplify 構建問題 - StackUpdateComplete

[英]AWS Amplify Build Issue - StackUpdateComplete

在 CLI 中運行amplify push -y時,我的項目出錯並顯示以下消息:

["Index: 0 State: {\"deploy\":\"waitingForDeployment\"} Message: Resource is not in the state stackUpdateComplete"]

我該如何解決這個錯誤?

“資源不在 state stackUpdateComplete 中”是來自與 Amplify App ID 關聯的根 CloudFormation 堆棧的消息。 Amplify CLI 只是顯示來自更新堆棧操作的錯誤消息。 這表明 Amplify 的 CloudFormation 堆棧可能仍在進行中或卡住了。

解決方案 1 – “deployment-state.json”:

要解決此問題,請將 go 發送到包含項目設置的 S3 存儲桶,並刪除根文件夾中的“deployment-state.json”文件,因為該文件保存應用部署狀態。 存儲桶應以“部署”一詞結尾或包含“部署”一詞。

解決方案 2 – “未找到請求的資源”:

檢查 CloudFormation 堆棧的狀態,看看您是否注意到堆棧因“未找到請求的資源”錯誤而失敗,表明 DynamoDB 表“tableID”丟失,並確認您已將其刪除(可能是意外刪除)。 手動創建上面的 DynamoDB 表並再次嘗試推送。

解決方案 3A - “帶有‘apiKey’的@auth 指令:

如果您收到一條錯誤消息,指出“找到帶有‘apiKey’提供商的@auth 指令,但該項目沒有配置 API 密鑰身份驗證提供商”。 當您在 GraphQL 模式中定義公共授權而不指定提供者時,會出現此錯誤。 公共授權指定每個人都將被允許訪問 API,在幕后 API 將受到 API 密鑰的保護。 為了能夠使用公共 API,您必須配置 API 密鑰。

@auth 指令允許覆蓋給定授權模式的默認提供程序。 要解決此問題,請將“IAM”指定為提供程序,它允許使用 Cognito 身份池中的“未經身份驗證的角色”而不是 API 密鑰進行公共訪問。

下面是公共授權規則的示例代碼:

type Todo @model @auth(rules: [{ allow: public, provider: iam, operations: [create, read, update, delete] }]) {
  id: ID!
  name: String!
  description: String
}

進行上述更改后,您可以運行“amplify update api”並添加 IAM 身份驗證提供程序,CLI 會自動為“UnAuthenticated”角色生成范圍縮小的 IAM 策略。

解決方案 3B - 參數:[AuthCognitoUserPoolId] 必須具有以下值:

此處可能會出現另一個問題,默認授權類型為 API 密鑰,當您運行命令“amplify add api”時未指定 API 類型。 要解決此問題,請按照下列步驟操作:

  1. 刪了 API
  2. 通過將“Amazon Cognito 用戶池”指定為授權模式來重新創建一個新的
  3. 添加 IAM 作為附加授權類型
  4. 在新創建的 API Schema 中重新啟用 @auth 指令
  5. 運行“放大推送”

文檔:

  1. 公共授權
  2. 排查我的 AWS Amplify 項目中的 CloudFormation 堆棧問題

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM