インフラ

CloudformationからCodepipeline用のGithub Webhook作れなくてハマった

cfn codepipeline

こんにちは、ちゃりおです。

CloudformationからCodepipelineを作る際に、github organizationユーザでWebhookを作れなくてハマりました。

事象と解決策についてメモします。

結論から書くと以下です。

  • Githubでトークンを発行したユーザに該当リポジトリのAdmin権限を付与する
  • OwnerにはOrganization名を指定する(orgname/reponameのOrgnameの部分)

事象

Cloudformation

Codepipelineのトリガーとして、githubのwebhookを使います。
下記はWebhookの定義のCloudformationです。

githubの個人アカウントで下記の記述が含まれたCloudformationテンプレートを実行したら成功しました。

AppPipelineWebhook:
    Type: AWS::CodePipeline::Webhook
    Properties:
      Authentication: GITHUB_HMAC
      AuthenticationConfiguration:
        SecretToken: !Ref GitHubWebhookSecret
      Filters: 
      - JsonPath: !Ref GitHubWebhookJsonPath
        MatchEquals: !Ref GitHubWebhookMatchEquals
      TargetPipeline: !Ref AppPipeline
      TargetAction: SourceAction
      Name: Test-Webhook
      TargetPipelineVersion: !GetAtt AppPipeline.Version
      RegisterWithThirdParty: true

## ~~抜粋~~
  AppPipeline:
    Type: AWS::CodePipeline::Pipeline
    Properties:
      Name: !Ref Name
      RoleArn: !GetAtt CodePipelineServiceRole.Arn
      ArtifactStore:
        Type: S3
        Location: !Ref ArtifactBucketName
      Stages: 
        - Name: Source
          Actions:
            - Name: SourceAction
              ActionTypeId:
                Category: Source
                Owner: ThirdParty
                Version: "1"
                Provider: GitHub
              Configuration:
                Owner: !Ref GitHubOwner
                Repo: !Ref RepositoryName
                Branch: !Ref BranchName
                OAuthToken: !Ref GitHubOAuthToken
                PollForSourceChanges: false
## ~~抜粋~~

エラーメッセージ

しかし、Organizationユーザ(Orgname/repo)で実行した場合、下記のエラーが出ます。

Webhook could not be registered with GitHub. Error cause: Not found [StatusCode: 404, Body: {“message”:”Not Found”,”documentation_url”:”https://developer.github.com/v3/repos/hooks/#create-a-hook”}] (Service: AWSCodePipeline; Status Code: 400; Error Code: ValidationException; Request ID: e6755c89-9698-478b-a434-d80763f37e95)

解決策

Githubでトークンを発行したユーザに該当リポジトリのAdmin権限を付与する

Admin権限がないと、Webhookを発行できないようでした。
Tokenを発行したユーザにAdmin権限を付与します。

OwnerにはOrganization名を指定する

CodepipelineのConfigurationのところ下記のようにしていました。
同じように、Organizationユーザのリポジトリでやっていたのですがエラーが出ていました。
(Parameterで渡していました)

Configuration:
  Owner: usename
  Repo: orgname/reponame

下記のように変更したら上手くいきました。
上の例だと、リポジトリ名が「username/orgname/reponame」になってしまうようです。

Configuration:
  Owner: orgname
  Repo: reponame

[Stack Overflow]AWS Codepipeline Github Webhook not being registered through cloudformation

まとめ

CloudformationからCodepipelineのWebhook作れなくてハマった件でした。
Githubのユーザについてのいい勉強になりました。

似たような問題で困っている方の、参考になればと思います

AWS SAM(python)でRDSに接続してみるこんにちは、ちゃりおです。 LambdaでRDSに接続したいことがありました。 備忘録がてらやり方を書いてみます。 AWS SAMと...
aws saa
AWS初心者が3週間でAWSソリューションアーキテクト(SAA)を取った勉強法こんにちは、ちゃりお(@chari7311)です! 以前社内の事情でAWSソリューションアーキテクトを3週間で取るよう言われました。 ...
cfn sub
[Cloudformation]Fn::Subを使って文字列内に変数をいれるこんにちは、ちゃりおです。 今回は、Cloudfomation書くときに便利なFn::Subについて書いてみます。 Fn::Su...