概要
AWS CodePipelineは、継続的インテグレーションと継続的デリバリー(CI/CD)サービスであり、開発者がアプリケーションの更新を迅速かつ信頼性高くリリースするのに役立ちます。
この記事では、CodeCommitにコードをpushすることを起点に、CodePipelineを使用してCloudFormationスタックを作成する方法について説明します。
構成図
前提条件
- GitやCloudFormationに基本的な使用方法を認識していると読み進めやすいです。
- ローカルの開発環境からCodeCommit上にコードをpushする場合、AWS CLIがインストールされ、適切に設定されている必要があります。
https://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/Welcome.html
手順
- CodeCommitリポジトリの作成: まず、AWS Management ConsoleからCodeCommitリポジトリを作成します。このリポジトリは、CloudFormationテンプレートを保存するためのものです。
- CloudFormationテンプレートの作成: 次に、CloudFormationスタックを作成するためのテンプレートを作成します。このテンプレートはYAMLまたはJSON形式で記述され、AWSリソースの設定を定義します。
- CodePipelineの作成: CodePipelineを作成し、ソースステージとして先ほど作成したCodeCommitリポジトリを指定します。また、デプロイステージとしてCloudFormationを指定し、先ほど作成したテンプレートを使用するよう設定します。
- パイプラインの実行: 最後に、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を活用することで、開発フローを自動化し、効率化することが可能であることが確認できました。