

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Tutorial sobre el flujo de trabajo de suscripciones, parte 1: Uso de Amazon SWF con AWS SDK para Ruby
<a name="swf-sns-tutorial-setup-swf"></a>

**Topics**
+ [Incluya el AWS SDK para Ruby](#include-the-sdk-for-ruby)
+ [Configuración de la sesión AWS](#configuring-the-aws-session)
+ [Registro de un dominio de Amazon SWF](#registering-swf-domain)
+ [Siguientes pasos](#next-steps)

## Incluya el AWS SDK para Ruby
<a name="include-the-sdk-for-ruby"></a>

Para empezar, cree un archivo llamado `utils.rb`. El código de este archivo obtendrá, o creará si es necesario, el dominio de Amazon SWF que utiliza el código tanto de las actividades como del flujo de trabajo. También permitirá almacenar el código común a todas nuestras clases.

En primer lugar, tenemos que incluir la biblioteca `aws-sdk-v1` en el código, a fin de poder utilizar las características que proporciona el SDK para Ruby.

```
require 'aws-sdk-v1'
```

Esto nos da acceso al espacio de AWS nombres, que permite establecer valores globales relacionados con la sesión, como AWS las credenciales y la región, y también proporciona acceso al servicio. AWS APIs

## Configuración de la sesión AWS
<a name="configuring-the-aws-session"></a>

Configuraremos la AWS sesión configurando nuestras AWS credenciales (que son necesarias para acceder a AWS los servicios) y la AWS región que vamos a utilizar.

Hay varias formas de [configurar las AWS credenciales en el AWS SDK para Ruby](https://docs.aws.amazon.com/AWSRubySDK/latest/index.html#Basic_Configuration): configurándolas en variables de entorno (AWS\_ACCESS\_KEY\_ID y AWS\_SECRET \_ACCESS\_KEY) o configurándolas con. [`AWS.config`](https://docs.aws.amazon.com/AWSRubySDK/latest/AWS.html#config-class_method) Utilizaremos el segundo método y las cargaremos a partir de un archivo de configuración YAML, llamado `aws-config.txt`, que tiene este aspecto.

```
---
:access_key_id: REPLACE_WITH_ACCESS_KEY_ID
:secret_access_key: REPLACE_WITH_SECRET_ACCESS_KEY
```

Cree este archivo ahora y sustituya las cadenas que comienzan por *REPLACE\_WITH\_* por el ID de la clave de acceso y la clave de acceso secreta. AWS Para obtener información sobre las claves de AWS acceso, consulte [¿Cómo puedo obtener](https://docs.aws.amazon.com/general/latest/gr/getting-aws-sec-creds.html) credenciales de seguridad? en la *Referencia general de Amazon Web Services*.

También necesitamos configurar la AWS región que vamos a usar. Como utilizaremos el [servicio de mensajes cortos (SMS)](http://en.wikipedia.org/wiki/Short_Message_Service) para enviar mensajes de texto al teléfono del usuario con Amazon SNS, debemos asegurarnos de utilizar una región compatible con Amazon SNS. Consulte [las regiones y los países compatibles](https://docs.aws.amazon.com/sns/latest/dg/sms_supported-countries.html) en la guía para desarrolladores de Amazon Simple Notification Service (Amazon SNS).

**nota**  
Si no tiene acceso a **us-east-1**, o si no le interesa ejecutar la demostración con la mensajería SMS habilitada, puede utilizar cualquier región que desee. Además, puede eliminar la funcionalidad SMS del ejemplo y utilizar el correo electrónico como único punto de conexión para subscribirse al tema de Amazon SNS.  
Para obtener más información sobre el envío de mensajes SMS, consulte [Envío y recepción de notificaciones por SMS mediante Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/SMSMessages.html) en la *Guía para desarrolladores de Amazon Simple Notification Service*.

Ahora vamos a añadir código a `utils.rb` para cargar el archivo de configuración, a obtener las credenciales del usuario y a proporcionar las credenciales y la región a [`AWS.config`](https://docs.aws.amazon.com/AWSRubySDK/latest/AWS.html#config-class_method).

```
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 AWS 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
```

## Registro de un dominio de Amazon SWF
<a name="registering-swf-domain"></a>

Para utilizar Amazon SWF, debemos configurar un *dominio*: una entidad con nombre que contendrá los flujos de trabajo y las actividades. Puede tener registrados muchos dominios de Amazon SWF, pero todos deben tener nombres únicos en su AWS cuenta y los flujos de trabajo no pueden interactuar entre dominios: todos los flujos de trabajo y actividades de su aplicación deben estar en el mismo dominio para poder interactuar entre sí.

*Como utilizaremos el mismo dominio en toda la aplicación, crearemos una función en `utils.rb` called `init_domain` que recuperará el dominio Amazon SWF denominado SWFSample Domain.*

Una vez que haya registrado un dominio, puede reutilizarlo en numerosas ejecuciones de flujos de trabajo. Sin embargo, *es un error intentar registrar un dominio que ya existe*, por eso el código comprobará en primer lugar si el dominio existe y utilizará el dominio existente, si lo encuentra. Si no encuentra el dominio, lo crearemos.

Para trabajar con los dominios de Amazon SWF en el SDK para Ruby, utilice [AWS::SimpleWorkflow.domains](https://docs.aws.amazon.com/AWSRubySDK/latest/AWS/SimpleWorkflow.html#domains-instance_method), que devuelve un [DomainCollection](https://docs.aws.amazon.com/AWSRubySDK/latest/AWS/SimpleWorkflow/DomainCollection.html)que se puede utilizar tanto para enumerar como para registrar dominios:
+ [Para comprobar si un dominio ya está registrado, consulte la lista proporcionada por .domains.registered. AWS::Simpleworkflow](https://docs.aws.amazon.com/AWSRubySDK/latest/AWS/SimpleWorkflow/DomainCollection.html#registered-instance_method)
+ [Para registrar un dominio nuevo, usa .domains.register. AWS::Simpleworkflow](https://docs.aws.amazon.com/AWSRubySDK/latest/AWS/SimpleWorkflow/DomainCollection.html#register-instance_method)

Este es el código para `init_domain` en `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
```

## Siguientes pasos
<a name="next-steps"></a>

A continuación, creará el código de iniciador y flujo de trabajo en [Segunda parte del tutorial acerca del flujo de trabajo de suscripción: implementación del flujo de trabajo](swf-sns-tutorial-implementing-workflow.md).