从 AWS 控制台看来,AWS Step 函数是不可变的。有没有办法修改它?如果不是,版本控制如何工作?每次我必须对状态机进行增量更改时,我是否必须创建一个新的状态机?
问问题
581 次
3 回答
1
根据这个论坛条目,目前还没有办法修改现有的状态机。您需要每次都创建一个新的。
于 2017-03-31T17:56:39.257 回答
0
这些天来,我一直在使用 CloudFormation w/ boto3
。打算把它写在这里,因为过去我对 CloudFormation 有点害怕,但是通过一个端到端的例子,它可能更平易近人。
step_function_stack.yaml
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: >-
A description of the State Machine goes here.
Resources:
MyStateMachineName:
Type: AWS::StepFunctions::StateMachine
Properties:
RoleArn: "arn:aws:iam::{{aws_account_id}}:role/service-role/StepFunctions-MyStepFunctionRole"
StateMachineName: "MyStateMachineName"
StateMachineType: "EXPRESS"
DefinitionString:
Fn::Sub: |
{{full_json_definition}}
manage_step_functions.py
import boto3
import os
import time
from jinja2 import Environment
def do_render(full_json_definition):
with open('step_function_stack.yaml') as fd:
template = fd.read()
yaml = Environment().from_string(template).render(
full_json_definition=full_json_definition,
aws_account_id=os.getenv('AWS_ACCOUNT_ID'))
return yaml
def update_step_function(stack_name, full_json_definition,):
yaml = do_render(full_json_definition)
client = boto3.client('cloudformation')
response = client.update_stack(
StackName=stack_name,
TemplateBody=yaml,
Capabilities=[
'CAPABILITY_AUTO_EXPAND',
])
return response
def create_step_function(stack_name, full_json_definition,):
yaml = do_render(full_json_definition)
client = boto3.client('cloudformation')
response = client.update_stack(
StackName=stack_name,
TemplateBody=yaml,
Capabilities=[
'CAPABILITY_AUTO_EXPAND',
])
return response
def get_lambdas_stack_latest_events(stack_name):
# Get the first 100 most recent events.
client = boto3.client('cloudformation')
return client.describe_stack_events(
StackName=stack_name)
def wait_on_update(stack_name):
events = None
while events is None or events['StackEvents'][0]['ResourceStatus'] not in ['UPDATE_COMPLETE',
'UPDATE_ROLLBACK_COMPLETE', 'DELETE_COMPLETE', 'CREATE_COMPLETE']:
print(events['StackEvents'][0]['ResourceStatus'] if events else ...)
events = get_lambdas_stack_latest_events(stack_name)
time.sleep(1)
return events
step_function_definition.json
{
"Comment": "This is a Hello World State Machine from https://docs.aws.amazon.com/step-functions/latest/dg/getting-started.html#create-state-machine",
"StartAt": "Hello",
"States": {
"Hello": {
"Type": "Pass",
"Result": "Hello",
"Next": "World"
},
"World": {
"Type": "Pass",
"Result": "World",
"End": true
}
}
}
创建阶跃函数
# From a python shell for example
# First just set any privileged variables through environmental variables so they are not checked into code
# export AWS_ACCOUNT_ID=999999999
# edit step_function_definition.json then read it
with open('step_function_definition.json') as fd:
step_function_definition = fd.read()
import manage_step_functions as msf
stack_name = 'MyGloriousStepFuncStack'
msf.create_step_function(stack_name, step_function_definition)
如果您准备好更新您的状态机,您可以编辑step_function_definition.json
或创建一个新文件以供参考,step_function_definition-2021-01-29.json
. (因为在撰写本文时 Step Functions 没有像 Lambda 这样的版本)。
import manage_step_functions as msf
stack_name = 'MyGloriousStepFuncStack'
with open('step_function_definition-2021-01-29.json') as fd:
step_function_definition = fd.read()
msf.update_step_function(stack_name, step_function_definition)
于 2021-01-29T17:10:33.367 回答
0
目前,您可以编辑状态 mashine。右上角的“编辑状态机”按钮
于 2018-03-01T10:02:36.510 回答