embulk-output-redshift 0.8.5 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 92f693ebcc86c0b3e1c0e104df54225d136fe814
4
- data.tar.gz: e8a8178f1f136a4bcd675db98c8f8aebd4fbcae0
3
+ metadata.gz: 3b6636ae2a50de2f8889c15227a842a2712261f8
4
+ data.tar.gz: bb5ce05600900bea03ad46e00825aa7cdf088390
5
5
  SHA512:
6
- metadata.gz: 0be7bcfdbd1e47fe6868dc734fc5f75875f11889a1c4db206d753fd8be2ebb6735531bd7b04e7cd0f37ed2420e57bf8817cbc684e0596dc5f8f79a7f793be336
7
- data.tar.gz: f37d86eb0ae27ba418f6dc13ee56b841ee747fa212eb88b09e45cf1c1836c9b59f13f2bfeca5fe60782bda3280e3a718caebf83a0c48c185e88b888d1f6570d1
6
+ metadata.gz: 1056dc021dd92ab4486ed4d065607e910fdb551b9a10e018cb14cd65f3b56ea84e246aeeee7fd5d58eec7474a9f61762f785da51a40e7f1c2c70b35b01e70661
7
+ data.tar.gz: e13333d0458a8021a92248bb4fad097f1e5c391061fad94c9d0beb4df2b3d88c15468562f2e8e07988b38fb48be5cc4d76571b5d8f932c38b424bd3266e9f1f8
data/README.md CHANGED
@@ -74,6 +74,8 @@ Redshift output plugin for Embulk loads records to Redshift.
74
74
  - **s3_bucket**: S3 bucket name for temporary files
75
75
  - **s3_key_prefix**: S3 key prefix for temporary files (string, default: "")
76
76
  - **delete_s3_temp_file**: whether to delete temporary files uploaded on S3 (boolean, default: true)
77
+ - **copy_iam_role_name**: IAM Role for COPY credential(https://docs.aws.amazon.com/redshift/latest/dg/copy-usage_notes-access-permissions.html), if this is set, IAM Role is used instead of aws access key and aws secret access key(string, optional)
78
+ - **copy_aws_account_id**: IAM Role's account ID for multi account COPY. If this is set, the ID is used instead of authenticated user's account ID. This is enabled only if copy_iam_role_name is set.(string, optional)
77
79
  - **options**: extra connection properties (hash, default: {})
78
80
  - **retry_limit**: max retry count for database operations (integer, default: 12). When intermediate table to create already created by another process, this plugin will retry with another table name to avoid collision.
79
81
  - **retry_wait**: initial retry wait time in milliseconds (integer, default: 1000 (1 second))
@@ -83,6 +83,14 @@ public class RedshiftOutputPlugin
83
83
  @Config("ssl")
84
84
  @ConfigDefault("\"disable\"")
85
85
  public Ssl getSsl();
86
+
87
+ @Config("copy_iam_role_name")
88
+ @ConfigDefault("null")
89
+ public Optional<String> getCopyIamRoleName();
90
+
91
+ @Config("copy_aws_account_id")
92
+ @ConfigDefault("null")
93
+ public Optional<String> getCopyAwsAccountId();
86
94
  }
87
95
 
88
96
  @Override
@@ -193,6 +201,6 @@ public class RedshiftOutputPlugin
193
201
  RedshiftPluginTask t = (RedshiftPluginTask) task;
194
202
  setAWSCredentialsBackwardCompatibility(t);
195
203
  return new RedshiftCopyBatchInsert(getConnector(task, true),
196
- getAWSCredentialsProvider(t), t.getS3Bucket(), t.getS3KeyPrefix(), t.getIamUserName(), t.getDeleteS3TempFile());
204
+ getAWSCredentialsProvider(t), t.getS3Bucket(), t.getS3KeyPrefix(), t.getIamUserName(), t.getDeleteS3TempFile(), t.getCopyIamRoleName().orNull(), t.getCopyAwsAccountId().orNull());
197
205
  }
198
206
  }
@@ -36,6 +36,8 @@ import com.amazonaws.services.s3.AmazonS3Client;
36
36
  import com.amazonaws.services.s3.model.Region;
37
37
  import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient;
38
38
  import com.amazonaws.services.securitytoken.model.Credentials;
39
+ import com.amazonaws.services.securitytoken.model.GetCallerIdentityRequest;
40
+ import com.amazonaws.services.securitytoken.model.GetCallerIdentityResult;
39
41
  import com.amazonaws.services.securitytoken.model.GetFederationTokenRequest;
40
42
  import com.amazonaws.services.securitytoken.model.GetFederationTokenResult;
41
43
 
@@ -53,6 +55,7 @@ public class RedshiftCopyBatchInsert
53
55
  private final String s3RegionName;
54
56
  private final AWSSecurityTokenServiceClient sts;
55
57
  private final ExecutorService executorService;
58
+ private final String copyIamRoleARN;
56
59
 
57
60
  private RedshiftOutputConnection connection = null;
58
61
  private String copySqlBeforeFrom = null;
@@ -64,7 +67,7 @@ public class RedshiftCopyBatchInsert
64
67
 
65
68
  public RedshiftCopyBatchInsert(JdbcOutputConnector connector,
66
69
  AWSCredentialsProvider credentialsProvider, String s3BucketName, String s3KeyPrefix,
67
- String iamReaderUserName, boolean deleteS3TempFile) throws IOException, SQLException
70
+ String iamReaderUserName, boolean deleteS3TempFile, String copyIamRoleName, String copyAwsAccountId) throws IOException, SQLException
68
71
  {
69
72
  super();
70
73
  this.connector = connector;
@@ -94,6 +97,20 @@ public class RedshiftCopyBatchInsert
94
97
  + " IAM user needs \"s3:GetBucketLocation\" permission if Redshift region and S3 region are different.");
95
98
  }
96
99
  this.s3RegionName = s3RegionName;
100
+
101
+ if (copyIamRoleName != null) {
102
+ String accountId = null;
103
+ if (copyAwsAccountId != null) {
104
+ accountId = copyAwsAccountId;
105
+ } else {
106
+ GetCallerIdentityRequest request = new GetCallerIdentityRequest();
107
+ GetCallerIdentityResult response = this.sts.getCallerIdentity(request);
108
+ accountId = response.getAccount();
109
+ }
110
+ this.copyIamRoleARN = "arn:aws:iam::" + accountId + ":role/" + copyIamRoleName;
111
+ } else {
112
+ this.copyIamRoleARN = null;
113
+ }
97
114
  }
98
115
 
99
116
  @Override
@@ -305,13 +322,18 @@ public class RedshiftCopyBatchInsert
305
322
  sb.append("/");
306
323
  sb.append(s3KeyName);
307
324
  sb.append("' CREDENTIALS '");
308
- sb.append("aws_access_key_id=");
309
- sb.append(creds.getAWSAccessKeyId());
310
- sb.append(";aws_secret_access_key=");
311
- sb.append(creds.getAWSSecretKey());
312
- if (creds.getSessionToken() != null) {
313
- sb.append(";token=");
314
- sb.append(creds.getSessionToken());
325
+ if (copyIamRoleARN != null) {
326
+ sb.append("aws_iam_role=");
327
+ sb.append(copyIamRoleARN);
328
+ } else {
329
+ sb.append("aws_access_key_id=");
330
+ sb.append(creds.getAWSAccessKeyId());
331
+ sb.append(";aws_secret_access_key=");
332
+ sb.append(creds.getAWSSecretKey());
333
+ if (creds.getSessionToken() != null) {
334
+ sb.append(";token=");
335
+ sb.append(creds.getSessionToken());
336
+ }
315
337
  }
316
338
  sb.append("' ");
317
339
  if (s3RegionName != null) {
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embulk-output-redshift
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.5
4
+ version: 0.8.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-05-10 00:00:00.000000000 Z
11
+ date: 2019-08-22 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Inserts or updates records to a table.
14
14
  email:
@@ -25,9 +25,9 @@ files:
25
25
  - classpath/aws-java-sdk-sts-1.11.523.jar
26
26
  - classpath/commons-codec-1.10.jar
27
27
  - classpath/commons-logging-1.2.jar
28
- - classpath/embulk-output-jdbc-0.8.5.jar
29
- - classpath/embulk-output-postgresql-0.8.5.jar
30
- - classpath/embulk-output-redshift-0.8.5.jar
28
+ - classpath/embulk-output-jdbc-0.8.6.jar
29
+ - classpath/embulk-output-postgresql-0.8.6.jar
30
+ - classpath/embulk-output-redshift-0.8.6.jar
31
31
  - classpath/embulk-util-aws-credentials-0.2.21.jar
32
32
  - classpath/httpclient-4.5.5.jar
33
33
  - classpath/httpcore-4.4.9.jar