🍡

CodePipeline通知の作成でエラー出た時

2020/10/01に公開

背景

TerraformでCodePipelineから通知する部分を作成してた
追加する時に、A環境だと普通に通ったけど、B環境にしたとたんエラーが出た
A環境は確認で手で通知を作成してた

環境

$ terraform -version
Terraform v0.12.26

やったこと

Terraformで下記のようにpipelineとsnsのarnは他から取得して通知を作成しようとしました

resource "aws_codestarnotifications_notification_rule" "pipeline" {
  name     = "notification"

  detail_type    = "FULL"
  event_type_ids = [
    "codepipeline-pipeline-pipeline-execution-started", 
    "codepipeline-pipeline-pipeline-execution-succeeded", 
    "codepipeline-pipeline-pipeline-execution-failed"
  ]

  resource = var.pipeline_arn

  target {
    type    = "SNS"
    address = var.sns_notification_arn
  }
}

すると、デプロイ時に下記のような見たことないエラーが出てギョッとしました

$ terraform apply -auto-approve
...
Error: error creating codestar notification rule: ConfigurationException: AWS CodeStar Notifications could not create the AWS CloudWatch Events managed rule in your AWS account. If this is your first time creating a notification rule, the service-linked role for AWS CodeStar Notifications might not yet exist. Creation of this role might take up to 15 minutes. Until it exists, notification rule creation will fail. Wait 15 minutes, and then try again. If this is is not the first time you are creating a notification rule, there might be a problem with a network connection, or one or more AWS services might be experiencing issues. Verify your network connection and check to see if there are any issues with AWS services in your AWS Region before trying again.

  on ../../modules/codestar_notification/main.tf line 6, in resource "aws_codestarnotifications_notification_rule" "pipeline":
   6: resource "aws_codestarnotifications_notification_rule" "pipeline" {

和訳すると単純にロール作成するから待ってよと言われてるだけだった

エラー: codestar 通知ルールの作成にエラーが発生しました。ConfigurationExceptionが発生しました。AWS CodeStar Notificationsでは、AWSアカウントのAWS CloudWatch Events管理ルールを作成できませんでした。通知ルールの作成が初めての場合、AWS CodeStar Notificationsのサービス連携ロールがまだ存在していない可能性があります。このロールの作成には最大15分かかる場合があります。このロールが存在するまで、通知ルールの作成は失敗します。15分ほど待ってから、もう一度試してみてください。通知ルールの作成が初めてではない場合は、ネットワーク接続に問題があるか、1つまたは複数のAWSサービスに問題が発生している可能性があります。ネットワーク接続を確認し、AWSリージョン内のAWSサービスに問題が発生していないかどうかを確認してから、再度試してみてください。

なので、半信半疑で待って、何もせず言われたとおり15分後に叩くと、すんなり通りました

$ terraform apply -auto-approve
...
Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

作成されたIAM Roleの確認

下記の通り、 AWSServiceRoleForCodeStarNotifications というIAM Roleが作成されていて、作成されたのも直前となっており、エラー通りの動きとなっていました

$ aws iam get-role --role-name AWSServiceRoleForCodeStarNotifications | jq -r .Role.CreateDate                     
2020-09-30T06:24:40Z

$ date
Wed Sep 30 06:45:03 UTC 2020

参考

Discussion