diff --git a/CHANGELOG.next.asciidoc b/CHANGELOG.next.asciidoc index 27a2a77064e..7826c2bfa06 100644 --- a/CHANGELOG.next.asciidoc +++ b/CHANGELOG.next.asciidoc @@ -692,6 +692,7 @@ https://github.com/elastic/beats/compare/v7.0.0-alpha2...master[Check the HEAD d *Functionbeat* - Add basic ECS categorization and `cloud` fields. {pull}19174[19174] - Add support for parallelization factor for kinesis. {pull}20727[20727] +- Add support for multiple regions {pull}21064[21064] *Winlogbeat* diff --git a/x-pack/functionbeat/config/config.go b/x-pack/functionbeat/config/config.go index a95346c59c1..3a302760767 100644 --- a/x-pack/functionbeat/config/config.go +++ b/x-pack/functionbeat/config/config.go @@ -16,7 +16,7 @@ import ( ) var ( - functionPattern = "^[A-Za-z][A-Za-z0-9\\-]{0,139}$" + functionPattern = "^[A-Za-z][A-Za-z0-9\\-]{0,29}$" functionRE = regexp.MustCompile(functionPattern) configOverrides = common.MustNewConfigFrom(map[string]interface{}{ "path.data": "/tmp", @@ -103,7 +103,7 @@ type functionName string func (f *functionName) Unpack(s string) error { if !functionRE.MatchString(s) { return fmt.Errorf( - "invalid name: '%s', name must match [a-zA-Z0-9-] and be at most 140 characters", + "invalid name: '%s', name must match [a-zA-Z0-9-] and be at most 29 characters", s, ) } diff --git a/x-pack/functionbeat/config/config_test.go b/x-pack/functionbeat/config/config_test.go index af62d8ca7e4..34eee7d71d0 100644 --- a/x-pack/functionbeat/config/config_test.go +++ b/x-pack/functionbeat/config/config_test.go @@ -105,9 +105,24 @@ func TestFunctionName(t *testing.T) { assert.Equal(t, functionName("hello-world"), f) }) + t.Run("valid function name: length of 29 chars", func(t *testing.T) { + f := functionName("") + err := f.Unpack("something-which-is--29-chars") + if !assert.NoError(t, err) { + return + } + assert.Equal(t, functionName("something-which-is--29-chars"), f) + }) + t.Run("invalid function name", func(t *testing.T) { f := functionName("") err := f.Unpack("hello world") assert.Error(t, err) }) + + t.Run("invalid function name: length", func(t *testing.T) { + f := functionName("") + err := f.Unpack("something-which-is-greater-than-twenty-nine-characters") + assert.Error(t, err) + }) } diff --git a/x-pack/functionbeat/manager/aws/template_builder.go b/x-pack/functionbeat/manager/aws/template_builder.go index d28a75b3794..cc51e2c0aa4 100644 --- a/x-pack/functionbeat/manager/aws/template_builder.go +++ b/x-pack/functionbeat/manager/aws/template_builder.go @@ -264,7 +264,7 @@ func (d *defaultTemplateBuilder) roleTemplate(function installer, name string) * }, }, Path: "/", - RoleName: "functionbeat-lambda-" + name, + RoleName: "functionbeat-lambda-" + name + "-" + cloudformation.Ref("AWS::Region"), // Allow the lambda to write log to cloudwatch logs. // doc: https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-policy.html Policies: policies,