embulk-output-redshift 0.6.3 → 0.6.4

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: 3deb8e2a10b3e5c04d32c8a286b77a7c20364fd3
4
- data.tar.gz: 6c0fbe7df77c8d10c0cdc486984dd20e05dbc55e
3
+ metadata.gz: 4f9b1303b4c1343a10b77b15b07fca1536c919ac
4
+ data.tar.gz: 3fe7932bc6a6a3d0125c88e9e60c8e9ac05cb4d6
5
5
  SHA512:
6
- metadata.gz: 134476b326c5b3abfb332f92fece008a6c0dde1164ebcf8b9598e459d79302b41b869f5a4177c330cd12c105cae7585990df12a6c796852c77478191b7d31985
7
- data.tar.gz: 5b443bb67b4c079e64aa4966a6c2e27bb07c89f30ae042a442d9b287385fa20fb40f45149f2a09b2ee73a193e930c8d355bacc2313dcd2f392d37b4d2358d132
6
+ metadata.gz: e06bf310d402011178bb190ae8ad2240ad97ddebba96e54f681e49890e52de6cb5175c6a78152bb124a70159a345a21ad5aa67745e145a34116598736f4e28bf
7
+ data.tar.gz: 434386a4927d5f7df605142e93c5870ec3c7b3194bac5c7d3b0b56161c51beec09f44480510dcbe290412a3846c125874caa62b95a9651ac1631738a457eaad0
data/README.md CHANGED
@@ -20,7 +20,7 @@ Redshift output plugins for Embulk loads records to Redshift.
20
20
  - **table**: destination table name (string, required)
21
21
  - **access_key_id**: access key id for AWS
22
22
  - **secret_access_key**: secret access key for AWS
23
- - **iam_user_name**: IAM user name for uploading temporary files to S3. The user should have permissions of `s3:GetObject`, `s3:PutObject`, `s3:DeleteObject`, , `s3:ListBucket` and `sts:GetFederationToken`. (string, default: "", but we strongly recommend that you use IAM user for security reasons. see below.)
23
+ - **iam_user_name**: IAM user name for uploading temporary files to S3. The user should have permissions of `s3:GetObject`, `s3:PutObject`, `s3:DeleteObject`, `s3:ListBucket` and `sts:GetFederationToken`. And furthermore, the user should have permission of `s3:GetBucketLocation` if Redshift region and S3 bucket region are different. (string, default: "", but we strongly recommend that you use IAM user for security reasons. see below.)
24
24
  - **s3_bucket**: S3 bucket name for temporary files
25
25
  - **s3_key_prefix**: S3 key prefix for temporary files (string, default:"")
26
26
  - **options**: extra connection properties (hash, default: {})
@@ -22,6 +22,7 @@ import org.embulk.output.postgresql.AbstractPostgreSQLCopyBatchInsert;
22
22
  import org.embulk.spi.Exec;
23
23
  import org.slf4j.Logger;
24
24
 
25
+ import com.amazonaws.AmazonClientException;
25
26
  import com.amazonaws.auth.AWSCredentialsProvider;
26
27
  import com.amazonaws.auth.BasicSessionCredentials;
27
28
  import com.amazonaws.auth.policy.Policy;
@@ -30,6 +31,7 @@ import com.amazonaws.auth.policy.Statement;
30
31
  import com.amazonaws.auth.policy.Statement.Effect;
31
32
  import com.amazonaws.auth.policy.actions.S3Actions;
32
33
  import com.amazonaws.services.s3.AmazonS3Client;
34
+ import com.amazonaws.services.s3.model.Region;
33
35
  import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClient;
34
36
  import com.amazonaws.services.securitytoken.model.Credentials;
35
37
  import com.amazonaws.services.securitytoken.model.GetFederationTokenRequest;
@@ -45,6 +47,7 @@ public class RedshiftCopyBatchInsert
45
47
  private final String iamReaderUserName;
46
48
  private final AWSCredentialsProvider credentialsProvider;
47
49
  private final AmazonS3Client s3;
50
+ private final String s3RegionName;
48
51
  private final AWSSecurityTokenServiceClient sts;
49
52
  private final ExecutorService executorService;
50
53
 
@@ -72,9 +75,21 @@ public class RedshiftCopyBatchInsert
72
75
  this.credentialsProvider = credentialsProvider;
73
76
  this.s3 = new AmazonS3Client(credentialsProvider); // TODO options
74
77
  this.sts = new AWSSecurityTokenServiceClient(credentialsProvider); // options
75
-
76
78
  this.executorService = Executors.newCachedThreadPool();
77
79
  this.uploadAndCopyFutures = new ArrayList<Future<Void>>();
80
+
81
+ String s3RegionName = null;
82
+ try {
83
+ String s3Location = s3.getBucketLocation(s3BucketName);
84
+ Region s3Region = Region.fromValue(s3Location);
85
+ com.amazonaws.regions.Region region = s3Region.toAWSRegion();
86
+ s3RegionName = region.getName();
87
+ logger.info("S3 region for bucket '" + s3BucketName + "' is '" + s3RegionName + "'.");
88
+ } catch (AmazonClientException | IllegalArgumentException e) {
89
+ logger.warn("Cannot get S3 region for bucket '" + s3BucketName + "'."
90
+ + " IAM user needs \"s3:GetBucketLocation\" permission if Redshift region and S3 region are different.");
91
+ }
92
+ this.s3RegionName = s3RegionName;
78
93
  }
79
94
 
80
95
  @Override
@@ -274,6 +289,12 @@ public class RedshiftCopyBatchInsert
274
289
  sb.append(creds.getSessionToken());
275
290
  }
276
291
  sb.append("' ");
292
+ if (s3RegionName != null) {
293
+ sb.append("REGION '");
294
+ sb.append(s3RegionName);
295
+ sb.append("' ");
296
+ }
297
+
277
298
  sb.append(COPY_AFTER_FROM);
278
299
  return sb.toString();
279
300
  }
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.6.3
4
+ version: 0.6.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sadayuki Furuhashi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-08-18 00:00:00.000000000 Z
11
+ date: 2016-09-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Inserts or updates records to a table.
14
14
  email:
@@ -19,24 +19,24 @@ extra_rdoc_files: []
19
19
  files:
20
20
  - README.md
21
21
  - build.gradle
22
- - lib/embulk/output/redshift.rb
23
- - src/main/java/org/embulk/output/RedshiftOutputPlugin.java
24
- - src/main/java/org/embulk/output/redshift/RedshiftCopyBatchInsert.java
25
- - src/main/java/org/embulk/output/redshift/RedshiftOutputConnection.java
26
- - src/main/java/org/embulk/output/redshift/RedshiftOutputConnector.java
27
- - src/main/java/org/embulk/output/redshift/Ssl.java
28
22
  - classpath/aws-java-sdk-core-1.10.33.jar
29
23
  - classpath/aws-java-sdk-kms-1.10.33.jar
30
24
  - classpath/aws-java-sdk-s3-1.10.33.jar
31
25
  - classpath/aws-java-sdk-sts-1.10.33.jar
32
26
  - classpath/commons-codec-1.6.jar
33
27
  - classpath/commons-logging-1.1.3.jar
34
- - classpath/embulk-output-jdbc-0.6.3.jar
35
- - classpath/embulk-output-postgresql-0.6.3.jar
36
- - classpath/embulk-output-redshift-0.6.3.jar
28
+ - classpath/embulk-output-jdbc-0.6.4.jar
29
+ - classpath/embulk-output-postgresql-0.6.4.jar
30
+ - classpath/embulk-output-redshift-0.6.4.jar
37
31
  - classpath/httpclient-4.3.6.jar
38
32
  - classpath/httpcore-4.3.3.jar
39
33
  - classpath/postgresql-9.4-1205-jdbc41.jar
34
+ - lib/embulk/output/redshift.rb
35
+ - src/main/java/org/embulk/output/RedshiftOutputPlugin.java
36
+ - src/main/java/org/embulk/output/redshift/RedshiftCopyBatchInsert.java
37
+ - src/main/java/org/embulk/output/redshift/RedshiftOutputConnection.java
38
+ - src/main/java/org/embulk/output/redshift/RedshiftOutputConnector.java
39
+ - src/main/java/org/embulk/output/redshift/Ssl.java
40
40
  homepage: https://github.com/embulk/embulk-output-jdbc
41
41
  licenses:
42
42
  - Apache 2.0
@@ -47,17 +47,17 @@ require_paths:
47
47
  - lib
48
48
  required_ruby_version: !ruby/object:Gem::Requirement
49
49
  requirements:
50
- - - '>='
50
+ - - ">="
51
51
  - !ruby/object:Gem::Version
52
52
  version: '0'
53
53
  required_rubygems_version: !ruby/object:Gem::Requirement
54
54
  requirements:
55
- - - '>='
55
+ - - ">="
56
56
  - !ruby/object:Gem::Version
57
57
  version: '0'
58
58
  requirements: []
59
59
  rubyforge_project:
60
- rubygems_version: 2.1.9
60
+ rubygems_version: 2.4.8
61
61
  signing_key:
62
62
  specification_version: 4
63
63
  summary: JDBC output plugin for Embulk