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

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

订阅工作流程教程第 1 部分:将 Amazon SWF 与 适用于 Ruby 的 Amazon SDK

包括 适用于 Ruby 的 Amazon SDK

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

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

require 'aws-sdk-v1'

这使我们能够访问 Amazon 命名空间,从而能够设置与会话相关的全局值,例如您的 Amazon 证书和区域,还可以访问该 Amazon 服务。 APIs

配置会 Amazon 话

我们将通过设置 Amazon 证书(访问 Amazon 服务所需的凭证)和要使用的 Amazon 区域来配置会 Amazon 话。

Ruby 的 Amazon SDK 中设置 Amazon 凭据的方法有很多:在环境变量(AWS_ACCESS_KEY_ID 和 _ACC AWS_SECRET ESS_KEY)中设置凭证,或者使用进行设置。AWS.config我们将使用后一种方法,从一个名为 aws-config.txt 的 YAML 配置文件中加载这些证书,该文件内容类似于此。

--- :access_key_id: REPLACE_WITH_ACCESS_KEY_ID :secret_access_key: REPLACE_WITH_SECRET_ACCESS_KEY

立即创建此文件,将以 REPLAC E_WITH_ 开头的字符串替换为您的 Amazon 访问密钥 ID 和私有访问密钥。有关您的 Amazon 访问密钥的信息,请参阅如何获取安全证书?Amazon Web Services 一般参考中。

我们还需要设置要使用的 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 账户中都必须具有唯一的名称,并且工作流程不能跨域交互:您的应用程序的所有工作流程和活动都必须在同一个域中才能相互交互。

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

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

要在适用于 Ruby 的 SDK 中使用 Amazon SWF 域名,请使用 w AWS::Simpleorkflow.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 部分:实现工作流程中创建工作流和启动程序代码。