GS2-Deploy/CDK Reference of GS2-StateMachine

Entities

Namespace

Namespace

Namespace is a mechanism that allows multiple uses of the same service for different purposes within a single project. Basically, GS2 services have a layer called namespace, and different namespaces are treated as completely different data spaces, even for the same service.

Therefore, it is necessary to create a namespace before starting to use each service.

TypeRequireDefaultLimitationDescription
namestring~ 32 charsNamespace name
descriptionstring~ 1024 charsdescription of Namespace
startScriptScriptSettingScript to execute when starting the state machine
passScriptScriptSettingScript to execute when the state machine is successfully completed
errorScriptScriptSettingScript to execute when the state machine fails
lowestStateMachineVersionlongLowest version of the state machine
logSettingLogSettingLog output settings

GetAttr

TypeDescription
ItemNamespaceNamespace created

Implementation Example

Type: GS2::StateMachine::Namespace
Properties:
  Name: namespace1
  Description: null
  StartScript: null
  PassScript: null
  ErrorScript: null
  LowestStateMachineVersion: null
  LogSetting: 
    LoggingNamespaceId: grn:gs2:ap-northeast-1:YourOwnerId:log:namespace1
from gs2_cdk import Stack, core, state_machine

class SampleStack(Stack):

    def __init__(self):
        super().__init__()
        state_machine.Namespace(
            stack=self,
            name="namespace-0001",
            options=state_machine.NamespaceOptions(
                log_setting=core.LogSetting(
                    logging_namespace_id='grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001',
                ),
            ),
        )

print(SampleStack().yaml())  # Generate Template
class SampleStack extends \Gs2Cdk\Core\Model\Stack
{
    function __construct() {
        parent::__construct();
        new \Gs2Cdk\StateMachine\Model\Namespace_(
            stack: $this,
            name: "namespace-0001",
            options: new \Gs2Cdk\StateMachine\Model\Options\NamespaceOptions(
                logSetting: new \Gs2Cdk\Core\Model\LogSetting(
                    loggingNamespaceId: "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001",
                ),
            ),
        );
    }
}

print((new SampleStack())->yaml());  // Generate Template
class SampleStack extends io.gs2.cdk.core.model.Stack
{
    public SampleStack() {
        super();
        new io.gs2.cdk.stateMachine.model.Namespace(
            this,
            "namespace-0001",
            new io.gs2.cdk.stateMachine.model.options.NamespaceOptions() {
                {
                    logSetting = new io.gs2.cdk.core.model.LogSetting(
                        "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                    );
                }
            }
        );
    }
}

System.out.println(new SampleStack().yaml());  // Generate Template
import core from "@/gs2cdk/core";
import stateMachine from "@/gs2cdk/stateMachine";

class SampleStack extends core.Stack
{
    public constructor() {
        super();
        new stateMachine.model.Namespace(
            this,
            "namespace-0001",
            {
                logSetting: new core.LogSetting(
                    "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                )
            }
        );
    }
}

console.log(new SampleStack().yaml());  // Generate Template
public class SampleStack : Gs2Cdk.Core.Model.Stack
{
    public SampleStack() {
        new Gs2Cdk.Gs2StateMachine.Model.Namespace(
            this,
            "namespace-0001",
            new Gs2Cdk.Gs2StateMachine.Model.Options.NamespaceOptions {
                logSetting = new Gs2Cdk.Core.Model.LogSetting(
                    "grn:gs2:ap-northeast-1:YourOwnerId:log:namespace-0001"
                ),
            }
        );
    }
}

Debug.Log(new SampleStack().Yaml());  // Generate Template

StateMachineMaster

State machine definition

manages state machines written in GSL.

TypeRequireDefaultLimitationDescription
namespaceNamestring~ 32 charsNamespace name
mainStateMachineNamestring~ 128 charsMain state machine name
payloadstring~ 5242880 charsState machine definition

GetAttr

TypeDescription
ItemStateMachineMasterCreated State Machine Master

Implementation Example

Type: GS2::StateMachine::StateMachineMaster
Properties:
  NamespaceName: namespace1
  MainStateMachineName: MainStateMachine
  Payload: \nStateMachine MainStateMachine {\n  EntryPoint Task1;\n\n  Task Task1(int initCounter) {\n    Event Pass();\n    Event Error(string Reason);\n\n    Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\n  }\n\n  PassTask Pass;\n\n  ErrorTask Error(string reason);\n\n  Transition Task1 handling Pass -> Pass;\n  Transition Task1 handling Error -> Error;\n}\n    
from gs2_cdk import Stack, core, state_machine

class SampleStack(Stack):

    def __init__(self):
        super().__init__()
        state_machine.StateMachineMaster(
            stack=self,
            namespace_name="namespace-0001",
            main_state_machine_name='MainStateMachine',
            payload='\nStateMachine MainStateMachine {\n  EntryPoint Task1;\n\n  Task Task1(int initCounter) {\n    Event Pass();\n    Event Error(string Reason);\n\n    Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\n  }\n\n  PassTask Pass;\n\n  ErrorTask Error(string reason);\n\n  Transition Task1 handling Pass -> Pass;\n  Transition Task1 handling Error -> Error;\n}\n    ',
        )

print(SampleStack().yaml())  # Generate Template
class SampleStack extends \Gs2Cdk\Core\Model\Stack
{
    function __construct() {
        parent::__construct();
        new \Gs2Cdk\StateMachine\Model\StateMachineMaster(
            stack: $this,
            namespaceName: "namespace-0001",
            mainStateMachineName: "MainStateMachine",
            payload: "\nStateMachine MainStateMachine {\n  EntryPoint Task1;\n\n  Task Task1(int initCounter) {\n    Event Pass();\n    Event Error(string Reason);\n\n    Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\n  }\n\n  PassTask Pass;\n\n  ErrorTask Error(string reason);\n\n  Transition Task1 handling Pass -> Pass;\n  Transition Task1 handling Error -> Error;\n}\n    ",
        );
    }
}

print((new SampleStack())->yaml());  // Generate Template
class SampleStack extends io.gs2.cdk.core.model.Stack
{
    public SampleStack() {
        super();
        new io.gs2.cdk.stateMachine.model.StateMachineMaster(
            this,
            "namespace-0001",
            "MainStateMachine",
            "\nStateMachine MainStateMachine {\n  EntryPoint Task1;\n\n  Task Task1(int initCounter) {\n    Event Pass();\n    Event Error(string Reason);\n\n    Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\n  }\n\n  PassTask Pass;\n\n  ErrorTask Error(string reason);\n\n  Transition Task1 handling Pass -> Pass;\n  Transition Task1 handling Error -> Error;\n}\n    "
        );
    }
}

System.out.println(new SampleStack().yaml());  // Generate Template
import core from "@/gs2cdk/core";
import stateMachine from "@/gs2cdk/stateMachine";

class SampleStack extends core.Stack
{
    public constructor() {
        super();
        new stateMachine.model.StateMachineMaster(
            this,
            "namespace-0001",
            "MainStateMachine",
            "\nStateMachine MainStateMachine {\n  EntryPoint Task1;\n\n  Task Task1(int initCounter) {\n    Event Pass();\n    Event Error(string Reason);\n\n    Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\n  }\n\n  PassTask Pass;\n\n  ErrorTask Error(string reason);\n\n  Transition Task1 handling Pass -> Pass;\n  Transition Task1 handling Error -> Error;\n}\n    "
        );
    }
}

console.log(new SampleStack().yaml());  // Generate Template
public class SampleStack : Gs2Cdk.Core.Model.Stack
{
    public SampleStack() {
        new Gs2Cdk.Gs2StateMachine.Model.StateMachineMaster(
            this,
            "namespace-0001",
            "MainStateMachine",
            "\nStateMachine MainStateMachine {\n  EntryPoint Task1;\n\n  Task Task1(int initCounter) {\n    Event Pass();\n    Event Error(string Reason);\n\n    Script grn:gs2:ap-northeast-1:YourOwnerId:script:state-machine-0001:script:Task1\n  }\n\n  PassTask Pass;\n\n  ErrorTask Error(string reason);\n\n  Transition Task1 handling Pass -> Pass;\n  Transition Task1 handling Error -> Error;\n}\n    "
        );
    }
}

Debug.Log(new SampleStack().Yaml());  // Generate Template

StackEntry

TypeRequireDefaultLimitationDescription
stateMachineNamestring~ 128 charsName of the state machine
taskNamestring~ 128 charsTask name

Variable

TypeRequireDefaultLimitationDescription
stateMachineNamestring~ 128 charsName of the state machine
valuestring~ 1048576 charsValue

LogSetting

TypeRequireDefaultLimitationDescription
loggingNamespaceIdstring~ 1024 charsNamespace GRN

ScriptSetting

TypeRequireDefaultLimitationDescription
triggerScriptIdstring~ 1024 charsScript GRN
doneTriggerTargetTypeenum [’none’, ‘gs2_script’, ‘aws’]“none”~ 128 charsNotification of Completion
doneTriggerScriptIdstring{doneTriggerTargetType} == “gs2_script”~ 1024 charsScript GRN
doneTriggerQueueNamespaceIdstring{doneTriggerTargetType} == “gs2_script”~ 1024 charsNamespace GRN

GS2 States Language Definition Extension

extension syntax for defining GS2 States Language in CDK