registerResource method

Future<void> registerResource({
  1. required String resourceArn,
  2. String? roleArn,
  3. bool? useServiceLinkedRole,
})

Registers the resource as managed by the Data Catalog.

To add or update data, Lake Formation needs read/write access to the chosen Amazon S3 path. Choose a role that you know has permission to do this, or choose the AWSServiceRoleForLakeFormationDataAccess service-linked role. When you register the first Amazon S3 path, the service-linked role and a new inline policy are created on your behalf. Lake Formation adds the first path to the inline policy and attaches it to the service-linked role. When you register subsequent paths, Lake Formation adds the path to the existing policy.

The following request registers a new location and gives AWS Lake Formation permission to use the service-linked role to access that location.

ResourceArn = arn:aws:s3:::my-bucket UseServiceLinkedRole = true

If UseServiceLinkedRole is not set to true, you must provide or set the RoleArn:

arn:aws:iam::12345:role/my-data-access-role

May throw InvalidInputException. May throw InternalServiceException. May throw OperationTimeoutException. May throw AlreadyExistsException.

Parameter resourceArn : The Amazon Resource Name (ARN) of the resource that you want to register.

Parameter roleArn : The identifier for the role that registers the resource.

Parameter useServiceLinkedRole : Designates an AWS Identity and Access Management (IAM) service-linked role by registering this role with the Data Catalog. A service-linked role is a unique type of IAM role that is linked directly to Lake Formation.

For more information, see Using Service-Linked Roles for Lake Formation.

Implementation

Future<void> registerResource({
  required String resourceArn,
  String? roleArn,
  bool? useServiceLinkedRole,
}) async {
  ArgumentError.checkNotNull(resourceArn, 'resourceArn');
  final headers = <String, String>{
    'Content-Type': 'application/x-amz-json-1.1',
    'X-Amz-Target': 'AWSLakeFormation.RegisterResource'
  };
  await _protocol.send(
    method: 'POST',
    requestUri: '/',
    exceptionFnMap: _exceptionFns,
    // TODO queryParams
    headers: headers,
    payload: {
      'ResourceArn': resourceArn,
      if (roleArn != null) 'RoleArn': roleArn,
      if (useServiceLinkedRole != null)
        'UseServiceLinkedRole': useServiceLinkedRole,
    },
  );
}