

# Facebook Ads에 연결
<a name="connecting-to-data-facebook-ads"></a>

Facebook Ads는 모든 규모의 비즈니스에서 대상 고객에게 도달하고 다양한 마케팅 목표를 달성하기 위해 사용하는 강력한 디지털 광고 플랫폼입니다. 이 플랫폼을 통해 광고주는 Facebook 및 메신저를 포함한 Facebook의 앱 및 서비스 제품군에 표시할 수 있는 맞춤형 광고를 생성할 수 있습니다. Facebook Ads는 고급 타겟팅 기능을 통해 비즈니스가 특정 인구 통계, 관심사, 행동 및 위치에 도달할 수 있도록 지원합니다.

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

# Facebook Ads에 대한 AWS Glue의 지원
<a name="facebook-ads-support"></a>

AWS Glue에서는 다음과 같이 Facebook Ads를 지원합니다.

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

**대상으로서 지원되나요?**  
아니요.

**지원되는 Facebook Ads API 버전**  
다음 Facebook Ads API 버전이 지원됩니다.
+ v17.0
+ v18.0
+ v19.0
+ v20.0

# 연결을 생성하고 사용하기 위한 API 작업이 포함된 정책
<a name="facebook-ads-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 콘솔의 사용자에게 해당됩니다.

# Facebook Ads 구성
<a name="facebook-ads-configuring"></a>

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

## 최소 요구 사항
<a name="facebook-ads-configuring-min-requirements"></a>

다음은 최소 요구 사항입니다.
+ Facebook Standard 계정에는 Facebook을 통해 직접 액세스됩니다.
+ 액세스 토큰을 생성하려면 사용자 인증이 필요합니다.
+ Facebook Ads SDK 커넥터는 *사용자 액세스 토큰 OAuth* 흐름을 구현합니다.
+ OAuth2.0을 사용하여 Facebook Ads에 대한 API 요청을 인증합니다. 이 웹 기반 인증은 2FA의 상위 세트인 다중 인증(MFA) 아키텍처에 속합니다.
+ 사용자에게 엔드포인트에 액세스할 수 있는 권한을 부여해야 합니다. 사용자의 데이터에 액세스하기 위해 엔드포인트 권한 부여는 [권한](https://developers.facebook.com/docs/permissions) 및 [기능](https://developers.facebook.com/docs/features-reference)을 통해 처리됩니다.

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

인스턴스에 대해 인증된 직접 호출을 수행할 수 있도록 API 자격 증명을 확보하려면 Facebook Ads 개발자 안내서의 [REST API](https://developers.facebook-ads.com/rest-api/)를 참조하세요.

# Facebook Ads 연결 구성
<a name="facebook-ads-configuring-connections"></a>

Facebook Ads에서는 OAuth2에 대한 AUTHORIZATION\$1CODE 권한 부여 유형을 지원합니다.
+ 이 권한 부여 유형은 사용자를 인증하기 위해 사용자를 서드파티 권한 부여 서버로 리디렉션하는 방식에 의존하므로 3각 OAuth로 간주됩니다. AWS Glue 콘솔을 통해 연결을 생성할 때 사용됩니다.
+ 사용자는 AWS Glue 콘솔을 통해 연결을 생성할 때에도 Facebook Ads에서 자체 연결된 앱을 생성하고 자체 클라이언트 ID와 클라이언트 보안 암호를 제공하기로 선택할 수 있습니다. 이 시나리오에서는 여전히 Facebook Ads로 리디렉션되어 로그인하고 리소스에 액세스할 수 있는 권한을 AWS Glue에 부여합니다.
+ 이 권한 부여 유형은 액세스 토큰을 생성합니다. 만료되는 시스템 사용자 토큰은 생성 날짜 또는 새로 고친 날짜로부터 60일 동안 유효합니다. 연속성을 생성하려면 개발자가 60일 이내에 액세스 토큰을 새로 고쳐야 합니다. 그렇지 않으면 액세스 토큰이 몰수되고 개발자가 API 액세스 권한을 다시 획득하기 위해 새 토큰을 확보해야 합니다. [액세스 토큰 새로 고침](https://developers.facebook.com/docs/marketing-api/system-users/install-apps-and-generate-tokens/)을 참조하세요.
+ 권한 부여 코드 OAuth 흐름을 위한 연결된 앱 생성에 대한 퍼블릭 Facebook Ads 설명서는 Google for Developers 안내서의 [Using OAuth 2.0 to Access Google APIs](https://developers.google.com/identity/protocols/oauth2)를 참조하세요.

Facebook Ads 연결을 구성하는 방법:

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

   1. **연결 유형**을 선택할 때 Facebook Ads를 선택하세요.

   1. 연결하려는 Facebook Ads 인스턴스의 `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`을 읽을 수 있는 권한을 부여합니다.

# Facebook Ads 엔터티에서 읽기
<a name="facebook-ads-reading-from-entities"></a>

**사전 조건**

읽으려는 Facebook Ads 객체. 객체 이름이 필요합니다. 다음 표에는 지원되는 엔터티가 나와 있습니다.

**소스에 대해 지원되는 엔터티**:


| 개체 | 필터링 가능 | 제한 지원 | 정렬 기준 지원 | Select \$1 지원 | 분할 지원 | 
| --- | --- | --- | --- | --- | --- | 
| 캠페인 | 예 | 예 | 아니요 | 예 | 예 | 
| 광고 세트 | 예 | 예 | 아니요 | 예 | 예 | 
| 광고 | 예 | 예 | 아니요 | 예 | 예 | 
| 광고 크리에이티브 | 아니요 | 예 | 아니요 | 예 | 아니요 | 
| 인사이트 - 계정 | 아니요 | 예 | 아니요 | 예 | 아니요 | 
| Adaccounts | 예 | 예 | 아니요 | 예 | 아니요 | 
| 인사이트 - 광고 | 예 | 예 | 아니요 | 예 | 예 | 
| 인사이트 - 광고 세트 | 예 | 예 | 아니요 | 예 | 예 | 
| 인사이트 - 캠페인 | 예 | 예 | 아니요 | 예 | 예 | 

**예시:**

```
FacebookAds_read = glueContext.create_dynamic_frame.from_options(
    connection_type="FacebookAds",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v20.0"
    }
```

## Facebook Ads 엔터티 및 필드 세부 정보
<a name="facebook-ads-reading-entity-and-field-details"></a>

엔터티 및 필드 세부 정보에 대한 자세한 내용은 다음을 참조하세요.
+ [광고 계정](https://developers.facebook.com/docs/marketing-api/reference/ad-account)
+ [캠페인](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group)
+ [광고 세트](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign)
+ [광고](https://developers.facebook.com/docs/marketing-api/reference/adgroup)
+ [광고 크리에이티브](https://developers.facebook.com/docs/marketing-api/reference/ad-creative)
+ [인사이트 광고 계정](https://developers.facebook.com/docs/marketing-api/reference/ad-account/insights)
+ [인사이트 광고](https://developers.facebook.com/docs/marketing-api/reference/adgroup/insights/)
+ [인사이트 광고 세트](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign/insights)
+ [인사이트 캠페인](https://developers.facebook.com/docs/marketing-api/reference/ad-campaign-group/insights)

자세한 내용은 [마케팅 API](https://developers.facebook.com/docs/marketing-api/reference/v21.0)를 참조하세요.

**참고**  
구조체 및 목록 데이터 유형은 커넥터의 응답에서 문자열 데이터 유형으로 변환됩니다.

## 쿼리 파티셔닝
<a name="facebook-ads-reading-partitioning-queries"></a>

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

  DateTime 필드의 경우 Spark SQL 쿼리에 사용된 Spark 타임스탬프 형식을 허용합니다.

  유효한 값의 예제:

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

예시:

```
FacebookADs_read = glueContext.create_dynamic_frame.from_options(
    connection_type="FacebookAds",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v20.0",
        "PARTITION_FIELD": "created_time"
        "LOWER_BOUND": "2022-01-01"
        "UPPER_BOUND": "2024-01-02"
        "NUM_PARTITIONS": "10"
    }
```

# Facebook Ads 연결 옵션
<a name="facebook-ads-connection-options"></a>

다음은 Facebook Ads에 대한 연결 옵션입니다.
+ `ENTITY_NAME`(문자열) - (필수) 읽기에 사용됩니다. Facebook Ads에서의 객체 이름.
+ `API_VERSION`(문자열) - (필수) 읽기에 사용됩니다. 사용할 Facebook Ads 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. 비동기 읽기에 사용됩니다.

# Facebook Ads 커넥터에 대한 제한 사항 및 참고 사항
<a name="facebook-ads-connector-limitations"></a>

다음은 Facebook Ads 커넥터에 대한 제한 사항 또는 참고 사항입니다.
+ Facebook Ads는 동적 메타데이터를 지원하므로 모든 필드를 쿼리할 수 있습니다. 모든 필드는 필터링을 지원하며 데이터를 사용할 수 있는 경우 레코드를 가져옵니다. 그렇지 않으면 Facebook에서 적절한 오류 메시지와 함께 잘못된 요청(400) 응답을 반환합니다.
+ 앱의 직접 호출 수는 롤링 1시간 기간에 사용자가 수행할 수 있는 직접 호출 수(200에 사용자 수를 곱한 값). 요금 제한에 대한 자세한 내용은 [사용 제한](https://developers.facebook.com/docs/graph-api/overview/rate-limiting/) 및 [비즈니스 사용 사례 사용 제한](https://developers.facebook.com/docs/graph-api/overview/rate-limiting/#buc-rate-limits)을 참조하세요.