You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ac...@apache.org on 2017/11/29 13:23:35 UTC
[camel] branch master updated: CAMEL-12049 - Camel-AWS: Add update
function operation to AWS lambda component
This is an automated email from the ASF dual-hosted git repository.
acosentino pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/master by this push:
new 2f32a05 CAMEL-12049 - Camel-AWS: Add update function operation to AWS lambda component
2f32a05 is described below
commit 2f32a05705a6995de5f1e9276c4ba26a22632bd2
Author: Andrea Cosentino <an...@gmail.com>
AuthorDate: Wed Nov 29 14:20:09 2017 +0100
CAMEL-12049 - Camel-AWS: Add update function operation to AWS lambda component
---
.../component/aws/lambda/LambdaOperations.java | 3 +-
.../camel/component/aws/lambda/LambdaProducer.java | 68 ++++++++++++++++++++++
.../aws/lambda/AmazonLambdaClientMock.java | 13 ++++-
.../component/aws/lambda/LambdaOperationsTest.java | 4 +-
.../component/aws/lambda/LambdaProducerTest.java | 31 ++++++++++
5 files changed, 116 insertions(+), 3 deletions(-)
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaOperations.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaOperations.java
index 0feccb7..1d24bfe 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaOperations.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaOperations.java
@@ -22,5 +22,6 @@ public enum LambdaOperations {
getFunction,
createFunction,
deleteFunction,
- invokeFunction
+ invokeFunction,
+ updateFunction
}
diff --git a/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java b/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java
index 226c08f..9a5e6fb 100644
--- a/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java
+++ b/components/camel-aws/src/main/java/org/apache/camel/component/aws/lambda/LambdaProducer.java
@@ -38,6 +38,8 @@ import com.amazonaws.services.lambda.model.InvokeRequest;
import com.amazonaws.services.lambda.model.InvokeResult;
import com.amazonaws.services.lambda.model.ListFunctionsResult;
import com.amazonaws.services.lambda.model.TracingConfig;
+import com.amazonaws.services.lambda.model.UpdateFunctionCodeRequest;
+import com.amazonaws.services.lambda.model.UpdateFunctionCodeResult;
import com.amazonaws.services.lambda.model.VpcConfig;
import com.amazonaws.util.IOUtils;
import org.apache.camel.Endpoint;
@@ -81,6 +83,9 @@ public class LambdaProducer extends DefaultProducer {
case listFunctions:
listFunctions(getEndpoint().getAwsLambdaClient(), exchange);
break;
+ case updateFunction:
+ updateFunction(getEndpoint().getAwsLambdaClient(), exchange);
+ break;
default:
throw new IllegalArgumentException("Unsupported operation");
}
@@ -272,6 +277,69 @@ public class LambdaProducer extends DefaultProducer {
message.setBody(result);
}
+ private void updateFunction(AWSLambda lambdaClient, Exchange exchange) throws Exception {
+ UpdateFunctionCodeResult result;
+
+ try {
+ UpdateFunctionCodeRequest request = new UpdateFunctionCodeRequest()
+ .withFunctionName(getConfiguration().getFunction());
+
+ FunctionCode functionCode = new FunctionCode();
+ if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(LambdaConstants.S3_BUCKET))) {
+ String s3Bucket = exchange.getIn().getHeader(LambdaConstants.S3_BUCKET, String.class);
+ functionCode.withS3Bucket(s3Bucket);
+ }
+
+ if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(LambdaConstants.S3_KEY))) {
+ String s3Key = exchange.getIn().getHeader(LambdaConstants.S3_KEY, String.class);
+ functionCode.withS3Key(s3Key);
+ }
+
+ if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(LambdaConstants.S3_OBJECT_VERSION))) {
+ String s3ObjectVersion = exchange.getIn().getHeader(LambdaConstants.S3_OBJECT_VERSION, String.class);
+ functionCode.withS3ObjectVersion(s3ObjectVersion);
+ }
+
+ if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(LambdaConstants.ZIP_FILE))) {
+ String zipFile = exchange.getIn().getHeader(LambdaConstants.ZIP_FILE, String.class);
+ File fileLocalPath = new File(zipFile);
+ FileInputStream inputStream = new FileInputStream(fileLocalPath);
+ functionCode.withZipFile(ByteBuffer.wrap(IOUtils.toByteArray(inputStream)));
+ }
+ if (ObjectHelper.isNotEmpty(exchange.getIn().getBody())) {
+ functionCode.withZipFile(exchange.getIn().getBody(ByteBuffer.class));
+ }
+
+ if (ObjectHelper.isEmpty(exchange.getIn().getBody()) && (ObjectHelper.isEmpty(exchange.getIn().getHeader(LambdaConstants.S3_BUCKET)) && ObjectHelper.isEmpty(exchange.getIn().getHeader(LambdaConstants.S3_KEY)))) {
+ throw new IllegalArgumentException("At least S3 bucket/S3 key or zip file must be specified");
+ }
+
+ if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(LambdaConstants.PUBLISH))) {
+ Boolean publish = exchange.getIn().getHeader(LambdaConstants.PUBLISH, Boolean.class);
+ request.withPublish(publish);
+ }
+
+ if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(LambdaConstants.SDK_CLIENT_EXECUTION_TIMEOUT))) {
+ Integer timeout = exchange.getIn().getHeader(LambdaConstants.SDK_CLIENT_EXECUTION_TIMEOUT, Integer.class);
+ request.withSdkClientExecutionTimeout(timeout);
+ }
+
+ if (ObjectHelper.isNotEmpty(exchange.getIn().getHeader(LambdaConstants.SDK_REQUEST_TIMEOUT))) {
+ Integer timeout = exchange.getIn().getHeader(LambdaConstants.SDK_REQUEST_TIMEOUT, Integer.class);
+ request.withSdkRequestTimeout(timeout);
+ }
+
+ result = lambdaClient.updateFunctionCode(request);
+
+ } catch (AmazonServiceException ase) {
+ LOG.trace("updateFunction command returned the error code {}", ase.getErrorCode());
+ throw ase;
+ }
+
+ Message message = getMessageForResponse(exchange);
+ message.setBody(result);
+ }
+
private LambdaOperations determineOperation(Exchange exchange) {
LambdaOperations operation = exchange.getIn().getHeader(LambdaConstants.OPERATION, LambdaOperations.class);
if (operation == null) {
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java
index 6b07bda..d9ec9c6 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/AmazonLambdaClientMock.java
@@ -309,7 +309,18 @@ public class AmazonLambdaClientMock extends AWSLambdaClient {
@Override
public UpdateFunctionCodeResult updateFunctionCode(UpdateFunctionCodeRequest updateFunctionCodeRequest) {
- throw new UnsupportedOperationException();
+ UpdateFunctionCodeResult result = new UpdateFunctionCodeResult();
+
+ result.setFunctionName(updateFunctionCodeRequest.getFunctionName());
+ result.setFunctionArn("arn:aws:lambda:eu-central-1:643534317684:function:" + updateFunctionCodeRequest.getFunctionName());
+ result.setCodeSize(340L);
+ result.setCodeSha256("PKt5ygvZ6G8vWJASlWIypsBmKzAdmRrvTO");
+ result.setMemorySize(128);
+ result.setTimeout(3);
+ result.setLastModified(DateTime.now().toString());
+ result.setVersion("$LATEST");
+ result.setTracingConfig(new TracingConfigResponse().withMode(TracingMode.PassThrough));
+ return result;
}
@Override
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaOperationsTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaOperationsTest.java
index 0d156e7..7929b9b 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaOperationsTest.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaOperationsTest.java
@@ -26,7 +26,7 @@ public class LambdaOperationsTest {
@Test
public void supportedOperationCount() {
- assertEquals(5, LambdaOperations.values().length);
+ assertEquals(6, LambdaOperations.values().length);
}
@Test
@@ -36,6 +36,7 @@ public class LambdaOperationsTest {
assertEquals(LambdaOperations.listFunctions, LambdaOperations.valueOf("listFunctions"));
assertEquals(LambdaOperations.invokeFunction, LambdaOperations.valueOf("invokeFunction"));
assertEquals(LambdaOperations.deleteFunction, LambdaOperations.valueOf("deleteFunction"));
+ assertEquals(LambdaOperations.updateFunction, LambdaOperations.valueOf("updateFunction"));
}
@Test
@@ -45,5 +46,6 @@ public class LambdaOperationsTest {
assertEquals(LambdaOperations.listFunctions.toString(), "listFunctions");
assertEquals(LambdaOperations.invokeFunction.toString(), "invokeFunction");
assertEquals(LambdaOperations.deleteFunction.toString(), "deleteFunction");
+ assertEquals(LambdaOperations.updateFunction.toString(), "updateFunction");
}
}
diff --git a/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java b/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java
index f774ceb..131767f 100644
--- a/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java
+++ b/components/camel-aws/src/test/java/org/apache/camel/component/aws/lambda/LambdaProducerTest.java
@@ -22,6 +22,7 @@ import com.amazonaws.services.lambda.model.CreateFunctionResult;
import com.amazonaws.services.lambda.model.DeleteFunctionResult;
import com.amazonaws.services.lambda.model.GetFunctionResult;
import com.amazonaws.services.lambda.model.ListFunctionsResult;
+import com.amazonaws.services.lambda.model.UpdateFunctionCodeResult;
import com.amazonaws.util.IOUtils;
import org.apache.camel.EndpointInject;
import org.apache.camel.Exchange;
@@ -64,6 +65,32 @@ public class LambdaProducerTest extends CamelTestSupport {
assertNotNull(result.getFunctionArn());
assertNotNull(result.getCodeSha256());
}
+
+ @Test
+ public void lambdaUpdateFunctionTest() throws Exception {
+
+ Exchange exchange = template.send("direct:updateFunction", ExchangePattern.InOut, new Processor() {
+ @Override
+ public void process(Exchange exchange) throws Exception {
+ exchange.getIn().setHeader(LambdaConstants.RUNTIME, "nodejs6.10");
+ exchange.getIn().setHeader(LambdaConstants.HANDLER, "GetHelloWithName.handler");
+ exchange.getIn().setHeader(LambdaConstants.DESCRIPTION, "Hello with node.js on Lambda");
+ exchange.getIn().setHeader(LambdaConstants.ROLE, "arn:aws:iam::643534317684:role/lambda-execution-role");
+
+ ClassLoader classLoader = getClass().getClassLoader();
+ File file = new File(classLoader.getResource("org/apache/camel/component/aws/lambda/function/node/GetHelloWithName.zip").getFile());
+ FileInputStream inputStream = new FileInputStream(file);
+ exchange.getIn().setBody(IOUtils.toByteArray(inputStream));
+ }
+ });
+
+ assertMockEndpointsSatisfied();
+
+ UpdateFunctionCodeResult result = (UpdateFunctionCodeResult) exchange.getIn().getBody();
+ assertEquals(result.getFunctionName(), "GetHelloWithName");
+ assertNotNull(result.getFunctionArn());
+ assertNotNull(result.getCodeSha256());
+ }
@Test
public void lambdaDeleteFunctionTest() throws Exception {
@@ -163,6 +190,10 @@ public class LambdaProducerTest extends CamelTestSupport {
from("direct:deleteFunction")
.to("aws-lambda://GetHelloWithName?awsLambdaClient=#awsLambdaClient&operation=deleteFunction")
.to("mock:result");
+
+ from("direct:updateFunction")
+ .to("aws-lambda://GetHelloWithName?awsLambdaClient=#awsLambdaClient&operation=updateFunction")
+ .to("mock:result");
}
};
--
To stop receiving notification emails like this one, please contact
['"commits@camel.apache.org" <co...@camel.apache.org>'].