CDK - CodePipeline notification rule - Resource handler returned message: "Invalid request provided: AWS::CodeStarNotifications::NotificationRule"

0

We have a helper method in our CDK library (based on Amazon.CDK.Lib 2.28.1) to establish a CodePipeline notification rule to SNS topic that delivers events to a Microsoft Teams channel via Lambda function.

internal static void ToMicrosoftTeams(CodePipelineNotifierProps props)
{
	var topic = EstablishEventsTopic(props);
	props.Pipeline.NotifyOnExecutionStateChange("NotifyOnExecutionStateChange", topic);

	// Pull the lamdda function python code embedded in assembly.
	using var fileStream = Assembly.GetExecutingAssembly().GetManifestResourceStream("CdkLibrary.Lambda.CodePipeline_events_MicrosoftTeams.py");
	using var streamReader = new StreamReader(fileStream);
	var lambdaCode = streamReader.ReadToEnd();

	var funcName = $"{props.ProductName}-{props.PipelineName}-events-to-teams-{props.Environment}";
	var lambdaFunc = new Function(props.Pipeline, funcName,
		new FunctionProps
		{
			FunctionName = funcName,
			Runtime = Runtime.PYTHON_3_9,
			// Inserting code as raw string; resulting code file will default as index.py.
			// Function lambda_hanlder()
			Handler = "index.lambda_handler",
			Code = Code.FromInline(lambdaCode),
			Environment = new Dictionary<string, string>
			{
				{ "TeamsChannelUrl", props.TeamsChannelUrl}
			}
		});

	topic.AddSubscription(new LambdaSubscription(lambdaFunc));
}

private static Topic EstablishEventsTopic(CodePipelineNotifierProps props)
{
	string topicName = $"{props.ProductName}-{props.PipelineName}-events-{props.Environment}";
	return new Topic(props.Pipeline, topicName, new TopicProps
	{
		DisplayName = props.PipelineName + " events",
		TopicName = topicName
	});
}

This setup fine in our testing. However today in deploying a new environment, there seem to be a new error encountered on creating the notification rule.

AppService-stack | 3/10 | 2:59:02 pm | CREATE_FAILED | AWS::CodeStarNotifications::NotificationRule | AppService-pipeline-dev/AppService-pipeline-dev/NotifyOnExecutionStateChange (AppServicepipelinedevNotifyOnExecutionStateChangeE355A12F) Resource handler returned message: "Invalid request provided: AWS::CodeStarNotifications::NotificationRule" (RequestToken: <GUID>, HandlerErrorCode: InvalidRequest)

AppService-stack | 3/10 | 2:59:03 pm | CREATE_FAILED | AWS::IAM::Role | AppService-pipeline-dev/AppService-pipeline-dev/AppService-pipeline-events-to-teams-dev/ServiceRole (AppServicepipelinedevAppServicepipelineeventstoteamsdevServiceRoleDE6A960E) Resource creation cancelled

Why has this been considered an invalid request?

icelava
已提问 2 年前2141 查看次数
2 回答
0
已接受的回答

Don't know why, but after updating the local CDK runtime to 2.31.0, without changing our library reference version (2.28.1), the cdk deploy now succeeds for the notification rule and the other resources.

UPDATE (WORK AROUND)

Following further comment as per below, to work around this problem, either have to define the CodePipeline constructs in another stack or comment it out first, so that dependency resources can initially all succeed. Then let the CodePipeline deployment fail small and quick on first attempt, and deploy again which will be more likely to succeed.

icelava
已回答 2 年前
profile picture
专家
已审核 1 个月前
0

This seems to happen too often when deploying new stacks

App-stack | 159/212 | 4:52:22 pm | CREATE_FAILED | AWS::CodeStarNotifications::NotificationRule | App-stack/App-stack-pipeline/App-stack-pl/NotifyOnExecutionStateChange (AppstackpipelineNotifyOnExecutionStateChange5933C726) Resource handler returned message: "Invalid request provided: AWS::CodeStarNotifications::NotificationRule" (RequestToken: GUID, HandlerErrorCode: InvalidRequest)

It has a very nasty side effect of breaking and stalling the deployment-destruction of resources, just because of this random error.

icelava
已回答 2 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则