amazon状态的python对象模型
py-asl的Python项目详细描述
py asl
amazon状态语言的python对象模型
此包提供了用于创建步骤函数的对象模型
示例
简单的hello world示例
importpy_asldefhello_world():state_machine=py_asl.StateMachine(Comment="A simple minimal example of the States language",StartAt="Hello World")state=py_asl.TaskState("Hello World",Resource="arn:aws:lambda:us-east-1:123456789012:function:HelloWorld",End=True)state_machine.States.append(state)hw=state_machine.dumps(indent=2)returnhwprint(hello_world())
创建并行任务的示例
importpy_asldefparallel_states():state1=py_asl.TaskState("Hello World",Resource="arn:aws:lambda:us-east-1:123456789012:function:HelloWorld",End=True)state2=py_asl.TaskState("Goodbye World",Resource="arn:aws:lambda:us-east-1:123456789012:function:GoodbyeWorld",End=True)parallel_state=state_model.ParallelState("Hello Goodbye",Branches=[state1,state2],Next="Foo")ps=parallel_state.dumps(indent=2)returnpsprint(parallel_states())
数组和生成的模板
模板变量,数组的占位符很棘手,所以我实现了 一个可能不适合所有情况的解决方法…让我们这么说吧 您必须部署一个步骤函数,该函数有一个调用ecs/fargate的任务 任务,需要指定vpc配置。在这种情况下你需要 提供包含子网列表和安全组列表的参数。
您的代码可能如下所示:
importpy_aslParameters={"Cluster":"${cluster_arn}","TaskDefinition":"${task_definition_arn}","LaunchType":"FARGATE","NetworkConfiguration":{"AwsvpcConfiguration":{"SecurityGroups":"[${security_groups}]","Subnets":"[${subnets}]"}}}task=py_asl.TaskState("Run Fargate",Resource="arn:aws:states:::ecs:runTask.sync",End=True,Parameters=Parameters)state_machine=py_asl.StateMachine(Comment="Step Function to Test Invoking ECS/Fargate Task",StartAt="Run Fargate",States=[task])if__name__=='__main__':print(state_machine.dumps(indent=2))
注意:安全组的数组将转换为:
{"Comment":"Step Function to Test Invoking ECS/Fargate Task","StartAt":"Run Fargate","States":{"Run Fargate":{"Resource":"arn:aws:states:::ecs:runTask.sync","End":true,"Parameters":{"Cluster":"${cluster_arn}","TaskDefinition":"${task_definition_arn}","LaunchType":"FARGATE","NetworkConfiguration":{"AwsvpcConfiguration":{"SecurityGroups":${security_groups},"Subnets":${subnets}}}},"Type":"Task"}}}
预计你的地形代码提供和数组。例如,
variable "security_groups" {
type = "list"
default = ["ab-12345", "bc-56788"]
}
variable "subnets" {
type = "list"
default = ["itsy", "bitsy"]
}
替换模板中的值时,可以使用:
data "template_file" "step_function" {
template = "${file("${path.module}/step-function.json.tpl")}"
vars = {
...
security_groups = "${jsonencode(var.cluster_security_groups)}"
subnets = "${jsonencode(var.cluster_subnets)}"
}
}