Amazon Simple Workflow Service
开发人员指南 (API 版本 2012-01-25)
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

订阅工作流程教程第 1 部分:通过 适用于 Ruby 的 AWS 开发工具包 使用 Amazon SWF

加入适用于 Ruby 的 AWS 开发工具包

首先,创建一个名为 utils.rb 的文件。此文件中的代码将包含或创建(如有必要)工作流程和活动代码均使用的 Amazon SWF 域,并将提供一个位置以放置所有类共用的代码。

首先,需要在代码中加入 aws-sdk 库,这样即可使用适用于 Ruby 的开发工具包提供的功能。

require 'aws-sdk'

这样可访问 AWS 命名空间,其中可设置与全局会话相关的值(如 AWS 证书和地区),还可访问 AWS 服务 API。

配置 AWS 会话

我们将通过设置要使用的 AWS 证书(访问 AWS 服务需要这些证书)和 AWS 地区,配置 AWS 会话。

有多种方法可在适用于 Ruby 的 AWS 开发工具包中设置 AWS 证书:在环境变量(AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY)中设置这些证书,或使用 AWS.config 设置这些证书。我们将使用后一种方法,从一个名为 aws-config.txt 的 YAML 配置文件中加载这些证书,该文件如下所示。

--- :access_key_id: REPLACE_WITH_ACCESS_KEY_ID :secret_access_key: REPLACE_WITH_SECRET_ACCESS_KEY

现在创建此文件,将以 REPLACE_WITH_ 开头的字符串替换为您的 AWS 访问密钥 ID 和私有访问密钥。有关 AWS 访问密钥的详细信息,请参阅《Amazon Web Services 常规参考》中的如何获取安全证书?

我们还需要设置要使用的 AWS 地区。由于我们将通过 Amazon SNS 使用手机短信 (SMS) 向用户的手机发送文字消息,因此需要确保使用地区 us-east-1当前仅该地区支持手机短信

注意

如果您无权访问 us-east-1,或不在乎运行演示时是否启用了手机短信,则可随意使用任何地区。可从示例中删除手机短信功能,并使用电子邮件作为单一终端节点以订阅 Amazon SNS 主题。

有关发送手机短信的详细信息,请参阅 Amazon Simple Notification Service 开发人员指南 中的使用 Amazon SNS 发送和接收手机短信通知

我们现在将一些代码添加到 utils.rb 以加载配置文件、获取用户的证书,然后向 AWS.config 同时提供证书和区域。

# Load the user's credentials from a file, if it exists. begin config_file = File.open('aws-config.txt') { |f| f.read } rescue puts "No config file! Hope you set your AWS creds in the environment..." end if config_file.nil? options = { } else options = YAML.load(config_file) end # SMS Messaging (which can be used by Amazon SNS) is available only in the # `us-east-1` region. $SMS_REGION = 'us-east-1' options[:region] = $SMS_REGION # Now, set the options AWS.config(options)

注册 Amazon SWF 域

要使用 Amazon SWF,您需要设置:这是容纳工作流程和活动的命名实体。您可注册多个 Amazon SWF 域,它们必须在您的 AWS 账户中具有唯一名称,并且工作流程不能跨域交互:应用程序的所有工作流程和活动都必须在同一个域中才能彼此交互。

因为将在应用程序中使用同一个域,所以我们在 utils.rb 中创建一个名为 init_domain 的函数,它检索名为 SWFSampleDomain 的 Amazon SWF 域。

注册域后,可将其重用于多个工作流程执行。但是,尝试注册已存在的域是错误行为,因此我们的代码首先将检查是否存在该域,如果可找到这个现有的域,则将使用它。如果无法找到该域,则我们将创建它。

要在适用于 Ruby 的开发工具包中处理 Amazon SWF 域,请使用 AWS::SimpleWorkflow.domains,它返回一个可用于枚举和注册域的 DomainCollection

这是 init_domain 在于 utils.rb 中的代码。

# Registers the domain that the workflow will run in. def init_domain domain_name = 'SWFSampleDomain' domain = nil swf = AWS::SimpleWorkflow.new # First, check to see if the domain already exists and is registered. swf.domains.registered.each do | d | if(d.name == domain_name) domain = d break end end if domain.nil? # Register the domain for one day. domain = swf.domains.create( domain_name, 1, { :description => "#{domain_name} domain" }) end return domain end

后续步骤

utils.rb 完成了。接下来,我们将在第 2 部分:实施工作流程中创建工作流程和启动器代码。