From 7ab94785eadf2ac5d19988f54939ece609bbc0ae Mon Sep 17 00:00:00 2001 From: Abhimanyu Gupta Date: Mon, 30 Mar 2020 17:00:53 +0100 Subject: [PATCH 1/5] Added Log4J for internal CT instance --- CHANGELOG.md | 4 ++ README.md | 1 + lambda.tf | 75 +++++++++++++++++++++++++++++++++++++ templates.tf | 1 + templates/shuntingyard.json | 4 ++ variables.tf | 7 +++- 6 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 lambda.tf diff --git a/CHANGELOG.md b/CHANGELOG.md index d145f2c..8bd9f70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## [1.2.2] - TBD +### Added +- Log4j Xml for internal Circus Train instance. + ## [1.2.1] - 2020-01-16 ### Added - A new argument `orphaned_data_strategy` to use for handling stale data during replication. diff --git a/README.md b/README.md index 4f52ca3..a0725d6 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ For more information please refer to the main [Apiary](https://github.com/Expedi | aws\_region | AWS region to use for resources. | string | n/a | yes | | cpu | The number of CPU units to reserve for the Shunting Yard container. Valid values can be 256, 512, 1024, 2048 and 4096. Reference: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html | string | `"1024"` | no | | ct\_common\_config\_yaml | Common Circus Train configuration to be passed to internal Circus Train instance. It can be used, for example to configure Graphite for Circus Train. Refer to [Circus Train README](https://github.com/HotelsDotCom/circus-train/blob/master/README.md) for an exhaustive list of options supported by Circus Train. | string | n/a | yes | +| ct\_log4j\_xml | Log4j Xml file to be passed to internal Circus Train instance to control log level. | string | n/a | yes | | docker\_image | Full path of Shunting Yard Docker image. | string | n/a | yes | | docker\_registry\_auth\_secret\_name | Docker Registry authentication SecretManager secret name. | string | `""` | no | | docker\_version | Shunting Yard Docker image version. | string | n/a | yes | diff --git a/lambda.tf b/lambda.tf new file mode 100644 index 0000000..2acbe56 --- /dev/null +++ b/lambda.tf @@ -0,0 +1,75 @@ +resource "aws_s3_bucket_object" "master_config" { + bucket = "${var.master-config-s3-bucket}" + key = "${var.master-config-s3-key}/cloverleaf_master_config.yml" + content = "${var.cloverleaf-master-config}" + etag = "${md5("${var.cloverleaf-master-config}")}" +} + +locals { + # TODO: read artifact from a bucket in EGDL + default-cloverleaf-lambda-bucket = "hcom-data-lab-shared-us-east-1" + default-cloverleaf-lambda-jar-s3-key = "artifacts/release/com/hotels/bdp/cloverleaf-lambda/${var.cloverleaf-lambda-version}" + default-cloverleaf-steps-jar-s3-key = "artifacts/release/com/hotels/bdp/cloverleaf-steps/${var.cloverleaf-lambda-version}" +} + +resource "aws_lambda_function" "cloverleaf_fn" { + s3_bucket = "${coalesce(var.cloverleaf-lambda-bucket, local.default-cloverleaf-lambda-bucket)}" + s3_key = "${coalesce(var.cloverleaf-jars-s3-key, local.default-cloverleaf-lambda-jar-s3-key)}/cloverleaf-lambda-${var.cloverleaf-lambda-version}.jar" + function_name = "${var.instance_name}-fn" + role = "${aws_iam_role.cloverleaf-lambda.arn}" + handler = "com.hotels.bdp.cloverleaf.ApiaryMetastoreEventPartitionHandler::handleRequest" + runtime = "java8" + memory_size = "512" + timeout = "60" + publish = true + reserved_concurrent_executions = 1 + tags = "${var.tags}" + + environment { + variables = { + CloverleafVersion = "${var.cloverleaf-lambda-version}" + MetastoreUris = "${var.hive-metastore-uri}" + InstanceName = "${var.instance_name}" + + # The variables below are all required + EmrCloverleafJarUri = "s3://${coalesce(var.cloverleaf-lambda-bucket, local.default-cloverleaf-lambda-bucket)}/${coalesce(var.cloverleaf-jars-s3-key, local.default-cloverleaf-steps-jar-s3-key)}/cloverleaf-steps-${var.cloverleaf-lambda-version}.jar" + EmrCloverleafStepJarMainClass = "com.hotels.bdp.cloverleaf.CloverleafOrchestrator" + MasterConfigLocation = "s3://${var.master-config-s3-bucket}/${var.master-config-s3-key}/cloverleaf_master_config.yml" + DatapipelineLogUri = "${var.cloverleaf-datapipeline-log-location}" + DatapipelineTopicArn = "${aws_sns_topic.cloverleaf-datapipeline.arn}" + DatapipelineSnsRole = "CLOVERLEAF/${aws_iam_role.cloverleaf-datapipeline-sns.name}" + + # Optionally set the strategy for deleting orphaned data + OrphanedDataStrategy = "${var.orphaned-data-strategy}" + } + } +} + +resource "aws_lambda_event_source_mapping" "cloverleaf_fn" { + event_source_arn = "${aws_sqs_queue.cloverleaf_sqs_queue.arn}" + function_name = "${aws_lambda_function.cloverleaf_fn.arn}" + batch_size = 1 + enabled = true +} + +resource "aws_lambda_function" "cloverleaf_datapipeline_fn" { + s3_bucket = "${coalesce(var.cloverleaf-lambda-bucket, local.default-cloverleaf-lambda-bucket)}" + s3_key = "${coalesce(var.cloverleaf-jars-s3-key, local.default-cloverleaf-lambda-jar-s3-key)}/cloverleaf-lambda-${var.cloverleaf-lambda-version}.jar" + function_name = "${var.instance_name}-datapipeline-fn" + role = "${aws_iam_role.cloverleaf-datapipeline-lambda.arn}" + handler = "com.hotels.bdp.cloverleaf.datapipeline.lambda.DataPipelineNotificationsHandler::handleRequest" + runtime = "java8" + memory_size = "512" + timeout = "300" + publish = true + reserved_concurrent_executions = 10 + tags = "${var.tags}" +} + +resource "aws_lambda_permission" "cloverlaf-datapipeline" { + statement_id = "AllowExecutionFromSNS" + action = "lambda:InvokeFunction" + function_name = "${aws_lambda_function.cloverleaf_datapipeline_fn.function_name}" + principal = "sns.amazonaws.com" + source_arn = "${aws_sns_topic.cloverleaf-datapipeline.arn}" +} diff --git a/templates.tf b/templates.tf index 6ee8df7..e2cca32 100644 --- a/templates.tf +++ b/templates.tf @@ -28,6 +28,7 @@ data "template_file" "shuntingyard" { loggroup = "${aws_cloudwatch_log_group.shuntingyard_ecs.name}" shuntingyard_config_yaml = "${base64encode(data.template_file.shuntingyard_config_yaml.rendered)}" ct_common_config_yaml = "${base64encode(var.ct_common_config_yaml)}" + ct_log4j_xml = "${base64encode(var.ct_log4j_xml)}" #to instruct ECS to use repositoryCredentials for private docker registry docker_auth = "${var.docker_registry_auth_secret_name == "" ? "" : format("\"repositoryCredentials\" :{\n \"credentialsParameter\":\"%s\"\n},", join("", data.aws_secretsmanager_secret.docker_registry.*.arn))}" diff --git a/templates/shuntingyard.json b/templates/shuntingyard.json index adc4dfa..b5b333d 100644 --- a/templates/shuntingyard.json +++ b/templates/shuntingyard.json @@ -24,6 +24,10 @@ { "name": "CT_COMMON_CONFIG_YAML", "value": "${ct_common_config_yaml}" + }, + { + "name": "CT_LOG4J_XML", + "value": "${ct_log4j_xml}" } ] } diff --git a/variables.tf b/variables.tf index d09c312..7548e17 100644 --- a/variables.tf +++ b/variables.tf @@ -67,6 +67,11 @@ variable "ct_common_config_yaml" { type = "string" } +variable "ct_log4j_xml" { + description = "Log4j Xml file to be passed to internal Circus Train instance to control log level." + type = "string" +} + variable "allowed_s3_buckets" { description = "List of S3 Buckets to which Shunting Yard will have read-write access." type = "list" @@ -101,7 +106,7 @@ variable "shuntingyard_sqs_queue_stale_messages_timeout" { variable "selected_tables" { description = < Date: Mon, 30 Mar 2020 17:04:37 +0100 Subject: [PATCH 2/5] Removing lambda.tf --- lambda.tf | 75 ------------------------------------------------------- 1 file changed, 75 deletions(-) delete mode 100644 lambda.tf diff --git a/lambda.tf b/lambda.tf deleted file mode 100644 index 2acbe56..0000000 --- a/lambda.tf +++ /dev/null @@ -1,75 +0,0 @@ -resource "aws_s3_bucket_object" "master_config" { - bucket = "${var.master-config-s3-bucket}" - key = "${var.master-config-s3-key}/cloverleaf_master_config.yml" - content = "${var.cloverleaf-master-config}" - etag = "${md5("${var.cloverleaf-master-config}")}" -} - -locals { - # TODO: read artifact from a bucket in EGDL - default-cloverleaf-lambda-bucket = "hcom-data-lab-shared-us-east-1" - default-cloverleaf-lambda-jar-s3-key = "artifacts/release/com/hotels/bdp/cloverleaf-lambda/${var.cloverleaf-lambda-version}" - default-cloverleaf-steps-jar-s3-key = "artifacts/release/com/hotels/bdp/cloverleaf-steps/${var.cloverleaf-lambda-version}" -} - -resource "aws_lambda_function" "cloverleaf_fn" { - s3_bucket = "${coalesce(var.cloverleaf-lambda-bucket, local.default-cloverleaf-lambda-bucket)}" - s3_key = "${coalesce(var.cloverleaf-jars-s3-key, local.default-cloverleaf-lambda-jar-s3-key)}/cloverleaf-lambda-${var.cloverleaf-lambda-version}.jar" - function_name = "${var.instance_name}-fn" - role = "${aws_iam_role.cloverleaf-lambda.arn}" - handler = "com.hotels.bdp.cloverleaf.ApiaryMetastoreEventPartitionHandler::handleRequest" - runtime = "java8" - memory_size = "512" - timeout = "60" - publish = true - reserved_concurrent_executions = 1 - tags = "${var.tags}" - - environment { - variables = { - CloverleafVersion = "${var.cloverleaf-lambda-version}" - MetastoreUris = "${var.hive-metastore-uri}" - InstanceName = "${var.instance_name}" - - # The variables below are all required - EmrCloverleafJarUri = "s3://${coalesce(var.cloverleaf-lambda-bucket, local.default-cloverleaf-lambda-bucket)}/${coalesce(var.cloverleaf-jars-s3-key, local.default-cloverleaf-steps-jar-s3-key)}/cloverleaf-steps-${var.cloverleaf-lambda-version}.jar" - EmrCloverleafStepJarMainClass = "com.hotels.bdp.cloverleaf.CloverleafOrchestrator" - MasterConfigLocation = "s3://${var.master-config-s3-bucket}/${var.master-config-s3-key}/cloverleaf_master_config.yml" - DatapipelineLogUri = "${var.cloverleaf-datapipeline-log-location}" - DatapipelineTopicArn = "${aws_sns_topic.cloverleaf-datapipeline.arn}" - DatapipelineSnsRole = "CLOVERLEAF/${aws_iam_role.cloverleaf-datapipeline-sns.name}" - - # Optionally set the strategy for deleting orphaned data - OrphanedDataStrategy = "${var.orphaned-data-strategy}" - } - } -} - -resource "aws_lambda_event_source_mapping" "cloverleaf_fn" { - event_source_arn = "${aws_sqs_queue.cloverleaf_sqs_queue.arn}" - function_name = "${aws_lambda_function.cloverleaf_fn.arn}" - batch_size = 1 - enabled = true -} - -resource "aws_lambda_function" "cloverleaf_datapipeline_fn" { - s3_bucket = "${coalesce(var.cloverleaf-lambda-bucket, local.default-cloverleaf-lambda-bucket)}" - s3_key = "${coalesce(var.cloverleaf-jars-s3-key, local.default-cloverleaf-lambda-jar-s3-key)}/cloverleaf-lambda-${var.cloverleaf-lambda-version}.jar" - function_name = "${var.instance_name}-datapipeline-fn" - role = "${aws_iam_role.cloverleaf-datapipeline-lambda.arn}" - handler = "com.hotels.bdp.cloverleaf.datapipeline.lambda.DataPipelineNotificationsHandler::handleRequest" - runtime = "java8" - memory_size = "512" - timeout = "300" - publish = true - reserved_concurrent_executions = 10 - tags = "${var.tags}" -} - -resource "aws_lambda_permission" "cloverlaf-datapipeline" { - statement_id = "AllowExecutionFromSNS" - action = "lambda:InvokeFunction" - function_name = "${aws_lambda_function.cloverleaf_datapipeline_fn.function_name}" - principal = "sns.amazonaws.com" - source_arn = "${aws_sns_topic.cloverleaf-datapipeline.arn}" -} From a52b28137df97c4cde41e249b39d364db2ca9d45 Mon Sep 17 00:00:00 2001 From: Abhimanyu Gupta Date: Tue, 31 Mar 2020 15:33:13 +0100 Subject: [PATCH 3/5] CR comments incorporated --- CHANGELOG.md | 4 ++-- README.md | 2 +- variables.tf | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bd9f70..740374f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,9 +3,9 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). -## [1.2.2] - TBD +## [1.3.0] - 2020-03-31 ### Added -- Log4j Xml for internal Circus Train instance. +- Log4j XML for internal Circus Train instance. ## [1.2.1] - 2020-01-16 ### Added diff --git a/README.md b/README.md index a0725d6..8e1879d 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ For more information please refer to the main [Apiary](https://github.com/Expedi | aws\_region | AWS region to use for resources. | string | n/a | yes | | cpu | The number of CPU units to reserve for the Shunting Yard container. Valid values can be 256, 512, 1024, 2048 and 4096. Reference: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html | string | `"1024"` | no | | ct\_common\_config\_yaml | Common Circus Train configuration to be passed to internal Circus Train instance. It can be used, for example to configure Graphite for Circus Train. Refer to [Circus Train README](https://github.com/HotelsDotCom/circus-train/blob/master/README.md) for an exhaustive list of options supported by Circus Train. | string | n/a | yes | -| ct\_log4j\_xml | Log4j Xml file to be passed to internal Circus Train instance to control log level. | string | n/a | yes | +| ct\_log4j\_xml | Log4j XML file to be passed to internal Circus Train instance to control log level. | string | n/a | yes | | docker\_image | Full path of Shunting Yard Docker image. | string | n/a | yes | | docker\_registry\_auth\_secret\_name | Docker Registry authentication SecretManager secret name. | string | `""` | no | | docker\_version | Shunting Yard Docker image version. | string | n/a | yes | diff --git a/variables.tf b/variables.tf index 7548e17..b4410c3 100644 --- a/variables.tf +++ b/variables.tf @@ -68,7 +68,7 @@ variable "ct_common_config_yaml" { } variable "ct_log4j_xml" { - description = "Log4j Xml file to be passed to internal Circus Train instance to control log level." + description = "Log4j XML file to be passed to internal Circus Train instance to control log level." type = "string" } From d52407063f19b51b0a03ccd905a123e28a09c968 Mon Sep 17 00:00:00 2001 From: Abhimanyu Gupta Date: Tue, 31 Mar 2020 15:44:48 +0100 Subject: [PATCH 4/5] edited README --- README.md | 2 +- variables.tf | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8e1879d..3ada520 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ For more information please refer to the main [Apiary](https://github.com/Expedi | aws\_region | AWS region to use for resources. | string | n/a | yes | | cpu | The number of CPU units to reserve for the Shunting Yard container. Valid values can be 256, 512, 1024, 2048 and 4096. Reference: https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-cpu-memory-error.html | string | `"1024"` | no | | ct\_common\_config\_yaml | Common Circus Train configuration to be passed to internal Circus Train instance. It can be used, for example to configure Graphite for Circus Train. Refer to [Circus Train README](https://github.com/HotelsDotCom/circus-train/blob/master/README.md) for an exhaustive list of options supported by Circus Train. | string | n/a | yes | -| ct\_log4j\_xml | Log4j XML file to be passed to internal Circus Train instance to control log level. | string | n/a | yes | +| ct\_log4j\_xml | Log4j XML file to be passed to internal Circus Train instance to configure logging. | string | n/a | yes | | docker\_image | Full path of Shunting Yard Docker image. | string | n/a | yes | | docker\_registry\_auth\_secret\_name | Docker Registry authentication SecretManager secret name. | string | `""` | no | | docker\_version | Shunting Yard Docker image version. | string | n/a | yes | diff --git a/variables.tf b/variables.tf index b4410c3..ebc0cf1 100644 --- a/variables.tf +++ b/variables.tf @@ -68,7 +68,7 @@ variable "ct_common_config_yaml" { } variable "ct_log4j_xml" { - description = "Log4j XML file to be passed to internal Circus Train instance to control log level." + description = "Log4j XML file to be passed to internal Circus Train instance to configure logging." type = "string" } From 29cc168403345780e4f71dfd20301a3ad2f725e4 Mon Sep 17 00:00:00 2001 From: Abhimanyu Gupta Date: Tue, 31 Mar 2020 15:50:52 +0100 Subject: [PATCH 5/5] Updating license year --- cloudwatch.tf | 4 ++-- common.tf | 2 +- ecs.tf | 2 +- iam-policy-s3-buckets.tf | 2 +- iam-policy-secretsmanager.tf | 2 +- iam-policy-sqs.tf | 2 +- iam.tf | 2 +- sg.tf | 2 +- sns.tf | 2 +- sqs.tf | 2 +- templates.tf | 2 +- templates/shuntingyard-config.yml.tmpl | 4 ++-- variables.tf | 2 +- version.tf | 2 +- 14 files changed, 16 insertions(+), 16 deletions(-) diff --git a/cloudwatch.tf b/cloudwatch.tf index ccd397a..8662922 100644 --- a/cloudwatch.tf +++ b/cloudwatch.tf @@ -1,5 +1,5 @@ /** - * Copyright (C) 2019 Expedia, Inc. + * Copyright (C) 2020 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); */ @@ -98,7 +98,7 @@ data "template_file" "sqs_widgets" { "region": "${var.aws_region}", "title": "Shunting Yard SQS Age of Oldest Message (s)" } - } + } EOF } diff --git a/common.tf b/common.tf index 3b9ecca..0fdfc32 100644 --- a/common.tf +++ b/common.tf @@ -1,5 +1,5 @@ /** - * Copyright (C) 2019 Expedia, Inc. + * Copyright (C) 2020 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); */ diff --git a/ecs.tf b/ecs.tf index 7a7cc42..3f6329b 100644 --- a/ecs.tf +++ b/ecs.tf @@ -1,5 +1,5 @@ /** - * Copyright (C) 2019 Expedia, Inc. + * Copyright (C) 2020 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); */ diff --git a/iam-policy-s3-buckets.tf b/iam-policy-s3-buckets.tf index 33b043b..4a1f2db 100644 --- a/iam-policy-s3-buckets.tf +++ b/iam-policy-s3-buckets.tf @@ -1,5 +1,5 @@ /** - * Copyright (C) 2019 Expedia, Inc. + * Copyright (C) 2020 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); */ diff --git a/iam-policy-secretsmanager.tf b/iam-policy-secretsmanager.tf index 8524a03..c5f2036 100644 --- a/iam-policy-secretsmanager.tf +++ b/iam-policy-secretsmanager.tf @@ -1,5 +1,5 @@ /** - * Copyright (C) 2019 Expedia, Inc. + * Copyright (C) 2020 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); */ diff --git a/iam-policy-sqs.tf b/iam-policy-sqs.tf index 7c2c04a..b1303d7 100644 --- a/iam-policy-sqs.tf +++ b/iam-policy-sqs.tf @@ -1,5 +1,5 @@ /** - * Copyright (C) 2019 Expedia, Inc. + * Copyright (C) 2020 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); */ diff --git a/iam.tf b/iam.tf index 6e55b6c..ac4630a 100644 --- a/iam.tf +++ b/iam.tf @@ -1,5 +1,5 @@ /** - * Copyright (C) 2019 Expedia, Inc. + * Copyright (C) 2020 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); */ diff --git a/sg.tf b/sg.tf index c0b2e15..b2c4b2d 100644 --- a/sg.tf +++ b/sg.tf @@ -1,5 +1,5 @@ /** - * Copyright (C) 2019 Expedia, Inc. + * Copyright (C) 2020 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); */ diff --git a/sns.tf b/sns.tf index 723dc5d..98af4f7 100644 --- a/sns.tf +++ b/sns.tf @@ -1,5 +1,5 @@ /** - * Copyright (C) 2019 Expedia, Inc. + * Copyright (C) 2020 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); */ diff --git a/sqs.tf b/sqs.tf index de21c5b..15a5bcb 100644 --- a/sqs.tf +++ b/sqs.tf @@ -1,5 +1,5 @@ /** - * Copyright (C) 2019 Expedia, Inc. + * Copyright (C) 2020 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); */ diff --git a/templates.tf b/templates.tf index e2cca32..9281525 100644 --- a/templates.tf +++ b/templates.tf @@ -1,5 +1,5 @@ /** - * Copyright (C) 2019 Expedia, Inc. + * Copyright (C) 2020 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); */ diff --git a/templates/shuntingyard-config.yml.tmpl b/templates/shuntingyard-config.yml.tmpl index bd38479..12847fd 100644 --- a/templates/shuntingyard-config.yml.tmpl +++ b/templates/shuntingyard-config.yml.tmpl @@ -1,5 +1,5 @@ --- -# Copyright (C) 2019 Expedia, Inc. +# Copyright (C) 2020 Expedia, Inc. # Licensed under the Apache License, Version 2.0 (the "License"); source-catalog: @@ -14,6 +14,6 @@ event-receiver: sqs.queue: ${shuntingyard_sqs_queue} sqs.wait.time.seconds: ${shuntingyard_sqs_queue_wait_timeout} source-table-filter: - table-names: + table-names: ${selected_tables} ${orphaned_data_strategy} diff --git a/variables.tf b/variables.tf index ebc0cf1..0cfb1a9 100644 --- a/variables.tf +++ b/variables.tf @@ -1,5 +1,5 @@ /** - * Copyright (C) 2019 Expedia, Inc. + * Copyright (C) 2020 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); */ diff --git a/version.tf b/version.tf index e871fa7..4e81895 100644 --- a/version.tf +++ b/version.tf @@ -1,5 +1,5 @@ /** - * Copyright (C) 2019 Expedia, Inc. + * Copyright (C) 2020 Expedia, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); */