

# Adobe Marketo Engage에 연결
<a name="connecting-to-data-adobe-marketo-engage"></a>

Adobe Marketo Engage는 마케팅 담당자가 잠재 고객과 고객에게 맞춤형 다중 채널 프로그램과 캠페인을 관리할 수 있는 마케팅 자동화 플랫폼입니다.

**Topics**
+ [Adobe Marketo Engage의 AWS Glue 지원](adobe-marketo-engage-support.md)
+ [연결을 생성하고 사용하기 위한 API 작업이 포함된 정책](adobe-marketo-engage-configuring-iam-permissions.md)
+ [Adobe Marketo Engage 구성](adobe-marketo-engage-configuring.md)
+ [Adobe Marketo Engage 연결 구성](adobe-marketo-engage-configuring-connections.md)
+ [Adobe Marketo Engage 엔터티에서 읽기](adobe-marketo-engage-reading-from-entities.md)
+ [Adobe Marketo Engage 개체에 쓰기](adobe-marketo-engage-writing-to-entities.md)
+ [Adobe Marketo Engage 연결 옵션](adobe-marketo-engage-connection-options.md)
+ [Adobe Marketo Engage 커넥터에 대한 제한 사항 및 참고 사항](adobe-marketo-engage-connector-limitations.md)

# Adobe Marketo Engage의 AWS Glue 지원
<a name="adobe-marketo-engage-support"></a>

AWS Glue는 다음과 같이 Adobe Marketo Engage를 지원합니다.

**소스로 지원되나요?**  
예. AWS Glue ETL 작업을 사용하여 Adobe Marketo Engage에서 데이터를 쿼리할 수 있습니다.

**대상으로서 지원되나요?**  
예. AWS Glue ETL 작업을 사용하여 Adobe Marketo에 데이터를 쓸 수 있습니다.

**지원되는 Adobe Marketo Engage API 버전**  
다음 Adobe Marketo Engage API 버전이 지원됩니다.
+ v1

버전별 엔터티 지원은 소스에 대해 지원되는 엔터티를 참조하세요.

# 연결을 생성하고 사용하기 위한 API 작업이 포함된 정책
<a name="adobe-marketo-engage-configuring-iam-permissions"></a>

다음 샘플 정책은 연결을 생성하고 사용하는 데 필요한 AWS IAM 권한을 설명합니다. 새 역할을 생성하는 경우 다음을 포함하는 정책을 생성합니다.

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "glue:ListConnectionTypes",
        "glue:DescribeConnectionType",
        "glue:RefreshOAuth2Tokens",
        "glue:ListEntities",
        "glue:DescribeEntity"
      ],
      "Resource": "*"
    }
  ]
}
```

------

위 메서드를 사용하지 않으려는 경우 대신 다음 관리형 IAM 정책을 사용합니다.
+ [AWSGlueServiceRole](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/service-role/AWSGlueServiceRole) – 다양한 AWS Glue 프로세스를 대신 실행하는 데 필요한 리소스에 대한 액세스 권한을 부여합니다. 이러한 리소스에는 AWS Glue, Amazon S3, IAM, CloudWatch Logs 및 Amazon EC2가 포함됩니다. 이 정책에 지정된 리소스의 이름 변환을 따르고자 한다면 AWS Glue 절차는 필요한 권한을 소유합니다. 이 정책은 크롤러, 작업 및 개발 엔드포인트를 정의할 때 지정된 역할에 일반적으로 추가됩니다.
+ [AWSGlueConsoleFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSGlueConsoleFullAccess) - 정책이 연결된 자격 증명이 AWS Management Console을 사용하는 경우 AWS Glue 리소스에 대한 전체 액세스 권한을 부여합니다. 이 정책에 지정된 리소스의 이름 변환을 따르면 사용자는 콘솔 전체 용량을 소유합니다. 이 정책은 보통 AWS Glue 콘솔의 사용자에게 해당됩니다.

# Adobe Marketo Engage 구성
<a name="adobe-marketo-engage-configuring"></a>

AWS Glue를 사용하여 Adobe Marketo Engage에서 데이터를 전송하려면 먼저 다음 요구 사항을 충족해야 합니다.

## 최소 요구 사항
<a name="adobe-marketo-engage-configuring-min-requirements"></a>

다음은 최소 요구 사항입니다.
+ 클라이언트 자격 증명이 있는 Adobe Marketo Engage 계정이 있습니다.
+ Adobe Marketo Engage 계정에 유효한 라이선스가 있는 API 액세스 권한이 있습니다.

이러한 요구 사항을 충족하면 Adobe Marketo Engage 계정에 AWS Glue를 연결할 준비가 된 것입니다. 일반적인 연결의 경우 Adobe Marketo Engage에서 다른 작업을 수행하지 않아도 됩니다.

## OAuth 2.0 자격 증명 가져오기
<a name="adobe-marketo-engage-configuring-creating-adobe-marketo-engage-oauth2-credentials"></a>

인스턴스에 대해 인증된 직접 호출을 수행할 수 있도록 API 자격 증명을 확보하려면 [Adobe Marketo Rest API](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/rest-api)를 참조하세요.

# Adobe Marketo Engage 연결 구성
<a name="adobe-marketo-engage-configuring-connections"></a>

Adobe Marketo Engage는 OAuth2에 대한 CLIENT CREDENTIALS 권한 부여 유형을 지원합니다.
+ 이 권한 부여 유형은 클라이언트가 사용자의 컨텍스트 외부에서 액세스 토큰을 얻는 데 사용하므로 2각 OAuth 2.0으로 간주됩니다. AWS Glue는 클라이언트 ID와 클라이언트 암호를 사용하여 사용자가 정의한 사용자 지정 서비스에서 제공하는 Adobe Marketo Engage API를 인증할 수 있습니다.
+ 각 사용자 지정 서비스는 API 전용 사용자가 소유하며, API 전용 사용자는 서비스에 특정 작업을 수행하도록 권한을 부여하는 역할 및 권한 집합을 가집니다. 액세스 토큰은 단일 사용자 지정 서비스와 연결됩니다.
+ 이 권한 부여 유형은 수명이 짧은 액세스 토큰을 생성하며 ID 엔드포인트를 호출하여 갱신할 수 있습니다.
+ 클라이언트 자격 증명이 포함된 OAuth 2.0용 퍼블릭 Adobe Marketo Engage 설명서는 Adobe Marketo Engage 개발자 안내서의 [Authentication](https://developers.adobe-marketo-engage.com/rest-api/authentication/)을 참조하세요.

Adobe Marketo Engage 연결을 구성하는 방법:

1. AWS Secrets Manager에서 다음 세부 정보로 보안 암호를 생성합니다.

   1. 고객 관리형 연결된 앱의 경우 보안 암호는 키 역할을 하는 `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET`과 함께 연결된 앱 소비자 보안 암호를 포함해야 합니다.

   1. 참고: AWS Glue에서 연결당 시크릿을 생성해야 합니다.

1. AWS Glue Glue Studio의 **데이터 연결**에서 아래 단계에 따라 연결을 생성하세요.

   1. **연결 유형**을 선택할 때 Adobe Marketo Engage를 선택합니다.

   1. 연결하려는 Adobe Marketo Engage 인스턴스의 `INSTANCE_URL`을 제공합니다.

   1. 다음 작업에 대한 권한이 있고 AWS Glue에서 수임할 수 있는 AWS IAM 역할을 선택하세요.

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

****  

      ```
      {
        "Version":"2012-10-17",		 	 	 
        "Statement": [
          {
            "Effect": "Allow",
            "Action": [
              "secretsmanager:DescribeSecret",
              "secretsmanager:GetSecretValue",
              "secretsmanager:PutSecretValue",
              "ec2:CreateNetworkInterface",
              "ec2:DescribeNetworkInterfaces",
              "ec2:DeleteNetworkInterface"
            ],
            "Resource": "*"
          }
        ]
      }
      ```

------

   1. 토큰을 넣기 위해 AWS Glue에서 이 연결에 사용할 `secretName`을 선택합니다.

   1. 네트워크를 사용하려는 경우 네트워크 옵션을 선택합니다.

1. AWS Glue 작업 권한과 연결된 IAM 역할에 `secretName`을 읽을 수 있는 권한을 부여합니다.

# Adobe Marketo Engage 엔터티에서 읽기
<a name="adobe-marketo-engage-reading-from-entities"></a>

**사전 조건**

읽으려는 Adobe Marketo Engage 객체. 객체 이름(리드, 활동 또는 사용자 지정 객체)이 필요합니다. 다음 표에는 지원되는 엔터티가 나와 있습니다.

**소스에 대해 지원되는 엔터티(동기식)**:


| 개체 | 필터링 가능 | 제한 지원 | 정렬 기준 지원 | Select \$1 지원 | 분할 지원 | 
| --- | --- | --- | --- | --- | --- | 
| 리드 | 예 | 예 | 아니요 | 예 | 아니요 | 
| 활동 | 예 | 예 | 아니요 | 예 | 아니요 | 
| 사용자 지정 객체 | 예 | 예 | 아니요 | 예 | 아니요 | 

**소스에 대해 지원되는 엔터티(비동기식)**:


| 개체 | 필터링 가능 | 제한 지원 | 정렬 기준 지원 | Select \$1 지원 | 분할 지원 | 
| --- | --- | --- | --- | --- | --- | 
| 리드 | 예 | 아니요 | 아니요 | 예 | 예 | 
| 활동 | 예 | 아니요 | 아니요 | 예 | 아니요 | 
| 사용자 지정 객체 | 예 | 아니요 | 아니요 | 예 | 예 | 

**예시:**

```
adobe-marketo-engage_read = glueContext.create_dynamic_frame.from_options(
    connection_type="adobe-marketo-engage",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "leads",
        "API_VERSION": "v2",
        "INSTANCE_URL": "https://539-t**-6**.mktorest.com"
    }
```

**Adobe Marketo Engage 엔터티 및 필드 세부 정보**:

**정적 메타데이터를 포함하는 엔터티**: 

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/adobe-marketo-engage-reading-from-entities.html)

**동적 메타데이터를 포함하는 엔터티**:

다음 엔터티에 대해 Adobe Marketo Engage에서는 메타데이터를 동적으로 가져오도록 엔드포인트를 제공하므로 운영자 지원은 각 엔터티의 데이터 유형 수준에서 캡처됩니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/adobe-marketo-engage-reading-from-entities.html)

## 쿼리 파티셔닝
<a name="adobe-marketo-engage-reading-partitioning-queries"></a>

Spark에서 동시성을 활용하려는 경우 추가 Spark 옵션(`PARTITION_FIELD`, `LOWER_BOUND`, `UPPER_BOUND`, `NUM_PARTITIONS`)을 제공할 수 있습니다. 이러한 파라미터를 사용하면 Spark 작업에서 동시에 실행할 수 있는 `NUM_PARTITIONS`개의 하위 쿼리로 원래 쿼리가 분할됩니다.
+ `PARTITION_FIELD`: 쿼리 분할에 사용할 필드의 이름입니다.
+ `LOWER_BOUND`: 선택한 파티션 필드의 하한 값(**경계 포함**).

  DateTime 필드의 경우 ISO 형식의 값이 허용됩니다.

  유효한 값의 예제:

  ```
  "2024-07-01T00:00:00.000Z"
  ```
+ `UPPER_BOUND`: 선택한 파티션 필드의 상한 값(**경계 제외**).
+ `NUM_PARTITIONS`: 파티션 수.

다음 표에서는 엔터티 분할 필드 지원 세부 정보를 설명합니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/glue/latest/dg/adobe-marketo-engage-reading-from-entities.html)

예시:

```
adobe-marketo-engage_read = glueContext.create_dynamic_frame.from_options(
    connection_type="adobe-marketo-engage",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "leads",
        "API_VERSION": "v1",
        "PARTITION_FIELD": "createdAt"
        "LOWER_BOUND": "2024-07-01T00:00:00.000Z"
        "UPPER_BOUND": "2024-07-02T00:00:00.000Z"
        "NUM_PARTITIONS": "10"
    }
```

# Adobe Marketo Engage 개체에 쓰기
<a name="adobe-marketo-engage-writing-to-entities"></a>

**사전 조건 **
+ 쓰기 대상 Adobe Marketo 객체입니다. 객체 이름(예: `leads` 또는 `customobjects`)이 필요합니다.
+ Adobe Marketo 커넥터는 세 가지 쓰기 작업을 지원합니다.
  + INSERT
  + UPSERT
  + UPDATE
+ `UPSERT` 및 `UPDATE` 쓰기 작업의 경우 레코드의 ID 필드를 지정하는 `ID_FIELD_NAMES` 옵션을 제공해야 합니다. `leads` 엔터티로 작업할 때는 `UPSERT` 작업에 `email`을 `ID_FIELD_NAMES`로 사용하고 `UPDATE` 작업에 `id`를 사용합니다. `customobjects` 엔터티의 경우 `UPDATE` 및 `UPSERT` 작업 모두에 `marketoGUID`를 `ID_FIELD_NAMES`로 사용합니다.

**대상에 지원되는 엔터티(동기식)**


| 엔터티 이름 | 대상 커넥터로 지원됩니다. | 삽입 가능 | 업데이트 가능 | 업서트 가능 | 
| --- | --- | --- | --- | --- | 
| 리드 | 예 | 예(대량) | 예(대량) | 예(대량) | 
| 사용자 지정 객체 | 예 | 예(대량) | 예(대량) | 예(대량) | 

**예시:**

**INSERT 작업:**

```
marketo_write = glueContext.write_dynamic_frame.from_options(
    frame=frameToWrite,
    connection_type="marketo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "leads",
        "API_VERSION": "v1",
        "WRITE_OPERATION": "INSERT"
    }
```

**UPDATE 작업:**

```
marketo_write = glueContext.write_dynamic_frame.from_options(
    frame=frameToWrite,
    connection_type="marketo",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "leads",
        "API_VERSION": "v1",
        "WRITE_OPERATION": "UPDATE",
        "ID_FIELD_NAMES": "id"
    }
```

**참고**  
`leads` 및 `customobjects` 엔터티의 경우 Adobe Marketo는 메타데이터를 동적으로 가져오는 엔드포인트를 제공하므로 Marketo API 응답에서 쓰기 가능한 필드를 식별할 수 있습니다.

# Adobe Marketo Engage 연결 옵션
<a name="adobe-marketo-engage-connection-options"></a>

다음은 Adobe Marketo Engage의 연결 옵션입니다.
+ `ENTITY_NAME`(문자열) - (필수) 읽기에 사용됩니다. Adobe Marketo Engage의 객체 이름입니다.
+ `API_VERSION`(문자열) - (필수) 읽기에 사용됩니다. 사용할 Adobe Marketo Engage Rest API 버전입니다. 예: v1.
+ `SELECTED_FIELDS`(List<String>) - 기본값: 비어 있습니다(SELECT \$1). 읽기에 사용됩니다. 객체에 대해 선택할 열.
+ `FILTER_PREDICATE`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. Spark SQL 형식이어야 합니다.
+ `QUERY`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. 전체 Spark SQL 쿼리.
+ `PARTITION_FIELD`(문자열) - 읽기에 사용됩니다. 쿼리 분할에 사용할 필드입니다.
+ `LOWER_BOUND`(문자열) - 읽기에 사용됩니다. 선택한 파티션 필드의 하한 값(경계 포함).
+ `UPPER_BOUND`(문자열) - 읽기에 사용됩니다. 선택한 파티션 필드의 상한 값(경계 제외).
+ `NUM_PARTITIONS`(정수) - 기본값: 1. 읽기에 사용됩니다. 읽을 파티션 수.
+ `TRANSFER_MODE`(문자열) - 기본값: SYNC. 비동기 읽기에 사용됩니다.
+ `WRITE_OPERATION`(문자열) - 기본값: INSERT. 쓰기에 사용됩니다. 값은 INSERT, UPDATE, UPSERT여야 합니다.
+ `ID_FIELD_NAMES`(문자열) - 기본값: null. UPDATE 및 UPSERT에 필요합니다.

# Adobe Marketo Engage 커넥터에 대한 제한 사항 및 참고 사항
<a name="adobe-marketo-engage-connector-limitations"></a>

다음은 Adobe Marketo Engage 커넥터의 제한 사항 또는 참고 사항입니다.
+ 'sinceDatetime' 및 'activityTypeId'는 동기화 활동 엔터티의 필수 필터 파라미터입니다.
+ 구독에는 하루에 50,000개의 API 직접 호출이 할당됩니다(오전 12:00 CST에 매일 재설정됨). Adobe Marketo Engage 구독의 일부로 추가 일일 용량을 구매할 수 있습니다. 자세한 내용은 [Adobe Marketo Rest API](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/rest-api)를 참조하세요.
+ 날짜 범위 필터(`createdAt` 또는 `updatedAt`)의 최대 기간은 31일입니다. 자세한 내용은 [대량 추출 - Marketo 개발자](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract)를 참조하세요.
+ 구독에는 언제든지 대기열에 최대 10개의 대량 추출 작업이 할당됩니다. 자세한 내용은 [대량 추출 - Marketo 개발자](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract)를 참조하세요.
+ 기본적으로 추출 작업은 하루에 500MB로 제한됩니다(오전 12:00 CST에 매일 재설정됨). Adobe Marketo Engage 구독의 일부로 추가 일일 용량을 구매할 수 있습니다. 자세한 내용은 [대량 추출 - Marketo 개발자](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract)를 참조하세요.
+ 동시 내보내기 최대 작업 수는 2입니다. 자세한 내용은 [대량 추출 - Marketo 개발자](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract)를 참조하세요.
+ 대기열에 있는 내보내기 작업의 최대 수(현재 내보내는 작업 포함)는 10개입니다. 자세한 내용은 [대량 추출 - Marketo 개발자](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract)를 참조하세요.
+ 허용되는 최대 파일 크기는 대량 작업에서 추출할 수 있는 1GB입니다.
+ 비동기 작업이 생성되면 파일 보존 기간은 만료 7일 전입니다. 자세한 내용은 [대량 추출 - Marketo 개발자](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-extract)를 참조하세요.
+ `createdAt` 또는 `updatedAt`은 Async Leads 엔터티의 필수 필터 파라미터입니다.
+ `createdAt`은 비동기 활동 엔터티의 필수 필터 파라미터입니다.
+ `updatedAt`은 비동기 사용자 지정 객체 엔터티의 필수 필터 파라미터입니다.
+ AWS Glue SaaS 커넥터를 사용할 때 사용자는 부분 장애 발생 시 대상 SaaS 플랫폼에 쓰기 작업 중에 어떤 특정 레코드가 실패했는지 식별할 수 없습니다.
+ 동기화 쓰기 작업을 사용하는 경우 입력 파일에 null 값이 있는 모든 필드는 자동으로 삭제되고 SaaS 플랫폼으로 전송되지 않습니다.
+ 동기화 쓰기를 위해 배치에서 최대 300개의 레코드를 생성하거나 업데이트할 수 있습니다.

자세한 내용은 [Adobe Marketo Engage 통합 모범 사례](https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/marketo-integration-best-practices) 및 [대량 추출](https://https://experienceleague.adobe.com/en/docs/marketo-developer/marketo/rest/bulk-extract/bulk-activity-extract)을 참조하세요.