订阅工作流教程第 1 部分:将 Amazon SWF 与Amazon SDK for Ruby 配合使用 - Amazon Simple Workflow Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

订阅工作流教程第 1 部分:将 Amazon SWF 与Amazon SDK for Ruby 配合使用

加入Amazon SDK for Ruby

首先,创建一个名为 utils.rb 的文件。该文件中的代码将获取或创建(如有必要)工作流和活动代码所使用的 Amazon SWF 域,并提供一个位置来放置所有类通用的代码。

首先,我们需要在代码中包含 aws-sdk-v1 库,以便使用适用于 Ruby的 SDK 提供的功能。

require 'aws-sdk-v1'

这样一来,我们就可以访问 Amazon 命名空间,它让我们可以设置与全局会话相关的值(如 Amazon 凭证和区域)的功能,还可以访问 Amazon 服务 API。

配置 Amazon 会话

我们可以通过设置要使用的 Amazon 凭证(访问 Amazon 服务时需要这些凭证)和 Amazon 区域来配置 Amazon 会话。

在适用于 Ruby 的 Amazon SDK 中设置 Amazon 凭证有多种方法:在环境变量(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

现在,我们将创建该文件,用 Amazon 访问密钥 ID 和秘密访问密钥替换以 REPLACE_WITH_ 开头的字符串。有关 Amazon 访问密钥的信息,请参阅《Amazon Web Services General Reference》中的 How Do I Get Security Credentials?

我们还需要设置要使用的 Amazon 区域。由于我们将使用 Amazon SNS 的短信服务 (SMS) 向用户手机发送文本消息,因此需要确保我们使用的是 Amazon SNS 支持的区域。请参阅《Amazon Simple Notification Service Developer Guide》中的 Supported Regions and Countries

注意

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

有关发送 SMS 消息的更多信息,请参阅《Amazon Simple Notification Service Developer Guide》中的 Sending and Receiving SMS Notifications Using Amazon SNS

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

require 'yaml' # 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 Amazon credentials 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 域,但它们必须在您的 Amazon 账户中具有有唯一名称,而且工作流不能跨域交互:应用程序的所有工作流和活动必须在同一个域中才能彼此交互。

由于将在整个应用程序中使用同一个域,我们需要在 utils.rb 中创建一个名为 init_domain 的函数,用于检索名为 SWFSampleDomain 的 Amazon SWF 域。

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

要在适用于 Ruby 的 SDK 中使用 Amazon SWF 域,请使用 AWS::SimpleWorkflow.domains,它会返回一个可用于枚举和注册域的 DomainCollection

以下是 init_domainutils.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

后续步骤

接下来,您将在订阅工作流程教程第 2 部分:实现工作流程中创建工作流和启动程序代码。