チュートリアル: AWSでワークスペースのインフラストラクチャをセットアップする
このチュートリアルでは、GitLabワークスペースのインフラストラクチャをAWS上に、OpenTofu(Terraformのオープンソースフォーク)とInfrastructure as Code(IaC)を使用して設定する方法を説明します。
はじめる前
このチュートリアルを進めるには、以下が必要です:
- Amazon Web Services(AWS)アカウント。
- ワークスペース環境用のドメイン名。
GitLabワークスペースインフラストラクチャを設定するには:
- リポジトリをフォークする
- AWSの認証情報を設定する
- ドメインと証明書を準備する
- 必要なキーを作成する
- Kubernetes向けGitLabエージェントのトークンを作成する
- GitLab OAuthを設定する
- CI/CD変数を設定する
- Kubernetes向けGitLabエージェントの設定を更新する
- パイプラインを実行する
- DNSレコードを設定する
- エージェントを承認する
- ワークスペースを作成してセットアップを確認する
リポジトリをフォークする
まず、環境に合わせて設定できるように、インフラストラクチャセットアップリポジトリのコピーを作成する必要があります。
個人のネームスペースにあるプロジェクトからワークスペースを作成することはできません。代わりに、リポジトリをトップレベルグループまたはサブグループにフォークします。
リポジトリをフォークするには:
- Workspaces Infrastructure Setup 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などです。 - 作成して登録を選択します。
- トークンとGitLab Relay (KAS) アドレスを後で使用するために保存します。
- 続行するを選択します。
GitLab OAuthを設定する
次に、ワークスペースに安全にアクセスするためにOAuth認証を設定します。
GitLab OAuthを設定するには:
右上隅で、アバターを選択します。
プロファイルを編集を選択します。
左サイドバーで、アクセス > アプリケーションを選択します。
OAuth applicationsまでスクロールします。
新しいアプリケーションを追加を選択します。
次の設定を更新します:
- 名前: GitLabワークスペースプロキシ
- リダイレクトURI: たとえば、
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 Relay (KAS) アドレス。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(EKS)クラスター。
- Kubernetes向けGitLabエージェントHelmリリース。
- 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ワークスペースインフラストラクチャを正常にセットアップしました。これで、ユーザーは自分のプロジェクト用に開発ワークスペース環境を作成できるようになりました。
イシューが発生した場合は、ログで詳細を確認し、ワークスペースのトラブルシューティングを参照してガイダンスを得てください。