正式なドキュメントは英語版であり、この日本語訳はAI支援翻訳により作成された参考用のものです。日本語訳の一部の内容は人間によるレビューがまだ行われていないため、翻訳のタイミングにより英語版との間に差異が生じることがあります。最新かつ正確な情報については、英語版をご参照ください。

Amazon EKSクラスターを作成する

Infrastructure as Code (IaC)を使用して、Amazon Elastic Kubernetes Service (EKS)上にクラスターを作成できます。このプロセスでは、AWSとKubernetes Terraformプロバイダーを使用して、EKSクラスターを作成します。Kubernetes向けGitLabエージェントを使用して、GitLabにクラスターを接続します。

はじめる前:

ステップ:

  1. サンプルプロジェクトをインポートします
  2. Kubernetes用エージェントを登録する
  3. プロジェクトを設定します
  4. クラスターをプロビジョニングします

サンプルプロジェクトをインポートします

Infrastructure as Codeを使用してGitLabからクラスターを作成するには、クラスターを管理するためのプロジェクトを作成する必要があります。このチュートリアルでは、サンプルプロジェクトから始めて、必要に応じて変更します。

URLでサンプルプロジェクトをインポートすることから始めます。

プロジェクトをインポートするには:

  1. GitLabの左側のサイドバーで、検索または移動先を選択します。
  2. すべてのプロジェクトを表示を選択します。
  3. ページの右側にある新規プロジェクトを選択します。
  4. プロジェクトのインポートを選択します。
  5. リポジトリのURLを選択します。
  6. GitリポジトリのURLには、https://gitlab.com/gitlab-org/configure/examples/gitlab-terraform-eks.gitを入力します。
  7. フィールドに入力し、プロジェクトを作成を選択します。

このプロジェクトは以下を提供します:

エージェントを登録

Kubernetes用GitLabエージェントを作成するには:

  1. 左側のサイドバーで、操作 > Kubernetesクラスターを選択します。
  2. **クラスターに接続(エージェント)**を選択します。
  3. Select an agent(エージェントを選択)ドロップダウンリストから、eks-agentを選択し、エージェントの登録を選択します。
  4. GitLabは、エージェントの登録トークンを生成します。後で必要になるため、このシークレットトークンを安全に保管してください。
  5. GitLabは、エージェントサーバー(KAS)のアドレスを提供します。これも後で必要になります。

AWS認証情報をセットアップ

GitLabでAWSを認証する場合は、AWS認証情報をセットアップします。

  1. IAMユーザーまたはIAMロールを作成します。

  2. 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": "*"
        }
      ]
    }
  3. ユーザーまたはロールのアクセスキーを作成する

  4. アクセスキーとシークレットを保存します。GitLabでAWSを認証するには、これらが必要です。

プロジェクトを設定する

CI/CD環境変数を使用して、プロジェクトを設定します。

Required configuration(必要な設定):

  1. 左側のサイドバーで、設定 > CI/CDを選択します。
  2. 変数を展開します。
  3. AWS_ACCESS_KEY_ID変数をAWSアクセスキーIDに設定します。
  4. AWS_SECRET_ACCESS_KEY変数をAWSシークレットアクセスキーに設定します。
  5. TF_VAR_agent_token変数を、前のタスクに表示されるエージェントトークンに設定します。
  6. 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で、次の手順を実行します:

  1. 左側のサイドバーで、ビルド > パイプラインに移動します。
  2. Play(Play)( play )の横にあるドロップダウンリストアイコン( chevron-lg-down )を選択します。
  3. デプロイを選択して、デプロイメントジョブを手動でトリガーします。

パイプラインが正常に終了すると、新しいクラスターを表示できます:

  • AWS内: EKSコンソールから、Amazon EKS > Clusters(Amazon EKS > クラスター)を選択します。
  • GitLabで、次の手順を実行します: 左側のサイドバーで、操作 > Kubernetesクラスターを選択します。

クラスターを使用する

クラスターをプロビジョニングすると、GitLabに接続され、デプロイの準備が整います。接続を確認するには:

  1. 左側のサイドバーで、操作 > Kubernetesクラスターを選択します。
  2. リストで、接続ステータス列を表示します。

接続の機能の詳細については、Kubernetes向けGitLabエージェントのドキュメントを参照してください。

クラスターを削除

クリーンアップジョブは、デフォルトではパイプラインに含まれていません。作成されたすべてのリソースを削除するには、クリーンアップジョブを実行する前に、GitLab CI/CDテンプレートを変更する必要があります。

すべてのリソースを削除するには:

  1. 次の内容を.gitlab-ci.ymlファイルに追加します:

    stages:
      - init
      - validate
      - test
      - build
      - deploy
      - cleanup
    
    destroy:
      extends: .terraform:destroy
      needs: []
  2. 左側のサイドバーで、ビルド > パイプラインを選択し、最新のパイプラインを選択します。

  3. destroyジョブの場合は、Play(Play)( play )を選択します。