我应该如何通过cloudformation部署我的aws状态机?

时间:2017-03-22 06:51:46

标签: amazon-web-services amazon-cloudformation aws-step-functions

我正在使用cloudformation来更新我的aws堆栈。我有几台状态机。我也使用cloudformation更新它们并获取它们的ARN并将它们作为环境变量再次放入我的云形成堆栈中的lambda函数中。

然而问题是:当我更改我的步骤函数并更新我的堆栈时,cloudformation将删除旧的状态机并创建具有随机名称的新状态机。我可以得到ARN并在我的lambda中使用它们,这不是问题,但我的旧状态机将被删除。这意味着任何正在运行的执行都会被下一个状态转换停止。我可能长时间运行状态机执行。看起来我不能在prod环境中这样做。

有什么建议吗?

编辑:

我正在为我的状态机使用AWS Step Functions。这个问题是关于AWS Step Functions和Cloudformation的。如何使用cloudformation运行执行来更新步骤函数。

2 个答案:

答案 0 :(得分:1)

我想我发现了它是如何工作的。

DeleteStateMachine的文档说:

  

删除状态机。这是一个异步操作 - 它将状态机的状态设置为“DELETING”并开始删除过程。每次状态机执行都将在下次进行状态转换时被删除。完成所有执行或删除后,状态机本身将被删除。

这让我觉得在使用cloudformation更新状态机时,它会在每次执行的下一次状态转换后立即删除正在运行的状态机。我想情况并非如此。因为我尝试更换长时间运行的状态机,现在它说:

  

删除。   当任何执行正在进行时,删除操作将无法完成。请考虑通过控制台,API或命令行停止任何长时间运行的执行。

这与文档中有关删除状态机的内容存在冲突。但是我猜Cloudformation不使用文档中提到的相同Delete操作。

最好从AWS专家那里得到关于此问题的澄清。

答案 1 :(得分:0)

我最近关于CloudFormation + Step Functions的课程是始终首先使用boto3或任何其他SDK创建状态机,因为CloudFormation不会告诉您是否缺少任何权限。 boto3调用将立即失败,并显示一条非常清晰的错误消息。而CloudFormation(CFN)只会尝试重试将近一个小时,然后甚至无法正确回滚。我认为状态机更新的CFN实现同样糟糕。我的建议是始终删除一台计算机,然后使用新名称创建一台新计算机。对于CFN资源,这是非常典型的情况,因为在实际情况下,更新实际上并不起作用,因为删除操作是异步的,我怀疑CFN实现无法解决该问题,并且当需要替换资源时,它只是尝试直接创建一个新资源。用相同的名字消失,显然失败了。没有开放的CFN错误列表,因此所有这些都是推测。我本周初去了AWS Summit,与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: "*"