パイプラインのセットアップ
パイプラインを実行する前に、CodePipelineがクラスターにデプロイできるようにクラスターを構成しましょう。CodePipelineはクラスター上で操作(kubectlやhelm)を実行するための権限が必要です。この操作を成功させるには、codepipelineパイプラインサービ スロールをクラスターのアクセスエントリとして追加する必要があります:
私たちのために設定されたCodePipelineを調査し、それを作成するために使用されたCloudFormationを参照してみましょう。
以下のボタンを使用して、コンソールでパイプラインにアクセスできます:
CodePipelineコンソールを開く
ソース
- Name: Source
Actions:
- Name: Source
ActionTypeId:
Category: Source
Owner: AWS
Provider: S3
Version: "1"
RunOrder: 1
Configuration:
PollForSourceChanges: "false"
S3Bucket: !Ref SourceBucket
S3ObjectKey: my-repo/refs/heads/main/repo.zip
OutputArtifacts:
- Name: source
Namespace: Source
前述のとおり、このパイプラインはS3バケットからアプリケーションのソースコードを取得するように構成されています。ここでは、S3バケット名とソースファイルアーカイブが保存されているキーなどの情報を提供しています。
ビルド
- Name: Build
Actions:
- Name: build_image
ActionTypeId:
Category: Build
Owner: AWS
Provider: ECRBuildAndPublish
Version: "1"
RunOrder: 1
Configuration:
ECRRepositoryName: !Ref ECRRepositoryName
ImageTags: "#{Source.ETag}"
InputArtifacts:
- Name: source
このステージでは、ECRBuildAndPublishアクションを使用してコンテナイメージを構築します。ソースリポジトリのルートにDockerfileがあることを前提としてデフォルトの場所を使用し、設定したECRリポジトリにプッシュします。S3バケット内のソースコードリポジトリアーカイブのETagを使用してコンテナイメージにタグ付けされます。これはリポジトリファイルのハッシュであり、この場合はGitコミットIDに似た扱いをしています。
デプロイ
- Name: Deploy
Actions:
- Name: deploy_eks
ActionTypeId:
Category: Deploy
Owner: AWS
Provider: EKS
Version: "1"
RunOrder: 1
Region: us-west-2
Configuration:
ClusterName: !Ref EKSClusterName
HelmChartLocation: chart
HelmReleaseName: ui
HelmValuesFiles: ../values.yaml
Namespace: ui
EnvironmentVariables:
- Name: IMAGE_REPOSITORY
Value: !Sub "${AWS::AccountId}.dkr.ecr.${AWS::Region}.amazonaws.com/${ECRRepositoryName}"
- Name: IMAGE_TAG
Value: "#{Source.ETag}"
InputArtifacts:
- Name: source
最後に、パイプラインはEKSDeployアクションを使用してワークロードをEKSクラスターにデプロイします。ソースリポジトリのchartディレクトリにあるHelmチャートを使用するように構成しています。
注目すべき重要な設定パラメータはEnvironmentVariablesセクションで、構築されたコンテナイメージが使用されるようにIMAGE_TAG値を提供します。「ビルド」ステージと同様に、S3内のリポジトリコードアーカイブのETag値を使用して、新しく構築されたイメージが使用されるようにしています。