

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.

# Configuración de las AWS integraciones de Oracle Database@ con Amazon Redshift
<a name="setting-up-zero-etl"></a>

Para configurar la integración sin ETL entre la base de datos de Oracle y Amazon Redshift, siga estos pasos:

1. Habilite el ETL cero en su red ODB.

1. Configure los requisitos previos de la base de datos Oracle.

1. Configure AWS Secrets Manager y AWS Key Management Service.

1. Configurar los permisos de IAM.

1. Configure las políticas de recursos de Amazon Redshift.

1. Cree la integración sin ETL.

1. Cree la base de datos de destino en Amazon Redshift.

## Paso 1: Habilite Zero-ETL para su red ODB
<a name="zero-etl-enable-network"></a>

Puede habilitar la integración sin ETL para la red ODB asociada a su clúster de máquinas virtuales de origen. De forma predeterminada, esta integración está deshabilitada.

### Consola
<a name="ZETLAccess.CON"></a>

**Para habilitar la integración sin ETL**

1. Abra la consola Oracle Database@ en AWS . [https://console.aws.amazon.com/odb/](https://console.aws.amazon.com/odb/)

1. En el panel de navegación, elija redes **ODB**.

1. Seleccione la red ODB para la que desee habilitar la integración sin ETL.

1. Elija **Modificar**.

1. **Seleccione Zero-ETL.**

1. **Seleccione **Continuar** y, a continuación, Modificar.**

### AWS CLI
<a name="ZETLAccess.CLI"></a>

Para habilitar la integración sin ETL, utilice el `update-odb-network` comando con el `--zero-etl-access` parámetro:

```
aws odb update-odb-network \
  --odb-network-id {{odb-network-id}} \
  --zero-etl-access ENABLED
```

Para habilitar la integración sin ETL en la red ODB asociada al clúster de máquinas virtuales de origen, utilice el comando. `update-odb-network` Este comando configura la infraestructura de red necesaria para la integración sin ETL.

```
aws odb update-odb-network \
  --odb-network-id {{your-odb-network-id}} \
  --zero-etl-access ENABLED
```

## Paso 2: Configure su base de datos Oracle
<a name="zero-etl-configure-oracle"></a>

Complete la configuración de la base de datos Oracle tal y como se describe en los [requisitos previos](zero-etl-prerequisites.md):
+ Cree los usuarios de replicación y conceda los permisos necesarios.
+ Habilite los redo logs archivados.
+ Configure SSL (solo Oracle Exadata).
+ Configure los usuarios de ASM, si corresponde (solo Oracle Exadata).

## Paso 3: Configurar AWS Secrets Manager y AWS Key Management Service
<a name="zero-etl-setup-secrets"></a>

Cree una clave gestionada por el cliente (CMK) y almacene las credenciales de su base de datos.

1. Cree una CMK en el servicio de administración de AWS claves mediante el `create-key` comando.

   ```
   aws kms create-key \
     --description "ODB Zero-ETL Integration Key" \
     --key-usage ENCRYPT_DECRYPT \
     --key-spec SYMMETRIC_DEFAULT
   ```

1. Guarde las credenciales de su base de datos en AWS Secrets Manager.

   ```
   aws secretsmanager create-secret \
     --name "ODBZeroETLCredentials" \
     --description "Credentials for Oracle Database@AWS Zero-ETL integration" \
     --kms-key-id {{your-cmk-key-arn}} \
     --secret-string file://secret-content.json
   ```

1. Adjunte una política de recursos al secreto para permitir el acceso a Oracle Database@AWS .

   ```
   aws secretsmanager put-resource-policy \
     --secret-id "ODBZeroETLCredentials" \
     --resource-policy file://secret-resource-policy.json
   ```

   En el comando anterior, `secret-resource-policy.json` contiene el siguiente JSON.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Effect": "Allow",
         "Principal": {
           "Service": "zetl.odb.amazonaws.com"
         },
         "Action": [
           "secretsmanager:GetSecretValue",
           "secretsmanager:DescribeSecret"
         ],
         "Resource": "*"
       }
     ]
   }
   ```

------

1. Adjunte una política de recursos a la CMK. La política de recursos de CMK debe incluir permisos tanto para el principal de servicio de Oracle Database@ como para el principal de AWS servicio de Amazon Redshift a fin de admitir la integración cifrada sin ETL.

   ```
   aws kms put-key-policy \
     --key-id {{your-cmk-key-arn}} \
     --policy-name default \
     --policy file://cmk-resource-policy.json
   ```

   El `cmk-resource-policy.json` archivo debe incluir las siguientes declaraciones de política. La primera declaración permite el acceso al AWS servicio Oracle Database@ y la segunda permite a Amazon Redshift crear concesiones en la clave KMS para operaciones de datos cifrados.

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

****  

   ```
   {
     "Version":"2012-10-17",		 	 	 
     "Statement": [
       {
         "Sid": "Allow ODB service access",
         "Effect": "Allow",
         "Principal": {
           "Service": "zetl.odb.amazonaws.com"
         },
         "Action": [
           "kms:Decrypt",
           "kms:GenerateDataKey",
           "kms:CreateGrant"
         ],
         "Resource": "*"
       },
       {
         "Sid": "Allows the Redshift service principal to add a grant to a KMS key",
         "Effect": "Allow",
         "Principal": {
           "Service": "redshift.amazonaws.com"
         },
         "Action": "kms:CreateGrant",
         "Resource": "*",
         "Condition": {
           "StringEquals": {
             "kms:EncryptionContext:{context-key}": "{context-value}"
           },
           "ForAllValues:StringEquals": {
             "kms:GrantOperations": [
               "Decrypt",
               "GenerateDataKey",
               "CreateGrant"
             ]
           }
         }
       }
     ]
   }
   ```

------

## Paso 4: Configurar los permisos de IAM
<a name="zero-etl-setup-iam"></a>

Cree y adjunte políticas de IAM que permitan operaciones de integración sin ETL.

```
aws iam create-policy \
  --policy-name "ODBZeroETLIntegrationPolicy" \
  --policy-document file://odb-zetl-iam-policy.json

aws iam attach-user-policy \
  --user-name {{your-iam-username}} \
  --policy-arn {{policy-arn}}
```

La siguiente política otorga los permisos necesarios.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "ODBGlueIntegrationAccess",
      "Effect": "Allow",
      "Action": [
        "glue:CreateIntegration",
        "glue:ModifyIntegration",
        "glue:DeleteIntegration",
        "glue:DescribeIntegrations",
        "glue:DescribeInboundIntegrations"
      ],
      "Resource": "*"
    },
    {
      "Sid": "ODBZetlOperations",
      "Effect": "Allow",
      "Action": "odb:CreateOutboundIntegration",
      "Resource": "*"
    },
    {
      "Sid": "ODBRedshiftFullAccess",
      "Effect": "Allow",
      "Action": [
        "redshift:*",
        "redshift-serverless:*",
        "ec2:DescribeAccountAttributes",
        "ec2:DescribeAddresses",
        "ec2:DescribeAvailabilityZones",
        "ec2:DescribeSecurityGroups",
        "ec2:DescribeSubnets",
        "ec2:DescribeVpcs",
        "ec2:DescribeInternetGateways",
        "sns:CreateTopic",
        "sns:Get*",
        "sns:List*",
        "cloudwatch:Describe*",
         "cloudwatch:Get*",
        "cloudwatch:List*",
        "cloudwatch:PutMetricAlarm",
        "cloudwatch:EnableAlarmActions",
        "cloudwatch:DisableAlarmActions",
        "tag:GetResources",
        "tag:UntagResources",
        "tag:GetTagValues",
        "tag:GetTagKeys",
        "tag:TagResources"
      ],
      "Resource": "*"
    },
    {
      "Sid": "ODBRedshiftDataAPI",
      "Effect": "Allow",
      "Action": [
        "redshift-data:ExecuteStatement",
        "redshift-data:CancelStatement",
        "redshift-data:ListStatements",
        "redshift-data:GetStatementResult",
        "redshift-data:DescribeStatement",
        "redshift-data:ListDatabases",
        "redshift-data:ListSchemas",
        "redshift-data:ListTables",
        "redshift-data:DescribeTable"
      ],
      "Resource": "*"
    },
    {
      "Sid": "ODBKMSAccess",
      "Effect": "Allow",
      "Action": [
        "kms:CreateKey",
        "kms:DescribeKey",
        "kms:Encrypt",
        "kms:Decrypt",
        "kms:GenerateDataKey",
        "kms:ListKeys",
        "kms:CreateAlias",
        "kms:ListAliases"
      ],
      "Resource": "*"
    },
    {
      "Sid": "ODBSecretsManagerAccess",
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue",
        "secretsmanager:PutSecretValue",
        "secretsmanager:CreateSecret",
        "secretsmanager:UpdateSecret",
        "secretsmanager:DeleteSecret",
        "secretsmanager:DescribeSecret",
        "secretsmanager:ListSecrets",
        "secretsmanager:GetResourcePolicy",
        "secretsmanager:PutResourcePolicy",
        "secretsmanager:ValidateResourcePolicy"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## Paso 5: Configurar las políticas de recursos de Amazon Redshift
<a name="zero-etl-setup-redshift"></a>

Configure políticas de recursos en su clúster de Amazon Redshift para autorizar las integraciones entrantes.

```
aws redshift put-resource-policy \
  --no-verify-ssl \
  --resource-arn "{{your-redshift-cluster-arn}}" \
  --policy '{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
      {
        "Effect": "Allow",
        "Principal": {
          "Service": "redshift.amazonaws.com"
        },
        "Action": [
          "redshift:AuthorizeInboundIntegration"
        ],
        "Condition": {
          "StringEquals": {
            "aws:SourceArn": "{{your-vm-cluster-arn}}"
          }
        }
      },
      {
        "Effect": "Allow",
        "Principal": {
          "AWS": "{{your-account-id}}"
        },
        "Action": [
          "redshift:CreateInboundIntegration"
        ]
      }
    ]
  }' \
  --region us-west-2
```

**sugerencia**  
Como alternativa, puede usar la opción **Fix it for me** de la consola. AWS Esta opción configura automáticamente las políticas de Amazon Redshift requeridas sin que tenga que hacerlo manualmente.

## Paso 6: Cree la integración Zero-ETL mediante AWS Glue
<a name="zero-etl-create-integration"></a>

Cree la integración Zero-ETL mediante el comando. AWS Glue `create-integration` En este comando, se especifica el clúster de máquinas virtuales de origen y el espacio de nombres de Amazon Redshift de destino.

El siguiente ejemplo crea una integración con un PDB denominado `pdb1` ejecutándose en un clúster de máquinas virtuales de Exadata. También puede crear un clúster de máquinas virtuales autónomas `cloud-vm-cluster` sustituyéndolo por `cloud-autonomous-vm-cluster` en el ARN de origen. Especificar una clave KMS es opcional. Si especifica una clave, puede ser diferente de la que creó[Paso 3: Configurar AWS Secrets Manager y AWS Key Management Service](#zero-etl-setup-secrets).

```
aws glue create-integration \
  --integration-name "MyODBZeroETLIntegration" \
  --source-arn "arn:aws:odb:{{region}}:{{account}}:cloud-vm-cluster/{{cluster-id}}" \
  --target-arn "arn:aws:redshift:{{region:account}}:namespace/{{namespace-id}}" \
  --data-filter "include: {{pdb1}}.*.*" \
  --integration-config '{
      "RefreshInterval": "10",
      "IntegrationMode": "DEFAULT",
      "SourcePropertiesMap": {
        "secret-arn": "arn:aws:secretsmanager:{{region}}:{{account}}:secret:{{secret-name}}"
      }
    }' \
  --description "Zero-ETL integration for Oracle to Amazon Redshift" \
  --kms-key-id "arn:aws:kms:{{region:account}}:key/{{key-id}}"
```

El comando devuelve un ARN de integración y establece el estado en. `creating` Puede supervisar el estado de la integración mediante el `describe-integrations` comando.

```
aws glue describe-integrations \
  --integration-identifier {{integration-id}}
```

**importante**  
Solo se admite un PDB por integración. El filtro de datos debe especificar una única PDB, por ejemplo,. `include: pdb1.*.*` La fuente debe estar en la misma AWS región y cuenta en las que se está creando la integración.

## Paso 7: Crear una base de datos de destino en Amazon Redshift
<a name="zero-etl-create-target-database"></a>

Cuando la integración esté activa, cree una base de datos de destino en el clúster de Amazon Redshift.

```
-- Connect to your Amazon Redshift cluster
psql -h {{your-redshift-endpoint}} -U {{username}} -d {{database}}

-- Create database from integration
CREATE DATABASE {{target_database_name}} 
FROM INTEGRATION '{{integration-id}}' 
DATABASE "{{source_pdb_name}}";
```

Tras crear la base de datos de destino, puede consultar los datos replicados.

```
-- List databases to verify creation
\l

-- Connect to the new database
\c {{target_database_name}}

-- List tables to see replicated data
\dt
```

## Compruebe la integración sin ETL
<a name="zero-etl-verify-setup"></a>

Compruebe que la integración funciona consultando el estado de la integración AWS Glue y asegurándose de que los cambios de Oracle se estén replicando en Amazon Redshift.

**Para comprobar que la integración de Zero-ETL funciona correctamente**

1. Compruebe el estado de la integración.

   ```
   aws glue describe-integrations \
     --integration-identifier {{integration-id}}
   ```

   El estado debe ser `ACTIVE` o`REPLICATING`.

1. Compruebe la replicación de datos realizando cambios en la base de datos de Oracle y comprobando que aparecen en Amazon Redshift.

1. Supervise las métricas de replicación en Amazon CloudWatch (si están disponibles).