Search code examples
python-3.xamazon-web-servicesaws-lambdagoogle-ads-apiamazon-appflow

Creating CustomConnector connection (GoogleAds) using AWS Lambda | AppFlow


Does Boto3 client support connectors for GoogleAds and FacebookAds? According to documentation we can use Custom Connector but when i try to use it in the code i get the below error saying it should be one of the built in types.

[ERROR] ParamValidationError: Parameter validation failed:
Unknown parameter in connectorProfileConfig.connectorProfileProperties: "CustomConnector", must be one of: Amplitude, Datadog, Dynatrace, GoogleAnalytics, Honeycode, InforNexus, Marketo, Redshift, Salesforce, ServiceNow, Singular, Slack, Snowflake, Trendmicro, Veeva, Zendesk, SAPOData
Unknown parameter in connectorProfileConfig.connectorProfileCredentials: "CustomConnector", must be one of: Amplitude, Datadog, Dynatrace, GoogleAnalytics, Honeycode, InforNexus, Marketo, Redshift, Salesforce, ServiceNow, Singular, Slack, Snowflake, Trendmicro, Veeva, Zendesk, SAPOData
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 34, in lambda_handler
    response = client.create_connector_profile(
  File "/var/runtime/botocore/client.py", line 391, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/var/runtime/botocore/client.py", line 691, in _make_api_call
    request_dict = self._convert_to_request_dict(
  File "/var/runtime/botocore/client.py", line 739, in _convert_to_request_dict
    request_dict = self._serializer.serialize_to_request(
  File "/var/runtime/botocore/validate.py", line 360, in serialize_to_request
    raise ParamValidationError(report=report.generate_report())

Code in Lambda :

import json
import boto3

def lambda_handler(event, context):
    client = boto3.client('appflow')
  
    ### Google Ads
    response = client.create_connector_profile(
    connectorProfileName='GoogleAdsConn',
    connectorType='CustomConnector',
    # connectorLabel='GoogleAds',
    connectionMode='Public',
    connectorProfileConfig= {
      "connectorProfileProperties": {
          'CustomConnector': {
                # 'profileProperties': {
                #     'string': 'string'
                # },
                'oAuth2Properties': {
                    'tokenUrl': 'https://oauth2.googleapis.com/token',
                    'oAuth2GrantType': 'AUTHORIZATION_CODE'
                    # ,'tokenUrlCustomProperties': {
                    #     'string': 'string'
                    # }
                }
            }
            },
      "connectorProfileCredentials": {
        "CustomConnector": { 
            "authenticationType": "OAUTH2",
            "oauth2": { 
               "accessToken": "myaccesstoken",
               "clientId": "myclientid",
               "clientSecret": "myclientsecret",
              "oAuthRequest": { 
                 "authCode": "string",
                 "redirectUri": "string"
              },
               "refreshToken": "myrefreshtoken"
            }
      }
    }   
    }
   )
    return {
        'response': response
    }

Any leads on this will be appreciated.
Thanks!


Solution

  • The issue was with older boto3 version. Adding a new lambda layer with latest boto3 version(1.24.70) and updating code with profileProperties it worked seamlessly. Below is the complete working code.

    import json
    import boto3
    
    def lambda_handler(event, context):
        client = boto3.client('appflow')
        ### Google Ads
        response = client.create_connector_profile(
        connectorProfileName='GoogleAdsConnThruLambda',
        connectorType='CustomConnector',
        connectorLabel='GoogleAds',
        connectionMode='Public',
        connectorProfileConfig= {
            "connectorProfileProperties": {
                'CustomConnector': {
                    'profileProperties': {
                            'developerToken': 'developerToken',
                            'instanceUrl':'https://googleads.googleapis.com',
                            'managerID':'managerID',
                            'apiVersion':'v11'
                    },
                    'oAuth2Properties': {
                        'tokenUrl': 'https://oauth2.googleapis.com/token',
                        'oAuth2GrantType': 'AUTHORIZATION_CODE'
                        # ,'tokenUrlCustomProperties': {
                            # "string":"string"   
                        # }
                    }
                }
            },
            "connectorProfileCredentials": {
            "CustomConnector": {
                "authenticationType": "OAUTH2",
                "oauth2": {
                    "accessToken": "accessToken",
                    "clientId": "clientId",
                    "clientSecret": "clientSecret",
                    "oAuthRequest": {
                        "authCode": "authCode",
                        "redirectUri": "https://<your_region>.console.aws.amazon.com/appflow/oauth"
                    },
                    "refreshToken": "refreshToken"
                }
            }
        }
            }
            )
        
        
        return {
            'response': response
    
        }