概要

AWS CodePipelineは、継続的インテグレーションと継続的デリバリー(CI/CD)サービスであり、開発者がアプリケーションの更新を迅速かつ信頼性高くリリースするのに役立ちます。

この記事では、CodeCommitにコードをpushすることを起点に、CodePipelineを使用してCloudFormationスタックを作成する方法について説明します。

構成図

前提条件

  • GitやCloudFormationに基本的な使用方法を認識していると読み進めやすいです。
  • ローカルの開発環境からCodeCommit上にコードをpushする場合、AWS CLIがインストールされ、適切に設定されている必要があります。

https://git-scm.com/about

https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html

手順

  1. CodeCommitリポジトリの作成: まず、AWS Management ConsoleからCodeCommitリポジトリを作成します。このリポジトリは、CloudFormationテンプレートを保存するためのものです。
  2. CloudFormationテンプレートの作成: 次に、CloudFormationスタックを作成するためのテンプレートを作成します。このテンプレートはYAMLまたはJSON形式で記述され、AWSリソースの設定を定義します。
  3. CodePipelineの作成: CodePipelineを作成し、ソースステージとして先ほど作成したCodeCommitリポジトリを指定します。また、デプロイステージとしてCloudFormationを指定し、先ほど作成したテンプレートを使用するよう設定します。
  4. パイプラインの実行: 最後に、CodeCommitリポジトリにCloudFormationテンプレートをpushします。これにより、パイプラインが自動的に実行され、CloudFormationスタックが作成されます。

これにより、GUIやCLIで手動でスタックを作成することなく、コードのpushだけでCloudFormationスタックを自動的に作成できます。

これは開発者の生産性向上に寄与し、エラーの可能性を減らすことができます。

注意点

  • CloudFormationテンプレートは正確に記述する必要があります。間違った設定は予期しない結果やエラーを引き起こす可能性があります。
  • CodePipelineはAWSリソースを使用します。そのため、パイプラインの実行は課金対象となります。

これらのサービスを活用することで、開発フローを自動化し、効率化することが可能です。

検証

今回は、以下のCloudFormationテンプレートを用いて、上記の仕組みを構築しましたが、マネジメントコンソールで作成しても問題ありません。

Resources:
  MyCodeCommitRepository:
    Type: AWS::CodeCommit::Repository
    Properties:
      RepositoryName: !Ref MyCodeCommitRepoName

  MyPipeline:
    Type: AWS::CodePipeline::Pipeline
    Properties:
      Name: MyPipeline
      RoleArn: !GetAtt PipelineRole.Arn
      ArtifactStore:
        Type: S3
        Location: my-pipeline-bucket-name
      Stages:
        - Name: Source
          Actions:
            - Name: SourceAction
              ActionTypeId:
                Category: Source
                Owner: AWS
                Version: "1"
                Provider: CodeCommit
              Configuration:
                RepositoryName: !Ref MyCodeCommitRepoName
                BranchName: main
              OutputArtifacts:
                - Name: !Ref MySourceArtifact
        - Name: Deploy
          Actions:
            - Name: DeployAction
              ActionTypeId:
                Category: Deploy
                Owner: AWS
                Version: "1"
                Provider: CloudFormation
              Configuration:
                StackName: !Sub "${Env}-stack-${ResourceName}"
                ActionMode: CREATE_UPDATE
                Capabilities: CAPABILITY_IAM
                RoleArn: !GetAtt DeployRole.Arn
                TemplatePath: !Sub "${MySourceArtifact}::${MySourceTemplate}"
              InputArtifacts:
                - Name: !Ref MySourceArtifact

実際に、以下のようなS3バケットを作成するCloudFormationテンプレートをCodeCommitにpushします。

Resources:
  tests3bucket:
    Type: AWS::S3::bucket

以下のコマンドでpushします。

$ git push prigin {BranchName}

バケットが作成されました。

コードに以下の変更を加えて、再度pushします。

変更箇所は、Nameタグを付与している点です。

Resources:
  testBucket:
    Type: AWS::S3::Bucket
    Properties:
      Tags:
        - Key: "Name"
          Value: "UpdateComplete"

実際にタグが付与されました。

まとめ

AWS CodePipelineとCloudFormationを使用して、CodeCommitにコードをpushすることを起点にCloudFormationスタックを作成する仕組みの検証が完了しました。

CodeCommitにコードをpushするだけで、CloudFormationスタックが自動的に作成されました。これにより、手動での作業が不要となり、開発者の生産性が向上しました。

また、CodePipelineを使用することで、スタック作成プロセスが一貫性を持ち、エラーが減少しました。これは、開発者が手動で操作するよりも信頼性が高いです。

以上が今回の検証結果のまとめです。AWS CodePipelineとCloudFormationを活用することで、開発フローを自動化し、効率化することが可能であることが確認できました。