はじめまして。デジタルイノベーション推進室の戦闘員Oです。

今回は「企業がSonarQubeをお試し利用する構成」(正式採用の際には拡張できる最小限の構成)を目指します。

目次

  1. 今回のゴール:SonarQube ServerのAWS構成イメージ
  2. VPC・NAT・EC2・VPCエンドポイント・RDSの作成
  3. SonerQube Serverのインストール
  4. Application Load Balancerの設定
  5. さいごに

1.今回のゴール:SonarQube ServerのAWS構成イメージ

SonarQube Serverを企業がお試し利用することを考え、上記のAWS構成にしました。

  • 基本的なAWS知識(VPCやEC2)については理解できている方を対象にしています。
  • 静的解析するソースコード量が多くなる場合を考慮し、データベースはRDSとします。
  • CloudFrontやWAF、カスタムドメインなどに拡張できるよう、ALBを使います。
  • EC2はAmazon Linux 2023を使います。
  • SonarQube ServerのエディションはCommunity Editionを使います。
  • SSMのセッションマネージャで接続するため、VPCエンドポイントを作成します。
  • データベースにはAurora(PostgreSQL)を使います。
  • “VPCなど”のようなAWSマネジメントコンソールのかんたん作成を駆使しています。
  • SonarQube IDEの設定やSonarQube IDEとSonarQube Serverの接続については次回「SonarQube IDEからServerに接続」で解説いたします。

 

SonarQubeについては以下のブログをご参照ください。

2.VPC・NAT・EC2・VPCエンドポイント・RDSの作成

ロードバランサ以外のAWSリソースを作成します。

  • VPC・NATの作成

AWSマネジメントコンソールから“VPC”⇒”VPCの作成”に進んでください。“VPCなど“を使って簡単作成します。

 

設定項目 設定値
名前タグの自動生成 {任意のVPC名}
IPv4 CIDR ブロック 10.0.0.0/16
IPv6 CIDR ブロック IPv6 CIDR ブロックなし
テナンシー デフォルト
アベイラビリティゾーン (AZ) の数 2
パブリックサブネットの数 2
プライベートサブネットの数 2
NAT ゲートウェイ ($) 1AZ内
VPC エンドポイント なし
DNS オプション

☑DNS ホスト名を有効化

☑DNS 解決を有効化

  • EC2の作成

AWSマネジメントコンソールから“EC2”⇒”インスタンスの起動”に進んでください。

設定項目 設定値
名前とタグ - 名前 {任意のEC2名}
Amazon マシンイメージ (AMI) Amazon Linux 2023 AMI
アーキテクチャ

64ビット

インスタンスタイプ

t3.medium

キーペア 新しいキーペアの作成
ネットワーク {先ほど作成したVPC}
サブネット {private1のサブネット}
セキュリティグループ

インバウンドルールは以下

  • カスタムTCP9000:10.0.0.0/16(VPCのCIDR)
  • SSH22:10.0.0.0/16(VPCのCIDR)
ストレージを設定 30GB
高度な詳細のIAM インスタンスプロフィール IAMポリシー:AmazonSSMManagedInstanceCoreを含んだIAMロールを作成し、設定してください。

※無料枠のt2.microでは動きません。最小のハードウェア要件としては 64ビット、CPU2コア、RAM4GB、ディスク30GBになります。

  • VPCエンドポイントの作成

AWSマネジメントコンソールから“VPC”⇒”エンドポイントを作成”に進んでください。以下のVPCエンドポイントをprivate1のサブネットに作成します。

 

    ・com.amazonaws.{region}.ssm

    ・com.amazonaws. {region}.ec2messages

    ・com.amazonaws. {region}.ssmmessages

 

参考URL: Systems Manager のために VPC エンドポイントを使用して EC2 インスタンスのセキュリティを強化する

設定項目① 設定値
名前タグ - オプション {任意のVPCエンドポイント名}
タイプ AWSのサービス
サービス com.amazonaws.{region}.ssm
VPC {先ほど作成したVPC}
サブネット {private1のサブネット}
セキュリティグループ

インバウントルールは以下

  • HTTPS443:10.0.0.0/16(VPCのCIDR)
設定項目② 設定値
名前タグ - オプション {任意のVPCエンドポイント名}
タイプ AWSのサービス
サービス com.amazonaws.{region}.ec2messages
VPC {先ほど作成したVPC}
サブネット {private1のサブネット}
セキュリティグループ

インバウントルールは以下

  • HTTPS443:10.0.0.0/16(VPCのCIDR)
設定項目② 設定値
名前タグ - オプション {任意のVPCエンドポイント名}
タイプ AWSのサービス
サービス com.amazonaws.{region}.ssmmessages
VPC {先ほど作成したVPC}
サブネット {private1のサブネット}
セキュリティグループ

インバウントルールは以下

  • HTTPS443:10.0.0.0/16(VPCのCIDR)
  • RDSの作成

AWSマネジメントコンソールから“RDS”⇒”データベースの作成”に進んでください。Aurora PostgreSQLを”簡単に作成”で構築します。PostgreSQLバージョンは13~17が利用できます。

設定項目 設定値
データベースの作成方法を選択 簡単に作成
エンジンのタイプ Aurora (PostgreSQL Compatible)
DBインスタンスサイズ 開発/テスト
DB クラスター識別子 {任意のデータベース名}
マスターユーザー名

{任意のマスターユーザ名}

今回の例ではpostgres_sonarとします。

認証情報管理 セルフマネージド
マスターパスワードおよびマスターパスワードを確認

{任意のマスターパスワード}

今回の例ではpostgres_sonarとします。

EC2 接続をセットアップする - 任意

└コンピューティングリソース

EC2 コンピューティングリソースに接続

EC2 接続をセットアップする - 任意

└EC2 インスタンス

 {先ほど作成したEC2}
DNS オプション

☑DNS ホスト名を有効化

☑DNS 解決を有効化

3.SonerQube Serverのインストール

先ほど作成したEC2にSSH接続し、SonarQube Serverのインストールと設定を行います。

今回インストールSonarQube Serverは“sonarqube-25.5.0.107428.zip“を使います。

インストールするzipファイル名は以下からダウンロードできるファイルで確認できます。

https://www.sonarsource.com/products/sonarqube/downloads/

  • セッションマネージャからEC2に接続

AWSマネジメントコンソールから“EC2”⇒”インスタンス”に進んでください。作成したEC2を選択し、“接続”からセッションマネージャの接続ができます。

  • OpenJDK 17のインストール

OpenJDK 17をインストールし、環境変数”JAVA_HOME”, ”PATH”, ”SONAR_JAVA_HOME”を設定します。以下の順でコマンドを実行してください。Oracle JRE または OpenJDK、Javaバージョン17または21が必要です。

$ sudo wget https://download.java.net/java/GA/jdk17/0d483333a00540d886896bac774ff48b/35/GPL/openjdk-17_linux-x64_bin.tar.gz
$ sudo tar xvf openjdk-17_linux-x64_bin.tar.gz
$ sudo mv jdk-17 /opt/
$ sudo tee /etc/profile.d/jdk.sh <<EOF
export JAVA_HOME=/opt/jdk-17
export PATH=\$PATH:\$JAVA_HOME/bin
export SONAR_JAVA_PATH=/opt/jdk-17/bin/java
EOF
$ source /etc/profile.d/jdk.sh

  • Linuxカーネルのパラメータ設定

以下の順でコマンドを実行してください。

$ sudo vi /etc/sysctl.d/99-sonarqube.conf
fs.file-max=131072
vm.max_map_count=524288

  • リソース制限の設定

   以下の順でコマンドを実行してください。

$ sudo vi /etc/security/limits.d/99-sonarqube.conf
sonarqube   -   nofile   131072
sonarqube   -   nproc    8196

  • Sonarqubeユーザの作成

   以下の順でコマンドを実行してください。

$ sudo useradd sonarqube
$ sudo passwd sonarqube
 (パスワードを入力)

  • SonarQube  Serverインストール

以下の順でコマンドを実行してください。

$ sudo wget https://binaries.sonarsource.com/Distribution/sonarqube/sonarqube-25.5.0.107428.zip -O /usr/local/sonarqube.zip
$ sudo unzip /usr/local/sonarqube.zip
$ sudo mv sonarqube-25.5.0.107428 /usr/local/
$ sudo chown -R sonarqube:sonarqube /usr/local/sonarqube-25.5.0.107428

※“sonarqube-25.5.0.107428“はダウンロードするバージョンに合わせて変更してください。

  • Aurora PostgreSQLにデータベースを作成

以下の順でコマンドを実行してください。

$ sudo dnf update -y
$ sudo dnf install -y postgresql17.x86_64
$ psql -h {RDSエンドポイント} -d postgres -U postgres_sonar
postgres=> create database sonar

※psql -h <RDSエンドポイント> -d <データベース名> -U <管理者ユーザ名>の<RDSエンドポイント>についてはAWSマネジメントコンソールの作成したRDSから確認できます。

  • SonarQube  ServerのPostgreSQL接続設定

以下の順でコマンドを実行してください。

$ sudo vi /usr/local/sonarqube-25.5.0.107428/conf/sonar.properties
sonar.jdbc.username=postgres_sonar
sonar.jdbc.password=postgres_sonar
sonar.jdbc.url=jdbc:postgresql://{RDSエンドポイント}/sonar

  • 設定反映のため再起動

以下コマンドを実行してください。

$ sudo shutdown -r now

セッションが一度切れますので、再度セッションマネージャの接続を行ってください。イント}/sonar

  • SonarQube  Serverの起動

以下コマンドを実行してください。

$ su - sonarqube
$ /usr/local/sonarqube-25.5.0.107428/bin/linux-x86-64/sonar.sh start

SonarQube  Serverのログは“/usr/local/sonarqube-25.5.0.107428/logs/”に出力されます。起動成功した場合、web.logに以下の様なログが出力されます。

$ su - sonarqube
$ /usr/local/sonarqube-25.5.0.107428/bin/linux-x86-64/sonar.sh start

※起動に失敗している場合、SonarQube  Serverは自動で停止するようです。

原因はweb.logやes.log(elastic searchのログ)に出力されています。

・Linuxカーネルのパラメータ設定

・リソース制限の設定

・SonarQube  ServerのPostgreSQL接続設定

このあたりをご確認ください。

4.Application Load Balancerの設定

Internetからアクセスするため、ターゲットグループとApplication Load Balancerの設定を行います。カスタムドメインやCloudFront,WAFについてはご利用に合わせて拡張してください。

ターゲットとなるEC2のSonarQube Serverは9000ポートで待ち受けています。

  • ターゲットグループの作成

AWSマネジメントコンソールから“EC2”⇒”ターゲットグループ” ⇒”ターゲットグループの作成”に進んでください。

設定項目 設定値
ターゲットタイプの選択 インスタンス
ターゲットグループ名 {任意のターゲットグループ名}
プロトコル HTTP
ポート 9000
VPC {作成したVPC}
ヘルスチェック HTTP /

使用可能なインスタンス

選択したインスタンスのポート

{作成したEC2}

9000

  • ロードバランサの作成

AWSマネジメントコンソールから“EC2”⇒”ロードバランサ” ⇒”ロードバランサの作成”に進んでください。

Application Load Balancerを選択してください。

設定項目 設定値
ロードバランサー名 {任意のロードバランサ名}
スキーム インターネット向け
ロードバランサーの IP アドレスタイプ IPv4
VPC {作成したVPC}
IP プール チェックしない
認証情報管理 セルフマネージド
アベイラビリティーゾーンとサブネット

Public1、Public2のサブネットを選択

セキュリティグループ

インバウンドルールは以下

HTTP80:マイIP(※)

※最初はSonarQube Serverがデフォルトパスワードなので、IP制限をかけておいてください。また、HTTPSを利用される場合は“HTTPS443: マイIP“
とし、ACMの設定を行ってください。

  • SonarQube Serverの画面表示

http://{ロードバランサのDNS}/

にアクセスする事でSonarQube Serverを確認いただけます。
初期のユーザ/passwordは admin/adminになります。
ログイン後、すぐにパスワードを変更してください。

 

5. さいごに

今回はSonarQube Serverを立ち上げるところまで進みました。

次回は、SonarQube Serverにユーザとプロジェクトを作成し、SonarQube IDEから接続するところまで進めます。

昨今のセキュリティは観点が多いので1人の頭脳ではカバーしきれません!(特に私!)

SonarQubeやSecurity Hubなど“セキュリティチェックしてくれる仕組み“をどんどん活用しましょう。