embulk-output-redshift 0.7.1 → 0.7.2

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: 47ca8a15eaed456d7a006c1dfdb43b2ae85b9013
4
- data.tar.gz: 1fa61b84e89e32e81c7fb748d8d2edcbb4bf4481
3
+ metadata.gz: f328186471e1367510fec732ad9747551820ac5a
4
+ data.tar.gz: 7627fe90dd396daf16b047f85f5d2084a5a91944
5
5
  SHA512:
6
- metadata.gz: b9652025ca46d67558454940362e804477d7cfa1a93bd5f19accc8a42b6bbdb11f2930bf514398b51c3bd68d9053e6258aa80badff2dd0b01329af25de6d1f12
7
- data.tar.gz: 503904556c128353ad4ef366f7b0ed31300a2f9ea5c93eb0688c418a7c08a266d2ed48e65e6a93dce4fcb3f78cfb78e29e196b2241563a949a8863100a70bb34
6
+ metadata.gz: 5c8671c622847596ce3b703b32a6e4c0a1a5d28c8f6de3c941293cbcd9a4f2faba199f2a320cc3f6110b86b9651d0c6524d5eae5c7f03accc49db3d4ed89360f
7
+ data.tar.gz: bb2d580607179e5ab0cdc402af4fc1e1ba11d463a905bf11bf61253de1d2d224e79029fda08fc0609773a3dfc3eaceb3b2a8f000f788bea2cd4c3f7fcae82499
data/README.md CHANGED
@@ -18,8 +18,47 @@ Redshift output plugin for Embulk loads records to Redshift.
18
18
  - **database**: destination database name (string, required)
19
19
  - **schema**: destination schema name (string, default: "public")
20
20
  - **table**: destination table name (string, required)
21
- - **access_key_id**: access key id for AWS
22
- - **secret_access_key**: secret access key for AWS
21
+ - **access_key_id**: deprecated. `aws_access_key_id` should be used (see "basic" in `aws_auth_method`).
22
+ - **secret_access_key**: deprecated. `aws_secret_access_key` should be used (see "basic" in `aws_auth_method`).
23
+ - **aws_auth_method**: name of mechanism to authenticate requests ("basic", "env", "instance", "profile", "properties", "anonymous", or "session". default: "basic")
24
+
25
+ - "basic": uses `access_key_id` and `secret_access_key` to authenticate.
26
+
27
+ - **aws_access_key_id**: AWS access key ID (string, required)
28
+
29
+ - **aws_secret_access_key**: AWS secret access key (string, required)
30
+
31
+ - "env": uses `AWS_ACCESS_KEY_ID` (or `AWS_ACCESS_KEY`) and `AWS_SECRET_KEY` (or `AWS_SECRET_ACCESS_KEY`) environment variables.
32
+
33
+ - "instance": uses EC2 instance profile.
34
+
35
+ - "profile": uses credentials written in a file. Format of the file is as following, where `[...]` is a name of profile.
36
+
37
+ - **aws_profile_file**: path to a profiles file. (string, default: given by `AWS_CREDENTIAL_PROFILES_FILE` environment varialbe, or ~/.aws/credentials).
38
+
39
+ - **aws_profile_name**: name of a profile. (string, default: `"default"`)
40
+
41
+ ```
42
+ [default]
43
+ aws_access_key_id=YOUR_ACCESS_KEY_ID
44
+ aws_secret_access_key=YOUR_SECRET_ACCESS_KEY
45
+
46
+ [profile2]
47
+ ...
48
+ ```
49
+
50
+ - "properties": uses `aws.accessKeyId` and `aws.secretKey` Java system properties.
51
+
52
+ - "anonymous": uses anonymous access. This authentication method can access only public files.
53
+
54
+ - "session": uses temporary-generated `access_key_id`, `secret_access_key` and `session_token`.
55
+
56
+ - **aws_access_key_id**: AWS access key ID (string, required)
57
+
58
+ - **aws_secret_access_key**: AWS secret access key (string, required)
59
+
60
+ - **aws_session_token**: session token (string, required)
61
+
23
62
  - **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
63
  - **s3_bucket**: S3 bucket name for temporary files
25
64
  - **s3_key_prefix**: S3 key prefix for temporary files (string, default:"")
@@ -89,8 +128,8 @@ out:
89
128
  password: ""
90
129
  database: my_database
91
130
  table: my_table
92
- access_key_id: ABCXYZ123ABCXYZ123
93
- secret_access_key: AbCxYz123aBcXyZ123
131
+ aws_access_key_id: ABCXYZ123ABCXYZ123
132
+ aws_secret_access_key: AbCxYz123aBcXyZ123
94
133
  iam_user_name: my-s3-read-only
95
134
  s3_bucket: my-redshift-transfer-bucket
96
135
  s3_key_prefix: temp/redshift
@@ -108,8 +147,8 @@ out:
108
147
  password: ""
109
148
  database: my_database
110
149
  table: my_table
111
- access_key_id: ABCXYZ123ABCXYZ123
112
- secret_access_key: AbCxYz123aBcXyZ123
150
+ aws_access_key_id: ABCXYZ123ABCXYZ123
151
+ aws_secret_access_key: AbCxYz123aBcXyZ123
113
152
  iam_user_name: my-s3-read-only
114
153
  s3_bucket: my-redshift-transfer-bucket
115
154
  s3_key_prefix: temp/redshift
@@ -122,6 +161,38 @@ out:
122
161
  my_col_5: {type: 'DECIMAL(18,9)', value_type: pass}
123
162
  ```
124
163
 
164
+ To use IAM Role:
165
+
166
+ ```yaml
167
+ out:
168
+ type: redshift
169
+ host: myinstance.us-west-2.redshift.amazonaws.com
170
+ user: pg
171
+ password: ""
172
+ database: my_database
173
+ table: my_table
174
+ s3_bucket: my-redshift-transfer-bucket
175
+ s3_key_prefix: temp/redshift
176
+ mode: insert
177
+ aws_auth_method: instance
178
+ ```
179
+
180
+ To use AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment variables:
181
+
182
+ ```yaml
183
+ out:
184
+ type: redshift
185
+ host: myinstance.us-west-2.redshift.amazonaws.com
186
+ user: pg
187
+ password: ""
188
+ database: my_database
189
+ table: my_table
190
+ s3_bucket: my-redshift-transfer-bucket
191
+ s3_key_prefix: temp/redshift
192
+ mode: insert
193
+ aws_auth_method: env
194
+ ```
195
+
125
196
  ### Build
126
197
 
127
198
  ```
data/build.gradle CHANGED
@@ -4,6 +4,7 @@ dependencies {
4
4
 
5
5
  compile "com.amazonaws:aws-java-sdk-s3:1.10.33"
6
6
  compile "com.amazonaws:aws-java-sdk-sts:1.10.33"
7
+ compile 'org.embulk.input.s3:embulk-util-aws-credentials:0.2.8'
7
8
 
8
9
  testCompile project(':embulk-output-jdbc').sourceSets.test.output
9
10
  }
Binary file
Binary file
Binary file
@@ -1,6 +1,5 @@
1
1
  package org.embulk.output;
2
2
 
3
- import java.util.List;
4
3
  import java.util.Properties;
5
4
  import java.io.IOException;
6
5
  import java.sql.SQLException;
@@ -9,10 +8,10 @@ import org.embulk.output.jdbc.MergeConfig;
9
8
  import org.slf4j.Logger;
10
9
  import com.google.common.base.Optional;
11
10
  import com.google.common.collect.ImmutableSet;
12
- import com.amazonaws.auth.AWSCredentials;
13
11
  import com.amazonaws.auth.AWSCredentialsProvider;
14
- import com.amazonaws.auth.BasicAWSCredentials;
15
12
  import org.embulk.spi.Exec;
13
+ import org.embulk.util.aws.credentials.AwsCredentials;
14
+ import org.embulk.util.aws.credentials.AwsCredentialsTaskWithPrefix;
16
15
  import org.embulk.config.Config;
17
16
  import org.embulk.config.ConfigDefault;
18
17
  import org.embulk.output.jdbc.AbstractJdbcOutputPlugin;
@@ -26,7 +25,7 @@ public class RedshiftOutputPlugin
26
25
  {
27
26
  private final Logger logger = Exec.getLogger(RedshiftOutputPlugin.class);
28
27
 
29
- public interface RedshiftPluginTask extends PluginTask
28
+ public interface RedshiftPluginTask extends AwsCredentialsTaskWithPrefix, PluginTask
30
29
  {
31
30
  @Config("host")
32
31
  public String getHost();
@@ -49,11 +48,15 @@ public class RedshiftOutputPlugin
49
48
  @ConfigDefault("\"public\"")
50
49
  public String getSchema();
51
50
 
51
+ // for backward compatibility
52
52
  @Config("access_key_id")
53
- public String getAccessKeyId();
53
+ @ConfigDefault("null")
54
+ Optional<String> getOldAccessKeyId();
54
55
 
56
+ // for backward compatibility
55
57
  @Config("secret_access_key")
56
- public String getSecretAccessKey();
58
+ @ConfigDefault("null")
59
+ Optional<String> getOldSecretAccessKey();
57
60
 
58
61
  @Config("iam_user_name")
59
62
  @ConfigDefault("\"\"")
@@ -132,20 +135,21 @@ public class RedshiftOutputPlugin
132
135
 
133
136
  private static AWSCredentialsProvider getAWSCredentialsProvider(RedshiftPluginTask task)
134
137
  {
135
- final AWSCredentials creds = new BasicAWSCredentials(
136
- task.getAccessKeyId(), task.getSecretAccessKey());
137
- return new AWSCredentialsProvider() {
138
- @Override
139
- public AWSCredentials getCredentials()
140
- {
141
- return creds;
142
- }
138
+ return AwsCredentials.getAWSCredentialsProvider(task);
139
+ }
143
140
 
144
- @Override
145
- public void refresh()
146
- {
141
+ private void setAWSCredentialsBackwardCompatibility(RedshiftPluginTask t)
142
+ {
143
+ if ("basic".equals(t.getAuthMethod())) {
144
+ if (t.getOldAccessKeyId().isPresent() && !t.getAccessKeyId().isPresent()) {
145
+ logger.warn("'access_key_id' is deprecated. Please use 'aws_access_key_id'.");
146
+ t.setAccessKeyId(t.getOldAccessKeyId());
147
147
  }
148
- };
148
+ if (t.getOldSecretAccessKey().isPresent() && !t.getSecretAccessKey().isPresent()) {
149
+ logger.warn("'secret_access_key' is deprecated. Please use 'aws_secret_access_key'.");
150
+ t.setSecretAccessKey(t.getOldSecretAccessKey());
151
+ }
152
+ }
149
153
  }
150
154
 
151
155
  @Override
@@ -155,6 +159,7 @@ public class RedshiftOutputPlugin
155
159
  throw new UnsupportedOperationException("Redshift output plugin doesn't support 'merge_direct' mode. Use 'merge' mode instead.");
156
160
  }
157
161
  RedshiftPluginTask t = (RedshiftPluginTask) task;
162
+ setAWSCredentialsBackwardCompatibility(t);
158
163
  return new RedshiftCopyBatchInsert(getConnector(task, true),
159
164
  getAWSCredentialsProvider(t), t.getS3Bucket(), t.getS3KeyPrefix(), t.getIamUserName());
160
165
  }
@@ -194,6 +194,10 @@ public class RedshiftCopyBatchInsert
194
194
  c.getSecretAccessKey(),
195
195
  c.getSessionToken());
196
196
  } else {
197
+ if (credentialsProvider.getCredentials() instanceof BasicSessionCredentials) {
198
+ BasicSessionCredentials credentials = (BasicSessionCredentials) credentialsProvider.getCredentials();
199
+ return credentials;
200
+ }
197
201
  return new BasicSessionCredentials(credentialsProvider.getCredentials().getAWSAccessKeyId(),
198
202
  credentialsProvider.getCredentials().getAWSSecretKey(), null);
199
203
  }
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.7.1
4
+ version: 0.7.2
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-11-25 00:00:00.000000000 Z
11
+ date: 2016-12-19 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Inserts or updates records to a table.
14
14
  email:
@@ -25,11 +25,15 @@ files:
25
25
  - classpath/aws-java-sdk-sts-1.10.33.jar
26
26
  - classpath/commons-codec-1.6.jar
27
27
  - classpath/commons-logging-1.1.3.jar
28
- - classpath/embulk-output-jdbc-0.7.1.jar
29
- - classpath/embulk-output-postgresql-0.7.1.jar
30
- - classpath/embulk-output-redshift-0.7.1.jar
28
+ - classpath/embulk-core-0.8.9.jar
29
+ - classpath/embulk-output-jdbc-0.7.2.jar
30
+ - classpath/embulk-output-postgresql-0.7.2.jar
31
+ - classpath/embulk-output-redshift-0.7.2.jar
32
+ - classpath/embulk-util-aws-credentials-0.2.8.jar
31
33
  - classpath/httpclient-4.3.6.jar
32
34
  - classpath/httpcore-4.3.3.jar
35
+ - classpath/jcl-over-slf4j-1.7.12.jar
36
+ - classpath/msgpack-core-0.8.7.jar
33
37
  - classpath/postgresql-9.4-1205-jdbc41.jar
34
38
  - lib/embulk/output/redshift.rb
35
39
  - src/main/java/org/embulk/output/RedshiftOutputPlugin.java