翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
このチュートリアルでは、Amazon EKS で設定したクラスターにコードをデプロイするデプロイアクションを CodePipeline で作成します。
EKS アクションは、パブリック EKS クラスターとプライベート EKS クラスターの両方をサポートします。プライベートクラスターは EKS で推奨されるタイプですが、どちらのタイプもサポートされています。
注記
コンソールでのパイプライン作成の一環として、CodePipeline は S3 アーティファクトバケットをアーティファクトとして使用します (これは S3 ソースアクションで使用するバケットとは異なります)。S3 アーティファクトバケットがパイプラインのアカウントとは異なるアカウントにある場合は、S3 アーティファクトバケットが によって所有 AWS アカウント されており、安全で信頼できることを確認してください。
注記
このアクションではCodePipeline マネージド CodeBuild コンピューティングを使用して、ビルド環境でコマンドを実行します。コマンドアクションを実行すると、 AWS CodeBuildで別途料金が発生します。
注記
EKS
デプロイアクションは V2 タイプのパイプラインでのみ使用できます。
前提条件
このチュートリアルで CD パイプラインを作成する前に、いつくかのリソースを用意する必要があります。使用を開始するために必要なものは以下のとおりです。
注記
これらのリソースはすべて、同じ AWS リージョン内に作成する必要があります。
-
サンプル
deployment.yaml
ファイルを追加するソースコントロールリポジトリ (このチュートリアルでは GitHub を使用します)。 -
既存の CodePipeline サービスロールを使用する必要があります。このロールは、ステップ 3: IAM で CodePipeline サービスロールポリシーを更新する以下を使用してこのアクションのアクセス許可で更新します。必要なアクセス許可は、作成するクラスターのタイプに基づきます。詳細については、「サービスロールのポリシーのアクセス許可」を参照してください。
-
ECR またはイメージリポジトリにプッシュした作業イメージとリポジトリタグ。
これらの前提条件を満たした後、チュートリアルに進んで CD パイプラインを作成できます。
ステップ 1: (オプション) Amazon EKS でクラスターを作成する
パブリックエンドポイントまたはプライベートエンドポイントを使用して EKS クラスターを作成することを選択できます。
次の手順では、EKS でパブリッククラスターまたはプライベートクラスターを作成します。クラスターを既に作成している場合は、このステップはオプションです。
Amazon EKS でパブリッククラスターを作成する
このステップでは、EKS でクラスターを作成します。
パブリッククラスターを作成する
-
EKS コンソールを開き、クラスターの作成を選択します。
-
名前 で、クラスターに名前を付けます。[Next (次へ)] を選択します。
-
[Create] (作成) を選択します。
Amazon EKS でプライベートクラスターを作成する
プライベートエンドポイントを使用してクラスターを作成する場合は、プライベートサブネットのみをアタッチし、それらにインターネット接続があることを確認してください。
プライベートエンドポイントを使用してクラスターを作成するには、次の 5 つのサブステップに従います。
コンソールで VPC を作成する
-
VPC コンソールを開き、VPC の作成を選択します。
-
[VPC 設定] で、[VPC など] を選択します。
-
1 つのパブリックサブネットと 4 つのプライベートサブネットを作成することを選択します。[Create VPC (VPC の作成)] を選択します。
-
サブネットページで、プライベート を選択します。
VPC 内のプライベートサブネットを確認する
-
VPC に移動し、VPC ID を選択して VPC の詳細ページを開きます。
-
VPC の詳細ページで、リソースマップタブを選択します。
-
図を表示し、プライベートサブネットを書き留めます。サブネットにはパブリックまたはプライベートのステータスを示すラベルが表示され、各サブネットはルートテーブルにマッピングされます。
プライベートクラスターにはすべてのプライベートサブネットがあることに注意してください。
-
NAT ゲートウェイをホストするパブリックサブネットを作成します。一度に VPC にアタッチできるインターネットゲートウェイは 1 つだけです。
パブリックサブネットに NAT ゲートウェイを作成する
-
パブリックサブネットで、NAT ゲートウェイを作成します。VPC コンソールに移動し、インターネットゲートウェイを選択します。[インターネットゲートウェイの作成] を選択します。
-
名前 に、インターネットゲートウェイの名前を入力します。[インターネットゲートウェイの作成] を選択します。
プライベートサブネットのルートテーブルを更新して、トラフィックを NAT ゲートウェイに転送します。
プライベートサブネットのルートテーブルに NAT ゲートウェイを追加する
-
VPC コンソールに移動し、サブネットを選択します。
-
プライベートサブネットごとにそれを選択し、詳細ページでそのサブネットのルートテーブルを選択し、ルートテーブルの編集を選択します。
-
プライベートサブネットのルートテーブルを更新して、インターネットトラフィックを NAT ゲートウェイに転送します。[Add Rule] (ルートの追加) を選択します。追加するオプションから NAT ゲートウェイを選択します。作成したインターネットゲートウェイを選択します。
-
パブリックサブネットの場合は、カスタムルートテーブルを作成します。パブリックサブネットのネットワークアクセスコントロールリスト (ACL) で、プライベートサブネットからのインバウンドトラフィックが許可されていることを確認します。
-
[Save changes] (変更の保存) をクリックします。
このステップでは、EKS でクラスターを作成します。
プライベートクラスターを作成する
-
EKS コンソールを開き、クラスターの作成を選択します。
-
名前 で、クラスターに名前を付けます。[Next (次へ)] を選択します。
-
VPC およびその他の設定情報を指定します。[Create] (作成) を選択します。
EKS クラスターは、パブリッククラスターでもプライベートクラスターでもかまいません。このステップは、プライベートエンドポイントのみを持つクラスター用です。クラスターがプライベートであることを確認してください。
ステップ 2: Amazon EKS でプライベートクラスターを設定する
このステップは、プライベートクラスターを作成した場合にのみ適用されます。このステップは、プライベートエンドポイントのみを持つクラスター用です。
クラスターを設定する
-
ネットワークタブの EKS クラスターにのみプライベートサブネットをアタッチします。の VPC のプライベートサブネットを決定するセクションでキャプチャされたプライベートサブネットをアタッチしますステップ 1: (オプション) Amazon EKS でクラスターを作成する。
-
CodePipeline はパイプラインの S3 アーティファクトバケットからアーティファクトを保存および取得するため、プライベートサブネットがインターネットにアクセスできることを確認します。
ステップ 3: IAM で CodePipeline サービスロールポリシーを更新する
このステップでは、 などの既存の CodePipeline サービスロールをcp-service-role
、CodePipeline がクラスターに接続するために必要なアクセス許可で更新します。既存のロールがない場合は、新しいロールを作成します。
CodePipeline サービスロールを次のステップで更新します。
CodePipeline サービスロールポリシーを更新するには
-
https://console.aws.amazon.com/iam/
で IAM コンソール を開きます。 -
コンソールダッシュボードで [ロール] を選択します。
-
などの CodePipeline サービスロールを検索します
cp-service-role
。 -
新しいインラインポリシーを追加します。
-
ポリシーエディタで、次のように入力します。
-
パブリッククラスターの場合は、次のアクセス許可を追加します。
{ "Statement": [ { "Sid": "EksClusterPolicy", "Effect": "Allow", "Action": "eks:DescribeCluster", "Resource": "arn:aws:eks:us-east-1:
ACCOUNT-ID
:cluster/my-cluster" }, { "Sid": "EksVpcClusterPolicy", "Effect": "Allow", "Action": [ "ec2:DescribeDhcpOptions", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeVpcs" ], "Resource": [ "*" ] } ], "Version": "2012-10-17" } -
プライベートクラスターの場合は、次のアクセス許可を追加します。プライベートクラスターには、該当する場合、VPC に対する追加のアクセス許可が必要です。
{ "Statement": [ { "Sid": "EksClusterPolicy", "Effect": "Allow", "Action": "eks:DescribeCluster", "Resource": "arn:aws:eks:us-east-1:
ACCOUNT-ID
:cluster/my-cluster" }, { "Sid": "EksVpcClusterPolicy", "Effect": "Allow", "Action": [ "ec2:DescribeDhcpOptions", "ec2:DescribeNetworkInterfaces", "ec2:DescribeRouteTables", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeVpcs" ], "Resource": [ "*" ] }, { "Effect": "Allow", "Action": "ec2:CreateNetworkInterface", "Resource": "*", "Condition": { "StringEqualsIfExists": { "ec2:Subnet": [ "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-03ebd65daeEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0e377f6036EXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0db658ba1cEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0db658ba1cEXAMPLE" ] } } }, { "Effect": "Allow", "Action": "ec2:CreateNetworkInterfacePermission", "Resource": "*", "Condition": { "ArnEquals": { "ec2:Subnet": [ "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-03ebd65daeEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0e377f6036EXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0db658ba1cEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0db658ba1cEXAMPLE" ] } } }, { "Effect": "Allow", "Action": "ec2:DeleteNetworkInterface", "Resource": "*", "Condition": { "StringEqualsIfExists": { "ec2:Subnet": [ "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-03ebd65daeEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0e377f6036EXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0db658ba1cEXAMPLE", "arn:aws:ec2:us-east-1:ACCOUNT-ID
:subnet/subnet-0db658ba1cEXAMPLE" ] } } } ], "Version": "2012-10-17" }
-
-
[ポリシーの更新] を選択してください。
ステップ 4: CodePipeline サービスロールのアクセスエントリを作成する
このステップでは、ステップ 3 で更新した CodePipeline サービスロールとマネージドアクセスポリシーを追加するアクセスエントリをクラスターに作成します。
-
EKS コンソールを開き、クラスターに移動します。
-
[リモートアクセス] タブを選択してください。
-
IAM アクセスエントリで、アクセスエントリの作成を選択します。
-
IAM プリンシパル ARN で、 など、 アクション用に更新したロールを入力します
cp-service-role
。[Next (次へ)] を選択します。 -
ステップ 2: アクセスポリシーの追加ページで、ポリシー名で、 などのアクセス用の管理ポリシーを選択します
AmazonEKSClusterAdminPolicy
。[Add policy] を選択します。[Next (次へ)] を選択します。注記
これは、CodePipeline アクションが Kubernetes と通信するために使用するポリシーです。ベストプラクティスとして、管理ポリシーではなく最小特権でポリシーのアクセス許可の範囲を絞り込むには、代わりにカスタムポリシーをアタッチします。
-
レビューページで、作成を選択します。
ステップ 5: ソースリポジトリを作成し、helm chart
設定ファイルを追加する
このステップでは、アクションに適した設定ファイル (Kubernetes マニフェストファイルまたは Helm チャート) を作成し、その設定ファイルをソースリポジトリに保存します。設定に適した ファイルを使用します。詳細については、「httpshttps://kubernetes.io/docs/reference/kubectl/quick-reference/
-
Kubernetes の場合は、マニフェストファイルを使用します。
-
Helm の場合は、Helm チャートを使用します。
-
既存の GitHub リポジトリを作成または使用します。
-
以下の例に示すように、Helm チャートファイルのリポジトリに新しい構造を作成します。
mychart |-- Chart.yaml |-- charts |-- templates | |-- NOTES.txt | |-- _helpers.tpl | |-- deployment.yaml | |-- ingress.yaml | `-- service.yaml `-- values.yaml
-
リポジトリのルートレベルに ファイルを追加します。
ステップ 6: パイプラインを作成する
CodePipeline ウィザードを使用してパイプラインステージを作成し、ソースリポジトリを接続します。
パイプラインを作成するには
CodePipeline コンソール (https://console.aws.amazon.com/codepipeline/
) を開きます。 -
[ようこそ] ページ、[開始方法] ページ、または [パイプライン] ページで、[パイプラインの作成] を選択します。
-
[ステップ 1: 作成オプションを選択する] ページの [作成オプション] で、[カスタムパイプラインを構築する] オプションを選択します。[次へ] を選択します。
-
[ステップ 2: パイプラインの設定を選択する] で、[パイプライン名] に「
MyEKSPipeline
」と入力します。 -
CodePipeline は、特徴と料金が異なる V1 タイプと V2 タイプのパイプラインを提供しています。V2 タイプは、コンソールで選択できる唯一のタイプです。詳細については、「パイプラインタイプ」を参照してください。CodePipeline の料金については、料金
を参照してください。 -
サービスロールで、ステップ 3 で更新したサービスロールを選択します。
-
[詳細設定] をデフォルト設定のままにし、[次へ] を選択します。
-
ステップ 3: ソースステージの追加ページで、ソースプロバイダー で、GitHub リポジトリへの接続を作成することを選択します。
-
ステップ 4: ビルドステージの追加ページで、スキップを選択します。
-
ステップ 5: デプロイステージの追加ページで、Amazon EKS を選択します。
-
デプロイ設定タイプで、Helm を選択します。
-
Helm チャートの場所に、 などのリリース名を入力します
my-release
。Helm チャートの場所には、 などの Helm チャートファイルのパスを入力しますmychart
。 -
[Next (次へ)] を選択します。
-
-
[Step 6: Review] ページで、パイプラインの設定を確認し、[Create pipeline] を選択してパイプラインを作成します。
-
パイプラインが正常に実行されたら、詳細を表示を選択してアクションのログを表示し、アクションの出力を表示します。