embulk-output-redshift 0.7.1 → 0.7.2

Sign up to get free protection for your applications and to get access to all the features.
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