@@ -106,8 +106,8 @@ const SnowflakeToGenericType: Record<string, GenericDataBaseType> = {
106106interface SnowflakeDriverExportAWS {
107107 bucketType : 's3' ,
108108 bucketName : string ,
109- keyId : string ,
110- secretKey : string ,
109+ keyId ? : string ,
110+ secretKey ? : string ,
111111 region : string ,
112112 integrationName ?: string ,
113113}
@@ -328,14 +328,17 @@ export class SnowflakeDriver extends BaseDriver implements DriverInterface {
328328 if ( bucketType === 's3' ) {
329329 // integrationName is optional for s3
330330 const integrationName = getEnv ( 'dbExportIntegration' , { dataSource } ) ;
331+ // keyId and secretKey are optional for s3 if IAM role is used
332+ const keyId = getEnv ( 'dbExportBucketAwsKey' , { dataSource } ) ;
333+ const secretKey = getEnv ( 'dbExportBucketAwsSecret' , { dataSource } ) ;
331334
332335 return {
333336 bucketType,
334337 bucketName : getEnv ( 'dbExportBucket' , { dataSource } ) ,
335- keyId : getEnv ( 'dbExportBucketAwsKey' , { dataSource } ) ,
336- secretKey : getEnv ( 'dbExportBucketAwsSecret' , { dataSource } ) ,
337338 region : getEnv ( 'dbExportBucketAwsRegion' , { dataSource } ) ,
338339 ...( integrationName !== undefined && { integrationName } ) ,
340+ ...( keyId !== undefined && { keyId } ) ,
341+ ...( secretKey !== undefined && { secretKey } ) ,
339342 } ;
340343 }
341344
@@ -387,6 +390,23 @@ export class SnowflakeDriver extends BaseDriver implements DriverInterface {
387390 ) ;
388391 }
389392
393+ private getRequiredExportBucketKeys (
394+ exportBucket : SnowflakeDriverExportBucket ,
395+ emptyKeys : string [ ]
396+ ) : string [ ] {
397+ if ( exportBucket . bucketType === 's3' ) {
398+ const s3Config = exportBucket as SnowflakeDriverExportAWS ;
399+ const hasCredentials = s3Config . keyId && s3Config . secretKey ;
400+ const hasIntegration = s3Config . integrationName ;
401+
402+ if ( ! hasCredentials && ! hasIntegration ) {
403+ return emptyKeys . filter ( key => key !== 'keyId' && key !== 'secretKey' ) ;
404+ }
405+ }
406+
407+ return emptyKeys ;
408+ }
409+
390410 protected getExportBucket (
391411 dataSource : string ,
392412 ) : SnowflakeDriverExportBucket | undefined {
@@ -402,9 +422,11 @@ export class SnowflakeDriver extends BaseDriver implements DriverInterface {
402422
403423 const emptyKeys = Object . keys ( exportBucket )
404424 . filter ( ( key : string ) => exportBucket [ < keyof SnowflakeDriverExportBucket > key ] === undefined ) ;
405- if ( emptyKeys . length ) {
425+ const keysToValidate = this . getRequiredExportBucketKeys ( exportBucket , emptyKeys ) ;
426+
427+ if ( keysToValidate . length ) {
406428 throw new Error (
407- `Unsupported configuration exportBucket, some configuration keys are empty: ${ emptyKeys . join ( ',' ) } `
429+ `Unsupported configuration exportBucket, some configuration keys are empty: ${ keysToValidate . join ( ',' ) } `
408430 ) ;
409431 }
410432
0 commit comments