メインコンテンツまでスキップ

パイプラインのセットアップ

パイプラインを実行する前に、CodePipelineがクラスターにデプロイできるようにクラスターを構成しましょう。CodePipelineはクラスター上で操作(kubectlhelm)を実行するための権限が必要です。この操作を成功させるには、codepipelineパイプラインサービスロールをクラスターのアクセスエントリとして追加する必要があります:

~$aws eks create-access-entry --cluster-name ${EKS_CLUSTER_NAME} \
--principal-arn "arn:aws:iam::${AWS_ACCOUNT_ID}:role/${EKS_CLUSTER_NAME}-codepipeline-role" \
--type STANDARD
~$aws eks associate-access-policy --cluster-name ${EKS_CLUSTER_NAME} \
--principal-arn "arn:aws:iam::${AWS_ACCOUNT_ID}:role/${EKS_CLUSTER_NAME}-codepipeline-role" \
--policy-arn "arn:aws:eks::aws:cluster-access-policy/AmazonEKSClusterAdminPolicy" \
--access-scope '{"type":"cluster"}'

私たちのために設定されたCodePipelineを調査し、それを作成するために使用されたCloudFormationを参照してみましょう。

パイプラインの概要

以下のボタンを使用して、コンソールでパイプラインにアクセスできます:

AWS console iconCodePipelineコンソールを開く

ソース

        - 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値を使用して、新しく構築されたイメージが使用されるようにしています。