订阅工作流程教程第 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:
-
要检查以了解是否已注册了域,可查看 AWS::Simpleworkflow.domains.registered 提供的列表。
-
要注册新域,请使用 AWS::Simpleworkflow.domains.register。
这是 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 部分:实施工作流程中创建工作流程和启动器代码。