AWSでのGitLabインスタンスのプロビジョニング
AWSでのGitLabインスタンスのインストールに使用可能なInfrastructure as Code
GitLab Environment Toolkit(GET)は、明確な設計思想に基づいたTerraformおよびAnsibleのスクリプト群です。これらのスクリプトは、選択したクラウドプロバイダー上でLinuxパッケージまたはクラウドネイティブハイブリッド環境をデプロイする際に役立ち、GitLabデベロッパーがGitLab Dedicated(例)で使用します。
GitLab Environment Toolkitを使用して、AWS上にクラウドネイティブハイブリッド環境をデプロイできます。ただし必須ではなく、すべての有効な組み合わせをサポートしているとは限りません。なお、スクリプトは現状のまま提供されており、必要に応じて調整できます。
2つと3つのゾーンの高可用性
GitLabのリファレンスアーキテクチャは一般的に3つのゾーンの冗長性を推奨していますが、AWS Well Architectedフレームワークでは、2つのゾーンの冗長性をAWS Well Architectedと見なしています。個々の実装では、最終的な設定のために、2つと3つのゾーンの構成のコストを、独自の高可用性要件に照らして検討する必要があります。
Gitalyクラスター(Praefect)は、整合性投票システムを使用して、同期されたノード間で強力な整合性を実装します。実装されている可用性ゾーンの数に関係なく、ノードの数が偶数であることによって引き起こされる投票の行き詰まりを回避するために、クラスターには常に最小3つのGitalyと3つのPraefectノードが必要です。
すべてのGitLab実装に対応できるAWS PaaS
Linuxパッケージまたはクラウドネイティブハイブリッド実装を使用した両方の実装では、以下のGitLabサービスロールは、AWSサービス(PaaS)で実行できます。インスタンスのスケールに基づいて事前構成されたサイズ設定を必要とするPaaSソリューションは、インスタンスごとのサイズの部品表リストにも記載されます。特定のサイズ設定を必要としないPaaSは、BOMリストに繰り返されません(たとえば、AWS Certificate Authority)。
これらのサービスは、GitLabでテストされています。
ログ集計、送信メールなど、一部のサービスはGitLabによって指定されていませんが、提供されている場合は記載されています。
| GitLabサービス | AWS PaaS(テスト済み) |
|---|---|
| 参照アーキテクチャで言及されているテスト済みのPaaS | |
| PostgreSQL Database(PostgreSQLデータベース) | Amazon RDS PostgreSQL |
| Redis Caching(Redisキャッシュ) | ElastiCache |
| Gitaly Cluster (Git Repository Storage)(Gitalyクラスター(Gitリポジトリストレージ)) (PraefectおよびPostgreSQLを含む) | ASGとインスタンス |
| All GitLab storages besides Git Repository Storage(Gitリポジトリストレージ以外のすべてのGitLabストレージ) (S3互換のGit-LFSを含む) | AWS S3 |
| 補足サービス用にテストされたPaaS | |
| Front End Load Balancing(フロントエンドロードバランシング) | AWS ELB |
| Internal Load Balancing(内部ロードバランシング) | AWS ELB |
| Outbound Email Services(送信メールサービス) | AWS Simple Email Service(SES) |
| Certificate Authority and Management(Certificate Authorityと管理) | AWS Certificate Authority(ACM) |
| DNS | AWS Route53(テスト済み) |
| GitLab and Infrastructure Log Aggregation(GitLabおよびインフラストラクチャログ集計) | AWS CloudWatch Logs |
| Infrastructure Performance Metrics(インフラストラクチャのパフォーマンスメトリクス) | AWS CloudWatch Metrics |
| 補足的なサービスと設定 | |
| Prometheus for GitLab | AWS EKS(クラウドネイティブのみ) |
| Grafana for GitLab | AWS EKS(クラウドネイティブのみ) |
| Encryption (In Transit / At Rest)(暗号化(転送時 / 保存時)) | AWS KMS |
| Secrets Storage for Provisioning(プロビジョニングのシークレットストレージ) | AWS Secrets Manager |
| Configuration Data for Provisioning(プロビジョニングの設定データ) | AWS Parameter Store |
| AutoScaling Kubernetes(オートスケールKubernetes) | EKSオートスケールエージェント |