

# Venda sus API de API Gateway a través de AWS Marketplace
<a name="sell-api-as-saas-on-aws-marketplace"></a>

Después de crear, probar e implementar las API, puede empaquetarlas en un [plan de uso](api-gateway-api-usage-plans.md) de API Gateway y venderlo como producto de software como servicio (SaaS) a través de AWS Marketplace. AWS Marketplace factura a los compradores de la API que se han suscrito a su oferta de producto en función del número de solicitudes realizadas en el plan de uso.

Para vender sus API en AWS Marketplace, debe configurar el canal de ventas para integrar AWS Marketplace en API Gateway. En términos generales, esto implica publicar el producto en AWS Marketplace, configurar un rol de IAM con las políticas adecuadas para permitir a API Gateway enviar métricas de uso a AWS Marketplace, asociar un producto de AWS Marketplace con un plan de uso de API Gateway y asociar un comprador de AWS Marketplace con una clave de API de API Gateway. En las próximas secciones se ofrece información adicional.

Para obtener más información sobre la venta de la API como un producto SaaS en AWS Marketplace, consulte la [Guía del usuario de AWS Marketplace](https://docs.aws.amazon.com/marketplace/latest/userguide/).

**Topics**
+ [Inicializar la integración de AWS Marketplace con API Gateway](#sell-api-as-saas-on-aws-marketplace-initial-setup)
+ [Administrar la suscripción de clientes a planes de uso](#sell-api-as-saas-on-aws-marketplace-subscription-unsubscription)

## Inicializar la integración de AWS Marketplace con API Gateway
<a name="sell-api-as-saas-on-aws-marketplace-initial-setup"></a>

Las siguientes tareas son para inicializar por única vez la integración de AWS Marketplace con API Gateway, lo que le permite vender sus API como un producto de SaaS.

### Publicar un producto en AWS Marketplace
<a name="sell-api-as-saas-on-aws-marketplace-inital-setup-list-product"></a>

Para publicar su plan de uso como un producto SaaS, envíe un formulario de carga de producto través de [AWS Marketplace](https://aws.amazon.com/marketplace/partners/management-tour). El producto debe contener una dimensión con el nombre `apigateway` del tipo `requests`. Esta dimensión define el precio por solicitud y API Gateway la utiliza para medir las solicitudes a sus API.

### Crear el rol de medición
<a name="sell-api-as-saas-on-aws-marketplace-inital-setup-create-metering-role"></a>

Cree un rol de IAM denominado `ApiGatewayMarketplaceMeteringRole` con las siguientes políticas de ejecución y confianza. Este rol permite a API Gateway enviar métricas de uso a AWS Marketplace en su nombre.

#### Política de ejecución del rol de medición
<a name="sell-api-as-saas-on-aws-marketplace-inital-setup-create-metering-role-execution-policy"></a>

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Action": [
        "aws-marketplace:BatchMeterUsage",
        "aws-marketplace:ResolveCustomer"
      ],
      "Resource": "*",
      "Effect": "Allow"
    }
  ]
}
```

------

#### Política de relación de confianza del rol de medición
<a name="sell-api-as-saas-on-aws-marketplace-inital-setup-create-metering-role-trusted-policy"></a>

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "apigateway.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
```

------

### Asociar el plan de uso con el producto de AWS Marketplace
<a name="sell-api-as-saas-on-aws-marketplace-associate-usage-plan-with-saas-product"></a>

Cuando publica un producto en AWS Marketplace, recibe un código de producto de AWS Marketplace. Para integrar API Gateway en AWS Marketplace, asocie su plan de uso con el código de producto de AWS Marketplace. Para habilitar la asociación mediante el establecimiento del campo [https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlan.html#productCode](https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlan.html#productCode) del `UsagePlan` de API Gateway en el código de producto de AWS Marketplace, puede utilizar la consola de API Gateway, la API de REST de API Gateway, la AWS CLI para API Gateway o un AWS SDK para API Gateway. En el ejemplo de código siguiente se utiliza la API de REST de API Gateway:

```
PATCH /usageplans/{{USAGE_PLAN_ID}}
Host: apigateway.{{region}}.amazonaws.com
Authorization: ...

{
    "patchOperations" : [{
        "path" : "/productCode",
        "value" : "{{MARKETPLACE_PRODUCT_CODE}}",
        "op" : "replace"
    }]
}
```

## Administrar la suscripción de clientes a planes de uso
<a name="sell-api-as-saas-on-aws-marketplace-subscription-unsubscription"></a>

La aplicación del portal para desarrolladores se encarga de las siguientes tareas.

Cuando un cliente se suscribe a su producto mediante AWS Marketplace, AWS Marketplace reenvía una solicitud `POST` a la URL de suscripciones SaaS que registró cuando publicó su producto en AWS Marketplace. La solicitud `POST` incluye un parámetro `x-amzn-marketplace-token` que contiene la información del comprador. Siga las instrucciones de [Incorporación de clientes de SaaS](https://docs.aws.amazon.com/marketplace/latest/userguide/saas-product-customer-setup.html#in-your-application) para gestionar esta redirección en su aplicación del portal de desarrolladores.

En respuesta a la solicitud de suscripción de un cliente, AWS Marketplace envía una notificación `subscribe-success` a un tema de Amazon SNS al que usted puede suscribirse. (Consulte [Incorporación de clientes de SaaS](https://docs.aws.amazon.com/marketplace/latest/userguide/saas-product-customer-setup.html#in-your-application)). Para aceptar la solicitud de suscripción del cliente, administre la notificación `subscribe-success` mediante la creación o la recuperación de una clave de la API de API Gateway para el cliente, asociando el `customerId` aprovisionado por AWS Marketplace del cliente a las claves de la API y agregando después la clave de la API a su plan de uso.

Cuando se completa la solicitud de suscripción del cliente, la aplicación del portal para desarrolladores debe presentar al cliente la clave de API asociada e informarle de que debe incluirse en el encabezado `x-api-key` de las solicitudes a las API.

Cuando un cliente cancela una suscripción a un plan de uso, AWS Marketplace envía una notificación `unsubscribe-success` al tema de SNS. Para completar el proceso de anular la suscripción del cliente, administra la notificación `unsubscribe-success` eliminando las claves de API del cliente del plan de uso.

### Autorizar a un cliente para obtener acceso a un plan de uso
<a name="sell-api-as-saas-on-aws-marketplace-subscription-unsubscription-authorize-access-to-usage-plan"></a>

Para autorizar el acceso a su plan de uso para un cliente determinado, utilice la API de API Gateway para recuperar o crear una clave de API para el cliente y agréguela al plan de uso. 

En el siguiente ejemplo, se muestra cómo llamar a la API REST de API Gateway para crear una nueva clave de API con un valor de AWS Marketplace específico, `customerId` ({{MARKETPLACE\_CUSTOMER\_ID}}).

```
POST apikeys HTTP/1.1
Host: apigateway.{{region}}.amazonaws.com
Authorization: ...

{
  "name" : "my_api_key",
  "description" : "My API key",
  "enabled" : "false",
  "stageKeys" : [ {
    "restApiId" : "uycll6xg9a",
    "stageName" : "prod"
  } ],
  "customerId" : "{{MARKETPLACE_CUSTOMER_ID}}"
}
```

El siguiente ejemplo muestra cómo obtener una clave de API con un valor AWS Marketplace de `customerId` específico ({{MARKETPLACE\_CUSTOMER\_ID}}).

```
GET apikeys?customerId={{MARKETPLACE_CUSTOMER_ID}} HTTP/1.1
Host: apigateway.{{region}}.amazonaws.com
Authorization: ...
```

Para agregar una clave de API a un plan de uso, cree un recurso [https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlanKey.html](https://docs.aws.amazon.com/apigateway/latest/api/API_UsagePlanKey.html) con la clave de API para el plan de uso pertinente. El siguiente ejemplo muestra cómo realizar esto usando la API de REST de API Gateway, donde `n371pt` es el ID del plan de uso y `q5ugs7qjjh` es un `keyId` de API de ejemplo devuelto en los ejemplos anteriores.

```
POST /usageplans/n371pt/keys HTTP/1.1
Host: apigateway.{{region}}.amazonaws.com
Authorization: ...

{
    "keyId": "q5ugs7qjjh",
    "keyType": "API_KEY"
}
```

### Asociar un cliente a una clave de API
<a name="sell-api-as-saas-on-aws-marketplace-subscription-unsubscription-associate-marketplace"></a>

Debe actualizar el campo de [https://docs.aws.amazon.com/apigateway/latest/api/API_ApiKey.html](https://docs.aws.amazon.com/apigateway/latest/api/API_ApiKey.html) `customerId` con el ID del cliente de AWS Marketplace. De esta forma, se asociará la clave de API con el cliente de AWS Marketplace, con lo que podrá medir y facturar las solicitudes del comprador. El siguiente ejemplo de código llama a la API de REST de API Gateway para hacerlo.

```
PATCH /apikeys/q5ugs7qjjh
Host: apigateway.{{region}}.amazonaws.com
Authorization: ...
        
{
    "patchOperations" : [{
        "path" : "/customerId",
        "value" : "{{MARKETPLACE_CUSTOMER_ID}}",
        "op" : "replace"
    }]
}
```