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 年前檢視次數 2140 次
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 年前

您尚未登入。 登入 去張貼答案。

一個好的回答可以清楚地回答問題並提供建設性的意見回饋,同時有助於提問者的專業成長。

回答問題指南