簡體   English   中英

"我應該如何通過 cloudformation 部署我的 aws 狀態機?"

[英]How should I deploy my aws state machines through cloudformation?

我正在使用 cloudformation 來更新我的 aws 堆棧。 我有幾個狀態機。 我也用 cloudformation 更新它們並獲取它們的 ARN,並將它們作為環境變量再次放入我的雲形成堆棧中的 lambda 函數。

然而問題是這樣的:當我更改我的步進函數並更新我的堆棧時,cloudformation 將刪除舊狀態機並創建具有隨機名稱的新狀態機。 我可以獲得 ARN 並在我的 lambda 中使用它們,這不是問題,但我的舊狀態機將被刪除。 這意味着任何正在運行的執行都將在下一個狀態轉換時停止。 我可能有長時間運行的狀態機執行。 看起來我無法在 prod 環境中執行此操作。

有什么建議?

編輯:

我正在為我的狀態機使用 AWS Step Functions。 這個問題是關於 AWS Step Functions 和 Cloudformation 的。 如何通過 cloudformation 運行執行來更新階躍函數。

我想我發現了這是如何工作的。

DeleteStateMachine 的文檔說:

刪除狀態機。 這是一個異步操作——它將狀態機的狀態設置為“DELETING”並開始刪除過程。 每個狀態機執行將在下一次進行狀態轉換時<\/strong>被刪除。 在所有執行完成或被刪除后,狀態機本身將被刪除。

這讓我想到,當使用 cloudformation 更新狀態機時,它會在每次執行的下一次狀態轉換后立即刪除正在運行的狀態機。 我想情況並非如此。 因為我嘗試更換一個長時間運行的狀態機,現在它說:

刪除。 當任何執行正在進行時,刪除操作將不會完成。 考慮通過控制台、API 或命令行停止任何長時間運行的執行。

這種與文檔中關於刪除狀態機的說法有沖突。 但是我猜 Cloudformation 不使用文檔中提到的相同刪除操作。

最好讓 AWS 專家就此問題進行澄清。

我最近使用 CloudFormation + Step Functions 的課程是始終首先使用 boto3 或任何其他 SDK 創建狀態機,因為 CloudFormation 不會告訴您是否缺少任何權限。 boto3 調用將立即失敗,並顯示非常清晰的錯誤消息。 而 CloudFormation (CFN) 只會嘗試並重試近一個小時,然后甚至無法正確回滾。 我認為狀態機更新的 CFN 實現同樣糟糕。 我的建議是始終刪除一台機器,然后用新名稱創建一台新機器。 這對於 CFN 資源來說是非常典型的,因為刪除是異步的,所以更新在實際場景中並不真正起作用,我懷疑 CFN 實現沒有考慮到這一點,當需要替換資源時,它只是嘗試直接創建一個新的離開同名,顯然失敗了。 沒有開放的 CFN 錯誤列表,所以這一切都是猜測。 本周早些時候我參加了 AWS 峰會,與一位 AWS 架構師(AWS 員工)交談,他只是臉紅了。

這是我的狀態機創建沒有失敗的 IAM 角色:

StateMachineRole:
    Type: AWS::IAM::Role
    Properties:
        AssumeRolePolicyDocument:
        Version: 2012-10-17
        Statement:
            - Effect: Allow
            Principal:
                Service:
                - !Sub "states.${AWS::Region}.amazonaws.com"
            Action: sts:AssumeRole
        ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaRole
        - arn:aws:iam::aws:policy/AWSStepFunctionsFullAccess
        Policies:
        - PolicyName: StateMachineAccessPolicy
            PolicyDocument:
            Statement:
                - Effect: Allow
                Action:
                    - events:*
                Resource: "*"

這個問題和接受的答案是在UpdateStateMachine<\/a> API 發布之前編寫的,它允許您更新現有的狀態機。

您可以編輯AWS::StepFunctions::StateMachine<\/code>的屬性,除了<\/em>StateMachineName<\/code>和StateMachineType<\/code> ,CloudFormation 將不間斷地更新現有資源(刪除狀態機並重新創建它)。

https:\/\/docs.aws.amazon.com\/AWSCloudFormation\/latest\/UserGuide\/aws-resource-stepfunctions-statemachine.html<\/a>

暫無
暫無

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

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