チュートリアル: AWSでワークスペースのインフラストラクチャをセットアップする
このチュートリアルでは、OpenTofu、つまりInfrastructure as Code (IaC) を介したTerraformのオープンソースフォークを使用して、AWS上にGitLabワークスペースのインフラストラクチャをセットアップする方法を説明します。
はじめる前
このチュートリアルを実行するには、以下が必要です:
- Amazon Web Services (AWS) のアカウント。
- ワークスペース環境のドメイン名。
GitLabワークスペースのインフラストラクチャをセットアップするには:
- リポジトリをフォークする
- AWS認証情報を設定する
- ドメインと証明書を準備する
- 必要なキーを作成する
- Kubernetes向けGitLabエージェントのトークンを作成します
- GitLab OAuthを設定する
- CI/CD変数を設定する
- Kubernetes向けGitLabエージェントの設定を更新する
- パイプラインを実行します
- DNSレコードを設定する
- エージェントを承認する
- ワークスペースを作成して設定を確認する
フォークのリポジトリ
まず、インフラストラクチャ設定リポジトリの独自のコピーを作成して、自分の環境に合わせて設定できるようにする必要があります。
個人のネームスペースにあるプロジェクトからワークスペースを作成することはできません。代わりに、リポジトリをトップレベルグループまたはサブグループにフォークします。
リポジトリをフォークするには:
- ワークスペースインフラストラクチャ設定AWSリポジトリに移動します。
- リポジトリのフォークを作成します。詳細については、フォークを参照してください
AWS認証情報を設定する
次に、インフラストラクチャを適切にプロビジョニングできるように、AWSで必要な権限を設定します。
AWS認証情報を設定するには:
次の権限を割り当てます:
{ "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": "*" } ] }ユーザーまたはロールのアクセスキーを作成する。
アクセスキーのIDとシークレットアクセスキーを保存しますこれらは、後でCI/CD変数を設定するときに必要になります。
ドメインと証明書を準備する
ワークスペースにアクセスできるようにするには、接続を保護するためのドメインとTLS証明書が必要です。
ドメインと証明書を準備するには:
- ドメインを購入するか、ワークスペース環境の既存のドメインを使用します。
- TLS証明書を作成する:
- GitLabワークスペースプロキシドメイン。たとえば
workspaces.example.devなどです。 - GitLabワークスペースプロキシワイルドカードドメイン。たとえば
*.workspaces.example.devなどです。
- GitLabワークスペースプロキシドメイン。たとえば
詳細については、TLS証明書を生成するを参照してください。
必要なキーを作成する
次に、認証およびSSH接続用のセキュリティキーを作成する必要があります。
必要なキーを作成するには:
ランダムな文字、数字、および特殊文字で構成される署名キーを生成します。例えば、次を実行します:
openssl rand -base64 32SSHホストキーを生成する:
ssh-keygen -f ssh-host-key -N '' -t rsa
Kubernetes向けGitLabエージェントのトークンを作成します
Kubernetes向けGitLabエージェントサーバーは、AWS KubernetesクラスタリングをGitLabに接続します。
エージェントのトークンを作成するには:
- グループに移動します。
- 左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
- 操作 > Kubernetesクラスターを選択します
- クラスターに接続を選択します
- エージェントの名前を入力し、後で使用できるように保存します。たとえば
gitlab-workspaces-agentk-eksなどです。 - 作成して登録を選択します。
- トークンとKASアドレスを保存して、後で使用できるようにします。
- 次に進むを選択します。
GitLab OAuthを設定する
次に、OAuth認証を設定して、ワークスペースに安全にアクセスします。
GitLab OAuthを設定するには:
ユーザー設定に移動します:
- プロファイル画像を選択し、設定を選択します。
左側のサイドバーで、アプリケーションを選択します。
OAuth applications(OAuthアプリケーション)までスクロールダウンします。
新しいアプリケーションを追加を選択します。
次の設定を更新します:
- 名前: GitLabワークスペースプロキシ
- リダイレクト: たとえば
https://workspaces.example.dev/auth/callbackなどです。ユーザー定義ドメインに置き換えます。 - 非公開チェックボックスを選択します。
- スコープ:
api、read_user、openid、およびprofile。
アプリケーションを保存を選択します。
CI/CD変数のアプリケーションIDとシークレットを保存します。
次に進むを選択します。
CI/CD変数を設定する
次に、インフラストラクチャパイプラインを実行できるように、必要な変数をCI/CD設定に追加する必要があります。
CI/CD変数を設定するには:
左側のサイドバーで、検索または移動先を選択して、プロジェクトを見つけます。
設定 > CI/CDを選択します。
変数を展開します。
プロジェクト変数セクションで、次の必須変数を追加します:
変数 値 AWS_ACCESS_KEY_IDAWSアクセスキーのID AWS_SECRET_ACCESS_KEYAWSシークレットアクセスキー TF_VAR_agent_tokenKubernetes向けGitLabエージェントのトークン TF_VAR_kas_addressGitLab Kubernetesエージェントサーバーのアドレス。GitLab Self-Managedインスタンスを使用している場合は必須です。たとえば wss://kas.gitlab.comなどです。TF_VAR_workspaces_proxy_auth_client_idOAuthアプリケーションクライアントID。 TF_VAR_workspaces_proxy_auth_client_secretOAuthアプリケーションシークレット TF_VAR_workspaces_proxy_auth_redirect_uriOAuthコールバックURL。たとえば https://workspaces.example.dev/auth/callbackなどです。TF_VAR_workspaces_proxy_auth_signing_key生成された署名キー。 TF_VAR_workspaces_proxy_domainワークスペースプロキシのドメイン。 TF_VAR_workspaces_proxy_domain_certプロキシドメインのTLS証明書。 TF_VAR_workspaces_proxy_domain_keyプロキシドメインのTLSキー。 TF_VAR_workspaces_proxy_ssh_host_key生成されたSSHホストキー。 TF_VAR_workspaces_proxy_wildcard_domainワークスペースのワイルドカードドメイン。 TF_VAR_workspaces_proxy_wildcard_domain_certワイルドカードドメインのTLS証明書。 TF_VAR_workspaces_proxy_wildcard_domain_keyワイルドカードドメインのTLSキー。 オプション。これらの変数を追加して、デプロイをカスタマイズします:
変数 値 TF_VAR_regionAWSリージョン。 TF_VAR_zonesAWSアベイラビリティーゾーン TF_VAR_nameリソースの名前プレフィックス。 TF_VAR_cluster_endpoint_public_accessクラスタリングエンドポイントへのパブリックアクセス。 TF_VAR_cluster_node_instance_typeKubernetesノードのEC2インスタンスタイプ。 TF_VAR_cluster_node_count_minワーカーノードの最小数。 TF_VAR_cluster_node_count_maxワーカーノードの最大数 TF_VAR_cluster_node_countワーカーノードの数。 TF_VAR_cluster_node_labelsクラスタリングノードに適用するラベルのマップ。 TF_VAR_agent_namespaceエージェントのKubernetesネームスペース。 TF_VAR_workspaces_proxy_namespaceワークスペースプロキシのKubernetesネームスペース。 TF_VAR_workspaces_proxy_ingress_class_nameIngressクラス名。 TF_VAR_ingress_nginx_namespaceIngress-NGINXのKubernetesネームスペース。
すばらしい出来栄えです。インフラストラクチャデプロイに必要なすべての変数を構成しました。
Kubernetes向けGitLabエージェントの設定を更新する
次に、ワークスペースをサポートするように、Kubernetes向けGitLabエージェントを設定する必要があります。
エージェントの設定を更新するには:
フォークリポジトリで、
.gitlab/agents/gitlab-workspaces-agentk-eks/config.yamlファイルを開きます。config.yamlファイルを含むディレクトリは、Kubernetesトークン用GitLabエージェントの作成ステップで作成したエージェント名と一致する必要があります。次の必須フィールドを使用してファイルを更新します:
remote_development: enabled: true dns_zone: "workspaces.example.dev" # Replace with your domain構成オプションの詳細については、ワークスペース設定を参照してください。
これらの変更をコミットしてリポジトリにプッシュします。
パイプラインを実行します
インフラストラクチャをデプロイする時間です。CI/CDパイプラインを実行して、AWSで必要なすべてのリソースを作成します。
パイプラインを実行するには:
- GitLabプロジェクトで新しいパイプラインを作成します:
- 左側のサイドバーで、ビルド > パイプラインを選択します
- パイプラインを新規作成を選択し、もう一度パイプラインを新規作成を選択して確定します。
planジョブが成功したことを確認し、applyジョブを手動でトリガーします。
OpenTofuコードを実行すると、AWSに次のリソースが作成されます:
- Virtual Private Cloud (VPC)。
- Amazon Elastic Kubernetes Service(Amazon EKS)クラスター
- Kubernetes Helmリリース用GitLabエージェント。
- GitLabワークスペースプロキシHelmリリース。
- Ingress NGINX Helmリリース。
素晴らしい。インフラストラクチャが今、デプロイされています。完了までに時間がかかる場合があります。
DNSレコードを設定する
インフラストラクチャがデプロイされたので、新しい環境を指すようにDNSレコードを設定する必要があります。
DNSレコードを設定するには:
Ingress-NGINXロードバランサーのアドレスをパイプライン出力から取得します:
kubectl get services -n ingress-nginx ingress-nginx-controllerドメインがこのアドレスを指すようにDNSレコードを作成します。例:
workspaces.example.dev→ ロードバランサーのIPアドレス*.workspaces.example.dev→ ロードバランサーのIPアドレス
エージェントを承認する
次に、Kubernetes用GitLabエージェントがGitLabインスタンスに接続することを承認します。
エージェントを承認するには:
- 左側のサイドバーで、検索または移動先を選択して、グループを見つけます。
- 設定 > ワークスペースを選択します。
- グループエージェントセクションで、すべてのエージェントタブを選択します。
- 利用可能なエージェントのリストから、ステータスがブロック済みのエージェントを見つけ、許可を選択します。
- 確認ダイアログで、エージェントを許可するを選択します
ワークスペースを作成して設定を確認する
最後に、テストワークスペースを作成して、すべてが正常に動作していることを確認しましょう。
ワークスペース設定を確認するには:
- ワークスペースを作成するの手順に従って、新しいワークスペースを作成します。
- プロジェクトからコードを選択します。
- ワークスペース名を選択します。
- Web IDEを開いたり、ターミナルにアクセスしたり、プロジェクトファイルを変更したりして、ワークスペースを操作します。
おつかれさまでした。AWS上にGitLabワークスペースのインフラストラクチャが正常にセットアップされました。これで、ユーザーは自分のプロジェクトの開発ワークスペース環境を作成できます。
問題が発生した場合は、ログで詳細を確認し、ガイダンスについてはトラブルシューティングワークスペースを参照してください。