是否可以创建一个可以手动运行的 AWS 数据管道,当我触发它时,我希望传递参数来执行。
3 回答
当您说“手动运行管道”时,您到底是什么意思?
您可以通过调用activate-pipeline命令从命令行激活(“触发”)管道。此命令需要管道 ID,并且可以选择接受参数值包作为管道配置。要获取有关此命令的更多详细信息,请运行
aws datapipeline 激活管道帮助
例如
aws datapipeline activate-pipeline --pipeline-id df-ABCDEF1234 --parameter-values myStringValue="Hello world" myArrayValue=value1 myArrayValue=value2
或者
aws datapipeline activate-pipeline --pipeline-id df-ABCDEF1234 --parameter-values-uri s3://myBucket/withParameters/forPipeline.json
不,Data Pipeline 目前不支持它。我相信您正在寻找的是事件驱动的调度,可以为特定的运行实例提供参数。
我建议您探索以下选项:
- 使用Lambda - 支持基于 S3 的触发器执行任意代码。然后使用 S3 为运行实例提供任何内容或输入(充当参数)。
- 使用AWS SWF 和 SQS构建您自己的
有一些技巧可以使其与 Data Pipeline 一起使用,但我建议不要使用这些技巧,而是等待 Data Pipeline 支持此功能。
黑客#1:
您可以让您的管道按计划运行。您的管道将包含三个组件:
- ShellCommandActivity(使用来自 S3 的暂存文件运行 shell 脚本。数据管道将文件从 S3 暂存到您的资源)
- S3 前提条件
- (可选)运行 ShellCommandActivity 的资源
现在在您的 shell 脚本中检查 S3 文件。如果 S3 中没有任何/空文件,您可以有逻辑让此执行成为无操作,或者读取 S3 文件并将它们作为参数传递给您的程序。
黑客#2:
您可以将 S3 前置条件(指向位置说:s3://my-bucket/marker-file-#{scheduledStartTime})添加到管道中的活动中,作为您的触发机制。每当您想进行特定的间隔运行时,您可以将相应的文件(例如 s3://my-bucket/marker-file-2015-10-01:00:00:00)放入 S3。
这个hack太糟糕了,我不想解释更多。
对的,这是可能的。自从您发布问题以来,AWS 已经创建了一个新的 " scheduleType
", ondemand
,它允许您在调用“激活管道”时运行管道。这是一个通过 AWS Lambda 调用管道的示例。