Amazon EKSクラスターを作成する
Infrastructure as Code (IaC)を使用して、Amazon Elastic Kubernetes Service (EKS)上にクラスターを作成できます。このプロセスでは、AWSとKubernetes Terraformプロバイダーを使用して、EKSクラスターを作成します。Kubernetes向けGitLabエージェントを使用して、GitLabにクラスターを接続します。
はじめる前:
- 設定済みのセキュリティ認証情報を持つAmazon Web Services(AWS)アカウント。
- Runnerを使用して、GitLab CI/CDパイプラインを実行できます。
ステップ:
サンプルプロジェクトをインポートします
Infrastructure as Codeを使用してGitLabからクラスターを作成するには、クラスターを管理するためのプロジェクトを作成する必要があります。このチュートリアルでは、サンプルプロジェクトから始めて、必要に応じて変更します。
URLでサンプルプロジェクトをインポートすることから始めます。
プロジェクトをインポートするには:
- GitLabの左側のサイドバーで、検索または移動先を選択します。
- すべてのプロジェクトを表示を選択します。
- ページの右側にある新規プロジェクトを選択します。
- プロジェクトのインポートを選択します。
- リポジトリのURLを選択します。
- GitリポジトリのURLには、
https://gitlab.com/gitlab-org/configure/examples/gitlab-terraform-eks.gitを入力します。 - フィールドに入力し、プロジェクトを作成を選択します。
このプロジェクトは以下を提供します:
- Amazon Virtual Private Cloud (VPC)。
- Amazon Elastic Kubernetes Service (Amazon EKS)クラスター。
- クラスターにインストールされているKubernetes向けGitLabエージェント。
エージェントを登録
Kubernetes用GitLabエージェントを作成するには:
- 左側のサイドバーで、操作 > Kubernetesクラスターを選択します。
- **クラスターに接続(エージェント)**を選択します。
- Select an agent(エージェントを選択)ドロップダウンリストから、
eks-agentを選択し、エージェントの登録を選択します。 - GitLabは、エージェントの登録トークンを生成します。後で必要になるため、このシークレットトークンを安全に保管してください。
- GitLabは、エージェントサーバー(KAS)のアドレスを提供します。これも後で必要になります。
AWS認証情報をセットアップ
GitLabでAWSを認証する場合は、AWS認証情報をセットアップします。
IAMユーザーまたはロールに、プロジェクトに適した権限があることを確認してください。このサンプルプロジェクトでは、次のJSONブロックにリストされている権限が必要です。独自のプロジェクトをセットアップするときに、これらの権限を展開できます。
// IAM custom Policy definition { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "ec2:*", "eks:*", "elasticloadbalancing:*", "autoscaling:*", "cloudwatch:*", "logs:*", "kms:DescribeKey", "kms:TagResource", "kms:UntagResource", "kms:ListResourceTags", "kms:CreateKey", "kms:CreateAlias", "kms:ListAliases", "kms:DeleteAlias", "iam:AddRoleToInstanceProfile", "iam:AttachRolePolicy", "iam:CreateInstanceProfile", "iam:CreateRole", "iam:CreateServiceLinkedRole", "iam:GetRole", "iam:ListAttachedRolePolicies", "iam:ListRolePolicies", "iam:ListRoles", "iam:PassRole", "iam:DetachRolePolicy", "iam:ListInstanceProfilesForRole", "iam:DeleteRole", "iam:CreateOpenIDConnectProvider", "iam:CreatePolicy", "iam:TagOpenIDConnectProvider", "iam:GetPolicy", "iam:GetPolicyVersion", "iam:GetOpenIDConnectProvider", "iam:DeleteOpenIDConnectProvider", "iam:ListPolicyVersions", "iam:DeletePolicy" ], "Resource": "*" } ] }アクセスキーとシークレットを保存します。GitLabでAWSを認証するには、これらが必要です。
プロジェクトを設定する
CI/CD環境変数を使用して、プロジェクトを設定します。
Required configuration(必要な設定):
- 左側のサイドバーで、設定 > CI/CDを選択します。
- 変数を展開します。
AWS_ACCESS_KEY_ID変数をAWSアクセスキーIDに設定します。AWS_SECRET_ACCESS_KEY変数をAWSシークレットアクセスキーに設定します。TF_VAR_agent_token変数を、前のタスクに表示されるエージェントトークンに設定します。TF_VAR_kas_address変数を、前のタスクに表示されるエージェントサーバーアドレスに設定します。
Optional configuration(オプションの設定):
ファイルvariables.tfには、必要に応じてオーバーライドできる他の変数が含まれています:
TF_VAR_region: クラスターのリージョンを設定します。TF_VAR_cluster_name: クラスターの名前を設定します。TF_VAR_cluster_version: Kubernetesのバージョンを設定します。TF_VAR_instance_type: Kubernetesノードのインスタンスタイプを設定します。TF_VAR_instance_count: Kubernetesノードの数を設定します。TF_VAR_agent_namespace: Kubernetes向けGitLabエージェントのKubernetesネームスペースを設定します。
詳細なリソースオプションについては、AWS TerraformプロバイダーおよびKubernetes Terraformプロバイダーのドキュメントをご覧ください。
クラスターをプロビジョニングする
プロジェクトを設定したら、クラスターのプロビジョニングを手動でトリガーします。GitLabで、次の手順を実行します:
- 左側のサイドバーで、ビルド > パイプラインに移動します。
- Play(Play)( )の横にあるドロップダウンリストアイコン( )を選択します。
- デプロイを選択して、デプロイメントジョブを手動でトリガーします。
パイプラインが正常に終了すると、新しいクラスターを表示できます:
- AWS内: EKSコンソールから、Amazon EKS > Clusters(Amazon EKS > クラスター)を選択します。
- GitLabで、次の手順を実行します: 左側のサイドバーで、操作 > Kubernetesクラスターを選択します。
クラスターを使用する
クラスターをプロビジョニングすると、GitLabに接続され、デプロイの準備が整います。接続を確認するには:
- 左側のサイドバーで、操作 > Kubernetesクラスターを選択します。
- リストで、接続ステータス列を表示します。
接続の機能の詳細については、Kubernetes向けGitLabエージェントのドキュメントを参照してください。
クラスターを削除
クリーンアップジョブは、デフォルトではパイプラインに含まれていません。作成されたすべてのリソースを削除するには、クリーンアップジョブを実行する前に、GitLab CI/CDテンプレートを変更する必要があります。
すべてのリソースを削除するには:
次の内容を
.gitlab-ci.ymlファイルに追加します:stages: - init - validate - test - build - deploy - cleanup destroy: extends: .terraform:destroy needs: []左側のサイドバーで、ビルド > パイプラインを選択し、最新のパイプラインを選択します。
destroyジョブの場合は、Play(Play)( )を選択します。