今回は、私が実際に使用したTerraformでのGitHubのリポジトリのマージをトリガーに起動するCodePipelineについて記載させていただければと思います

環境

  • GitHub
  • CodeBuild
  • CodePipeline

手順

1.IAMロール作成

今回は自分が実際に使用したものを例としてしますが、以下のポリシーをCodePipelineに付与しました

  • codestar-connections
  • S3
  • CodeBuild
  • Lambda(source codeのdeploy先)

2.CodePipelineの作成

・パイプラインの基本的な流れ

  1. ソースステージ : ソースコード(CodeCommit,GitHubなど)をアーティファクトとしてS3バケットに保存
  2. ビルドステージ : 保存されたソースアーティファクトを用いてビルドプロジェクトを実行、ビルド完了したものをビルドアーティファクトとしてS3バケットに保存
  3. デプロイステージ : 保存されたビルドアーティファクトを用いてLambdaやEC2にdeployを行う

・tfファイル作成

codepipeline.tf

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
resource "aws_codepipeline" "codepipeline001" {
  name     = "test-codepipeline"
  role_arn = {1.で作成したIAMロールのarn}
 
  artifact_store {
    location = test-codebuild-input
    type     = "S3"
  }
 
  ## ソース起動
  stage {
    name = "Source"
 
    action {
      name             = "Source"
      category         = "Source"
      owner            = "AWS"
      provider         = "CodeStarSourceConnection"
      version          = "1"
      output_artifacts = ["source_output"]
 
      configuration = {
        ConnectionArn    = codestarconnections_connection.github_connection_settings.arn
        FullRepositoryId = {githubのリポジトリ名}
        BranchName       = {githubのブランチ名}
      }
    }
  }
 
  ## ビルドテスト
  stage {
    name = "Test"
 
    action {
      name            = "Test"
      category        = "Test"
      owner           = "AWS"
      provider        = "CodeBuild"
      version         = "1"
      input_artifacts = ["source_output"]
 
      configuration = {
        ProjectName = test_codebuild_project.name
      }
    }
  }
 
  ## ビルド実行
  stage {
    name = "Build"
 
    action {
      name            = "Build"
      category        = "Build"
      owner           = "AWS"
      provider        = "CodeBuild"
      version         = "1"
      input_artifacts = ["source_output"]
 
      configuration = {
        ProjectName = test_codebuild_project.name
      }
    }
  }
}

・stage : ソースステージ、ビルドステージ、デプロイステージのこと
name : ソースの場合Source, ビルドの場合Build, デプロイの場合Deployを指定
action:Terraformの公式に載っていないので AWSの公式ドキュメント参照

3.Terraformの実行

こちらでまず、Terraformが正常に起動するかを確かめる

$ terraform plan 

上記が正常に動作したことを確認し、実際に構築する

$ terraform apply

4.GitHubとの連携

ここからはCodePipelineとGitHubの連携をコンソールにて行う

・CodePipelineにてGitHubとの接続設定

接続設定画面に移動し、『接続を作成』を選択

プロバイダーでGitHubを選択し、接続名を記載してGitHubに接続する

・GitHubにて接続対象のリポジトリを選択

その後に『新しいアプリをインストールする』を選択し、
GitHubのリポジトリ選択画面に移動するので
対象のリポジトリを選択し、『Update access』を選択
こちらが正常に接続されたのが確認できれば、完了となります。

最後に

今回私も初めて設定してみたのですが、自動で各リソースにソースコードが反映されていった時は爽快でした。

未熟な内容となっておりますが、参考になれば幸いです。