Skip to content

Commit

Permalink
fix(@aws0cdk/aws-elasticsearch): 2 domains 1 stack
Browse files Browse the repository at this point in the history
Fixes issue #12017 where 2 elastic search Domains with logging enabled
and deployed in the same stack fail to synth due to log group logical
naming conflict.

BREAKING CHANGE: ES Domain LogGroup LogicalId will change, which will
trigger new log group resources to be created
  • Loading branch information
peterb154 committed Dec 13, 2020
1 parent d276b02 commit c5bb888
Show file tree
Hide file tree
Showing 3 changed files with 143 additions and 62 deletions.
6 changes: 3 additions & 3 deletions packages/@aws-cdk/aws-elasticsearch/lib/domain.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1378,7 +1378,7 @@ export class Domain extends DomainBase implements IDomain {

if (props.logging?.slowSearchLogEnabled) {
this.slowSearchLogGroup = props.logging.slowSearchLogGroup ??
new logs.LogGroup(scope, 'SlowSearchLogs', {
new logs.LogGroup(this, 'SlowSearchLogs', {
retention: logs.RetentionDays.ONE_MONTH,
});

Expand All @@ -1387,7 +1387,7 @@ export class Domain extends DomainBase implements IDomain {

if (props.logging?.slowIndexLogEnabled) {
this.slowIndexLogGroup = props.logging.slowIndexLogGroup ??
new logs.LogGroup(scope, 'SlowIndexLogs', {
new logs.LogGroup(this, 'SlowIndexLogs', {
retention: logs.RetentionDays.ONE_MONTH,
});

Expand All @@ -1396,7 +1396,7 @@ export class Domain extends DomainBase implements IDomain {

if (props.logging?.appLogEnabled) {
this.appLogGroup = props.logging.appLogGroup ??
new logs.LogGroup(scope, 'AppLogs', {
new logs.LogGroup(this, 'AppLogs', {
retention: logs.RetentionDays.ONE_MONTH,
});

Expand Down
87 changes: 84 additions & 3 deletions packages/@aws-cdk/aws-elasticsearch/test/domain.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ describe('log groups', () => {
SEARCH_SLOW_LOGS: {
CloudWatchLogsLogGroupArn: {
'Fn::GetAtt': [
'SlowSearchLogsE00DC2E7',
'DomainSlowSearchLogs5B35A97A',
'Arn',
],
},
Expand Down Expand Up @@ -113,7 +113,7 @@ describe('log groups', () => {
INDEX_SLOW_LOGS: {
CloudWatchLogsLogGroupArn: {
'Fn::GetAtt': [
'SlowIndexLogsAD49DED0',
'DomainSlowIndexLogsFE2F1061',
'Arn',
],
},
Expand All @@ -136,7 +136,7 @@ describe('log groups', () => {
ES_APPLICATION_LOGS: {
CloudWatchLogsLogGroupArn: {
'Fn::GetAtt': [
'AppLogsC5DF83A6',
'DomainAppLogs21698C1B',
'Arn',
],
},
Expand All @@ -152,6 +152,87 @@ describe('log groups', () => {
});
});

test('two domains with logging enabled can be created in same stack', () => {
new Domain(stack, 'Domain1', {
version: ElasticsearchVersion.V7_7,
logging: {
appLogEnabled: true,
slowSearchLogEnabled: true,
slowIndexLogEnabled: true,
},
});
new Domain(stack, 'Domain2', {
version: ElasticsearchVersion.V7_7,
logging: {
appLogEnabled: true,
slowSearchLogEnabled: true,
slowIndexLogEnabled: true,
},
});
expect(stack).toHaveResourceLike('AWS::Elasticsearch::Domain', {
LogPublishingOptions: {
ES_APPLICATION_LOGS: {
CloudWatchLogsLogGroupArn: {
'Fn::GetAtt': [
'Domain1AppLogs6E8D1D67',
'Arn',
],
},
Enabled: true,
},
SEARCH_SLOW_LOGS: {
CloudWatchLogsLogGroupArn: {
'Fn::GetAtt': [
'Domain1SlowSearchLogs8F3B0506',
'Arn',
],
},
Enabled: true,
},
INDEX_SLOW_LOGS: {
CloudWatchLogsLogGroupArn: {
'Fn::GetAtt': [
'Domain1SlowIndexLogs9354D098',
'Arn',
],
},
Enabled: true,
},
},
});
expect(stack).toHaveResourceLike('AWS::Elasticsearch::Domain', {
LogPublishingOptions: {
ES_APPLICATION_LOGS: {
CloudWatchLogsLogGroupArn: {
'Fn::GetAtt': [
'Domain2AppLogs810876E2',
'Arn',
],
},
Enabled: true,
},
SEARCH_SLOW_LOGS: {
CloudWatchLogsLogGroupArn: {
'Fn::GetAtt': [
'Domain2SlowSearchLogs0C75F64B',
'Arn',
],
},
Enabled: true,
},
INDEX_SLOW_LOGS: {
CloudWatchLogsLogGroupArn: {
'Fn::GetAtt': [
'Domain2SlowIndexLogs0CB900D0',
'Arn',
],
},
Enabled: true,
},
},
});
});

});

describe('grants', () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,47 @@
{
"Resources": {
"DomainSlowSearchLogs5B35A97A": {
"Type": "AWS::Logs::LogGroup",
"Properties": {
"RetentionInDays": 30
},
"UpdateReplacePolicy": "Retain",
"DeletionPolicy": "Retain"
},
"DomainAppLogs21698C1B": {
"Type": "AWS::Logs::LogGroup",
"Properties": {
"RetentionInDays": 30
},
"UpdateReplacePolicy": "Retain",
"DeletionPolicy": "Retain"
},
"DomainESLogGroupPolicyCustomResourcePolicyB35C8E41": {
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyDocument": {
"Statement": [
{
"Action": "logs:PutResourcePolicy",
"Effect": "Allow",
"Resource": "*"
},
{
"Action": "logs:DeleteResourcePolicy",
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "2012-10-17"
},
"PolicyName": "DomainESLogGroupPolicyCustomResourcePolicyB35C8E41",
"Roles": [
{
"Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2"
}
]
}
},
"DomainESLogGroupPolicy5373A2E8": {
"Type": "Custom::CloudwatchLogResourcePolicy",
"Properties": {
Expand All @@ -21,14 +63,14 @@
"{\"Statement\":[{\"Action\":[\"logs:PutLogEvents\",\"logs:CreateLogStream\"],\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"es.amazonaws.com\"},\"Resource\":[\"",
{
"Fn::GetAtt": [
"SlowSearchLogsE00DC2E7",
"DomainSlowSearchLogs5B35A97A",
"Arn"
]
},
"\",\"",
{
"Fn::GetAtt": [
"AppLogsC5DF83A6",
"DomainAppLogs21698C1B",
"Arn"
]
},
Expand All @@ -53,14 +95,14 @@
"{\"Statement\":[{\"Action\":[\"logs:PutLogEvents\",\"logs:CreateLogStream\"],\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"es.amazonaws.com\"},\"Resource\":[\"",
{
"Fn::GetAtt": [
"SlowSearchLogsE00DC2E7",
"DomainSlowSearchLogs5B35A97A",
"Arn"
]
},
"\",\"",
{
"Fn::GetAtt": [
"AppLogsC5DF83A6",
"DomainAppLogs21698C1B",
"Arn"
]
},
Expand All @@ -83,11 +125,11 @@
},
"InstallLatestAwsSdk": true
},
"UpdateReplacePolicy": "Delete",
"DeletionPolicy": "Delete",
"DependsOn": [
"DomainESLogGroupPolicyCustomResourcePolicyB35C8E41"
]
],
"UpdateReplacePolicy": "Delete",
"DeletionPolicy": "Delete"
},
"Domain66AC69E0": {
"Type": "AWS::Elasticsearch::Domain",
Expand Down Expand Up @@ -118,7 +160,7 @@
"ES_APPLICATION_LOGS": {
"CloudWatchLogsLogGroupArn": {
"Fn::GetAtt": [
"AppLogsC5DF83A6",
"DomainAppLogs21698C1B",
"Arn"
]
},
Expand All @@ -127,7 +169,7 @@
"SEARCH_SLOW_LOGS": {
"CloudWatchLogsLogGroupArn": {
"Fn::GetAtt": [
"SlowSearchLogsE00DC2E7",
"DomainSlowSearchLogs5B35A97A",
"Arn"
]
},
Expand All @@ -146,22 +188,6 @@
"DomainESLogGroupPolicy5373A2E8"
]
},
"SlowSearchLogsE00DC2E7": {
"Type": "AWS::Logs::LogGroup",
"Properties": {
"RetentionInDays": 30
},
"UpdateReplacePolicy": "Retain",
"DeletionPolicy": "Retain"
},
"AppLogsC5DF83A6": {
"Type": "AWS::Logs::LogGroup",
"Properties": {
"RetentionInDays": 30
},
"UpdateReplacePolicy": "Retain",
"DeletionPolicy": "Retain"
},
"AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2": {
"Type": "AWS::IAM::Role",
"Properties": {
Expand Down Expand Up @@ -193,32 +219,6 @@
]
}
},
"DomainESLogGroupPolicyCustomResourcePolicyB35C8E41": {
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyDocument": {
"Statement": [
{
"Action": "logs:PutResourcePolicy",
"Effect": "Allow",
"Resource": "*"
},
{
"Action": "logs:DeleteResourcePolicy",
"Effect": "Allow",
"Resource": "*"
}
],
"Version": "2012-10-17"
},
"PolicyName": "DomainESLogGroupPolicyCustomResourcePolicyB35C8E41",
"Roles": [
{
"Ref": "AWS679f53fac002430cb0da5b7982bd2287ServiceRoleC1EA0FF2"
}
]
}
},
"AWS679f53fac002430cb0da5b7982bd22872D164C4C": {
"Type": "AWS::Lambda::Function",
"Properties": {
Expand Down Expand Up @@ -276,17 +276,17 @@
}
},
"Parameters": {
"AssetParametersb64b129569a5ac7a9abf88a18ac0b504d1fb1208872460476ed3fd435830eb94ArtifactHash782948FC": {
"Type":"String",
"Description":"Artifact hash for asset \"b64b129569a5ac7a9abf88a18ac0b504d1fb1208872460476ed3fd435830eb94\""
},
"AssetParametersb64b129569a5ac7a9abf88a18ac0b504d1fb1208872460476ed3fd435830eb94S3Bucket38F1BB8E": {
"Type": "String",
"Description": "S3 bucket for asset \"b64b129569a5ac7a9abf88a18ac0b504d1fb1208872460476ed3fd435830eb94\""
},
"AssetParametersb64b129569a5ac7a9abf88a18ac0b504d1fb1208872460476ed3fd435830eb94S3VersionKeyCCDC67C0": {
"Type": "String",
"Description": "S3 key for asset version \"b64b129569a5ac7a9abf88a18ac0b504d1fb1208872460476ed3fd435830eb94\""
},
"AssetParametersb64b129569a5ac7a9abf88a18ac0b504d1fb1208872460476ed3fd435830eb94ArtifactHash782948FC": {
"Type": "String",
"Description": "Artifact hash for asset \"b64b129569a5ac7a9abf88a18ac0b504d1fb1208872460476ed3fd435830eb94\""
}
}
}
}

0 comments on commit c5bb888

Please sign in to comment.