

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

Instagram은 브랜드, 유명 인사, 사고 방식의 리더, 친구, 가족 등과 연결할 수 있는 인기 있는 사진 공유 앱입니다. 이는 사진 공유 및 소셜 네트워킹 서비스입니다. 사용자는 사진이나 짧은 동영상을 찍어 팔로워와 공유할 수 있습니다. Instagram Ads는 Instagram 사용자에게 제공하기 위해 비즈니스에서 비용을 지불할 수 있는 게시물입니다.

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

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

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

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

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

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

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

# Instagram Ads 구성
<a name="instagram-ads-configuring"></a>

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

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

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

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

인스턴스에 대해 인증된 직접 호출을 수행할 수 있도록 API 자격 증명을 확보하려면 [그래프 API](https://developers.facebook.com/docs/graph-api/)를 참조하세요.

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

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

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

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

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

   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. 사용자 관리형 클라이언트 애플리케이션 클라이언트 ID를 제공합니다.

   1. 토큰을 넣기 위해 AWS Glue에서 이 연결에 사용할 `secretName`을 선택합니다. 선택한 보안 암호에는 값이 연결된 앱의 클라이언트 보안 암호인 `USER_MANAGED_CLIENT_APPLICATION_CLIENT_SECRET` 키가 있어야 합니다.

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

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

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

**사전 조건**

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

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


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

**예시:**

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

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

엔터티 및 필드 세부 정보에 대한 자세한 내용은 다음을 참조하세요.
+ [캠페인](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/ad-image)
+ [광고 인사이트](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="instagram-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-01T00:00:00.000Z"
  ```
+ `UPPER_BOUND`: 선택한 파티션 필드의 상한 값(**경계 제외**).

  유효한 값의 예제:

  ```
  "2024-01-02T00:00:00.000Z"
  ```
+ `NUM_PARTITIONS`: 파티션 수.

예시:

```
instagramADs_read = glueContext.create_dynamic_frame.from_options(
    connection_type="instagramads",
    connection_options={
        "connectionName": "connectionName",
        "ENTITY_NAME": "entityName",
        "API_VERSION": "v20.0",
        "PARTITION_FIELD": "created_time"
        "LOWER_BOUND": "2022-01-01T00:00:00.000Z"
        "UPPER_BOUND": "2024-01-02T00:00:00.000Z"
        "NUM_PARTITIONS": "10"
    }
```

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

다음은 Instagram Ads에 대한 연결 옵션입니다.
+ `ENTITY_NAME`(문자열) - (필수) 읽기에 사용됩니다. Instagram Ads에서의 객체 이름.
+ `API_VERSION`(문자열) - (필수) 읽기에 사용됩니다. 사용할 Instagram Ads 그래프 API 버전. 예: v21.
+ `SELECTED_FIELDS`(List<String>) - 기본값: 비어 있습니다(SELECT \$1). 읽기에 사용됩니다. 객체에 대해 선택할 열.
+ `FILTER_PREDICATE`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. Spark SQL 형식이어야 합니다.
+ `QUERY`(문자열) - 기본값: 비어 있습니다. 읽기에 사용됩니다. 전체 Spark SQL 쿼리.
+ `PARTITION_FIELD`(문자열) - 읽기에 사용됩니다. 쿼리 분할에 사용할 필드입니다.
+ `LOWER_BOUND`(문자열) - 읽기에 사용됩니다. 선택한 파티션 필드의 하한 값(경계 포함).
+ `UPPER_BOUND`(문자열) - 읽기에 사용됩니다. 선택한 파티션 필드의 상한 값(경계 제외).
+ `NUM_PARTITIONS`(정수) - 기본값: 1. 읽기에 사용됩니다. 읽을 파티션 수.

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

다음은 Instagram Ads 커넥터에 대한 제한 사항 또는 참고 사항입니다.
+ 앱의 직접 호출 수는 롤링 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)을 참조하세요.