aws_memo
Mavenの設定とエラーの解決方法について
エラーの原因と解決方法
エラーの解読
まず、あなたが遭遇しているエラーメッセージを整理すると、以下のようになります:
Plugin org.apache.maven.plugins:maven-clean-plugin:3.2.0 or one of its dependencies could not be resolved: The following artifacts could not be resolved: ... from/to Central (https://repo.maven.apache.org/maven2): PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
このエラーは、Mavenが必要なプラグインや依存関係をMaven中央リポジトリからダウンロードしようとしたときに、SSL証明書の問題で接続が拒否されたことを示しています。
主な原因
- SSL証明書の問題:JavaがリモートリポジトリのSSL証明書を信頼できないため、接続がブロックされています。
- ネットワーク環境:企業内ネットワークでは、プロキシサーバーやファイアウォールがSSL通信を中継または検査している可能性があります。
ステップバイステップの解決策
ステップ1:基本的な確認
- インターネット接続の確認:
- ブラウザで https://repo.maven.apache.org/maven2 にアクセスできるか確認します。
- システムの日時の確認:
コンピュータの日時が正確であることを確認します。日時がずれているとSSL証明書の検証に失敗します。
ステップ2:プロキシの設定
-
プロキシサーバーの確認:
ネットワーク管理者またはIT部門に問い合わせて、プロキシサーバーの有無とその設定情報(ホスト名、ポート、ユーザー名、パスワード)を入手します。 -
Mavenの設定ファイルを編集:
-
Mavenの settings.xml ファイルにプロキシ設定を追加します。
-
settings.xml の場所:
Windows: C:\Users\あなたのユーザー名.m2\settings.xml
Mac/Linux: /Users/あなたのユーザー名/.m2/settings.xml
設定例:
<settings>
<proxies>
<proxy>
<id>proxy</id>
<active>true</active>
<protocol>http</protocol>
<host>プロキシのホスト名</host>
<port>プロキシのポート番号</port>
<!-- 認証が必要な場合のみ以下を追加 -->
<!--
<username>プロキシのユーザー名</username>
<password>プロキシのパスワード</password>
-->
</proxy>
</proxies>
</settings>
ステップ3:SSL証明書のインポート
- 証明書の取得:
- ブラウザで https://repo.maven.apache.org/maven2 にアクセスし、SSL証明書をエクスポートします。
- 手順はブラウザによりますが、通常はアドレスバーの鍵アイコンをクリックし、証明書情報を表示してエクスポートできます。
- 証明書をJavaのキーストアにインポート:
- コマンドプロンプトまたはターミナルを管理者権限で開きます。
- 以下のコマンドを実行します(パスやファイル名は適宜変更してください):
keytool -import -alias mavenrepo -keystore "%JAVA_HOME%\lib\security\cacerts" -file C:\path\to\exported\certificate.cer
- デフォルトのキーストアパスワードは changeit です。
ステップ4:Mavenの再ビルド
以上の設定を行った後、Mavenでプロジェクトを再度ビルドしてみてください。
エラーが解消されているか確認します。
AWS SDKの設定
pom.xml に依存関係を追加
- AWS SDKの依存関係を追加:
<dependencies>
<!-- 他の依存関係 -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.12.530</version> <!-- 最新バージョンを確認してください -->
</dependency>
</dependencies>
- Mavenを更新:
- 依存関係を追加した後、Mavenのプロジェクトを更新します。
AWS SDKの使用
JavaコードでAWS SDKをインポートし、S3からファイルをダウンロードする機能を実装します。
AWSのアクセスキーとシークレットキーの設定も必要です。
まとめ
-
エラーの原因:SSL証明書の検証エラーにより、Mavenがリポジトリにアクセスできない。
-
解決方法:
プロキシの設定を settings.xml に追加。
SSL証明書をJavaのキーストアにインポート。 -
次のステップ:AWS SDKを pom.xml に追加し、S3との連携機能を実装。
補足
注意:証明書のインポートやプロキシ設定は慎重に行ってください。不明な点はネットワーク管理者に相談してください。
参考リンク:
Maven Proxy Settings
AWS SDK for Java V1
Mavenのインストールと設定ガイド
以下では、Apache Mavenを最初からインストールし、環境変数の設定を行う手順を説明します。
目次
前提条件の確認
Javaのインストール
MavenはJavaベースのビルドツールです。事前にJDK(Java Development Kit)がインストールされている必要があります。
-
Javaのバージョン確認
java -version
バージョン情報が表示されない場合は、Oracleの公式サイトまたはOpenJDKからJDKをダウンロードしてインストールしてください。
Mavenのダウンロード
- 公式サイトにアクセス
- Apache Maven公式ダウンロードページ
https://maven.apache.org/download.cgi
- バージョンの選択
- 最新の安定版を選択します(例:apache-maven-3.9.5-bin.zip)。
- アーカイブのダウンロード
- 「Binary zip archive」をクリックしてダウンロードします。
Mavenのインストール(展開)
- ダウンロードしたZIPファイルを展開
-
好きなディレクトリにZIPファイルを解凍します。
-
例:
Windows: C:\Program Files\Apache\Maven
macOS/Linux: /usr/local/apache-maven
- ディレクトリ構成の確認
- 展開後のディレクトリは以下のようになります。
apache-maven-3.9.5
├── bin
├── boot
├── conf
├── lib
└── LICENSE.txt
環境変数の設定
Mavenをコマンドラインから利用できるように、環境変数を設定します。
Windowsの場合
- 環境変数の設定画面を開く
- 「スタートメニュー」 → 「設定」 → 「システム」 → 「バージョン情報」 → 「システムの詳細設定」
- または、「スタート」ボタンを右クリックして「システム」 → 「システムの詳細設定」
- システム環境変数を編集
- 「環境変数」ボタンをクリック。
- 「システム環境変数」の「新規」ボタンをクリック。
- MAVEN_HOME の作成
- 変数名:MAVEN_HOME
- 変数値:Mavenを展開したパス(例:C:\Program Files\Apache\Maven\apache-maven-3.9.5)
- Path に追加
- 「システム環境変数」の一覧から Path を選択し、「編集」をクリック。
- 「新規」ボタンをクリックし、以下を追加:
%MAVEN_HOME%\bin
- 設定の反映
- すべてのウィンドウを「OK」で閉じて設定を保存。
- コマンドプロンプトを再起動します。
macOS/Linuxの場合
- ターミナルを開く
- 環境変数の設定ファイルを編集
- シェルの設定ファイルを開きます(~/.bash_profile、~/.bashrc、~/.zshrc など)。
nano ~/.bash_profile
- 以下の行を追加
export MAVEN_HOME=/usr/local/apache-maven/apache-maven-3.9.5
export PATH=$MAVEN_HOME/bin:$PATH
- MAVEN_HOME のパスは実際のMavenの展開先に置き換えてください。
- 設定の反映
- ファイルを保存して終了(Ctrl + O、Enter、Ctrl + X)。
- 以下のコマンドで設定を反映。
source ~/.bash_profile
インストールの確認
- コマンドプロンプトまたはターミナルで以下を実行
mvn -v
- 出力結果を確認
- 正常にインストールされていれば、以下のようなバージョン情報が表示されます。
Apache Maven 3.9.5 (省略)
Maven home: C:\Program Files\Apache\Maven\apache-maven-3.9.5
Java version: 1.8.0_281, vendor: Oracle Corporation
Java home: C:\Program Files\Java\jdk1.8.0_281\jre
Default locale: ja_JP, platform encoding: MS932
OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"
- トラブルシューティング
- mvn コマンドが認識されない場合:
- 環境変数 Path に MAVEN_HOME\bin が正しく追加されているか確認。
- コマンドプロンプトやターミナルを再起動。
次のステップ
- プロジェクトのビルド
Mavenプロジェクトを作成し、ビルドや依存関係の管理を開始できます。 - settings.xml の設定
プロキシ環境下での利用やリポジトリ設定が必要な場合は、MAVEN_HOME/conf/settings.xml を編集します。 - AWS SDKの設定
Mavenプロジェクトの pom.xml にAWS SDKの依存関係を追加し、S3との連携を行います。
参考リンク
Apache Maven 公式サイト
Maven インストールガイド(公式ドキュメント) Maven プロキシ設定ガイド AWS SDK for Java - Mavenによる設定SSL証明書のエクスポート方法とAWS SDKの設定ガイド
目次
SSL証明書のエクスポート方法
https://repo.maven.apache.org/maven2
のSSL証明書をエクスポートする手順を、主要なブラウザについて説明します。
Google Chromeの場合
-
ブラウザでURLにアクセス
-
https://repo.maven.apache.org/maven2
をGoogle Chromeで開きます。
-
-
証明書情報を表示
- アドレスバーの左側にある鍵アイコンをクリックします。
- ポップアップが表示されるので、「接続は保護されています」をクリック。
- 「証明書は有効です」をクリックします。
-
証明書の詳細を表示
- 「証明書」ウィンドウが開きます。
- 「証明書のパス」タブで、一番上のルート証明書を選択します(例:
DigiCert Global Root CA
)。 - 「詳細」タブを選択します。
-
証明書のエクスポート
-
「ファイルへコピー」をクリックします。
-
「証明書エクスポートウィザード」が起動します。
-
エクスポートファイル形式の選択
- 「Base-64エンコード X.509(.CER)」を選択して「次へ」をクリック。
-
エクスポートファイルの保存先を指定
- ファイル名と保存場所を指定します(例:
C:\cert\maven_repo_cert.cer
)。 - 「次へ」をクリックし、「完了」をクリックします。
- ファイル名と保存場所を指定します(例:
-
-
エクスポートの確認
- 「エクスポートが成功しました」と表示されれば完了です。
Mozilla Firefoxの場合
-
ブラウザでURLにアクセス
-
https://repo.maven.apache.org/maven2
をMozilla Firefoxで開きます。
-
-
証明書情報を表示
- アドレスバーの左側にある鍵アイコンをクリックします。
- 「接続は安全です」をクリックし、「詳細情報」を選択します。
- 「セキュリティ」タブに移動します。
-
証明書を表示
- 「証明書を表示」をクリックします。
-
証明書のエクスポート
-
「証明書ビューアー」ウィンドウが開きます。
-
「詳細」タブで、必要な証明書を選択します。
-
「エクスポート」をクリックします。
-
保存形式の選択
- ファイルタイプを「X.509証明書(PEM)(.pem;.crt)」に設定します。
-
エクスポートファイルの保存先を指定
- ファイル名と保存場所を指定します(例:
/home/user/cert/maven_repo_cert.crt
)。 - 「保存」をクリックします。
- ファイル名と保存場所を指定します(例:
-
-
エクスポートの確認
- 指定した場所に証明書ファイルが保存されていれば完了です。
証明書をJavaのキーストアにインポート
-
キーストアへのインポートコマンド
-
コマンドプロンプトまたはターミナルを管理者権限で開きます。
-
以下のコマンドを実行します(パスやファイル名は適宜変更してください)。
-
Windowsの場合
keytool -importcert -alias mavenrepo -keystore "%JAVA_HOME%\lib\security\cacerts" -file "C:\cert\maven_repo_cert.cer"
-
macOS/Linuxの場合
sudo keytool -importcert -alias mavenrepo -keystore "$JAVA_HOME/lib/security/cacerts" -file "/home/user/cert/maven_repo_cert.crt"
-
-
パスワードの入力
- キーストアのパスワードを入力します(デフォルトは
changeit
)。
- キーストアのパスワードを入力します(デフォルトは
-
証明書の信頼を確認
- 「信頼しますか?」と聞かれたら、
yes
と入力してエンターキーを押します。
- 「信頼しますか?」と聞かれたら、
-
-
インポートの確認
- 「証明書がキーストアに追加されました」と表示されれば成功です。
pom.xml
に追加する方法
AWS SDKをAWS SDKを使用するために、pom.xml
に必要な依存関係とプラグインを追加します。
pom.xml
の例
完全な<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>my-app</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>My App</name>
<url>http://maven.apache.org</url>
<properties>
<!-- Javaのバージョンを指定 -->
<java.version>1.8</java.version>
<!-- AWS SDKのバージョンを指定 -->
<aws.sdk.version>1.12.530</aws.sdk.version>
</properties>
<dependencies>
<!-- AWS SDK for Java -->
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
<!-- その他の必要な依存関係 -->
<!-- 例:ロギングのためのSLF4J -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.36</version>
</dependency>
<!-- Java Servlet API(Webアプリの場合) -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
<build>
<plugins>
<!-- Maven Compiler Plugin -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
<!-- Maven Assembly Plugin(必要に応じて) -->
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.3.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifest>
<mainClass>com.example.Main</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- その他のプラグイン -->
<!-- 例:Maven Clean Plugin -->
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.2.0</version>
</plugin>
<!-- Maven Shade Plugin(必要に応じて) -->
<!--
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.example.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
-->
</plugins>
</build>
</project>
説明
- プロジェクト情報
<groupId>、<artifactId>、<version>:あなたのプロジェクトに合わせて変更してください。 - プロパティ
<java.version>:使用するJavaのバージョンを指定します。
<aws.sdk.version>:AWS SDKのバージョンを指定します。 - 依存関係
AWS SDK for S3
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
SLF4J(ロギング用)
- ログ出力を行う場合に必要です。
Java Servlet API
- Webアプリケーションの場合、Servlet APIが必要です。
- <scope>provided</scope> とすることで、アプリケーションサーバー(例:Tomcat)に依存関係を任せます。
ビルドプラグイン
- Maven Compiler Plugin
Javaのソースとターゲットのバージョンを指定します。 - Maven Assembly Plugin
依存関係を含むJARを作成する場合に使用します。
<mainClass> はあなたのアプリケーションのエントリポイントに変更してください。 - Maven Clean Plugin
ビルド時に生成されたファイルをクリーンアップします。 - Maven Shade Plugin
依存関係をまとめて一つのJARにパッケージングする場合に使用します。
必要に応じてコメントを外して使用してください。
注意点
バージョンの確認
- 各依存関係やプラグインの最新バージョンを公式サイトやMaven Centralで確認してください。
AWS SDKのバージョン
- 上記の例ではバージョン 1.12.530 を使用しています。最新の安定版を使用することをお勧めします。
メインクラスの指定
- アプリケーションのエントリポイントとなるクラスを指定します(例:com.example.Main)。
必要なプラグインの追加
- プロジェクトの要件に応じて、追加のプラグインを build セクションに追加してください。
補足情報
MavenでのAWS SDKの設定
- AWS SDK v1とv2の違い
AWS SDK for Javaには、バージョン1(v1)とバージョン2(v2)が存在します。
新しいプロジェクトでは、可能であればv2の使用を検討してください。
AWS SDK v2の依存関係
v2を使用する場合、依存関係は以下のようになります。
<dependency>
<groupId>software.amazon.awssdk</groupId>
<artifactId>s3</artifactId>
<version>2.20.69</version>
</dependency>
AWS認証情報の設定
- AWSアクセスキーとシークレットキー
環境変数、システムプロパティ、または ~/.aws/credentials ファイルを使用して設定します。 - 依存関係の追加(認証情報プロバイダ)
必要に応じて、以下の依存関係を追加します。
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-core</artifactId>
<version>${aws.sdk.version}</version>
</dependency>
コードでのAWS S3の使用例
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
public class S3DownloadExample {
public static void main(String[] args) {
String accessKey = "YOUR_ACCESS_KEY";
String secretKey = "YOUR_SECRET_KEY";
BasicAWSCredentials awsCreds = new BasicAWSCredentials(accessKey, secretKey);
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion("us-west-2")
.withCredentials(new AWSStaticCredentialsProvider(awsCreds))
.build();
// ファイルのダウンロード処理
s3Client.getObject(new GetObjectRequest("your-bucket-name", "your-object-key"), new File("destination-file.zip"));
}
}
まとめ
-
SSL証明書のエクスポート
ブラウザを使用して https://repo.maven.apache.org/maven2 のSSL証明書をエクスポートします。
エクスポートした証明書をJavaのキーストアにインポートします。 -
pom.xml の設定
AWS SDKを含む必要な依存関係とプラグインを pom.xml に追加します。
プロジェクトの要件に合わせて、バージョンや設定を調整します。
参考リンク
Apache Maven 公式サイト
Maven プラグイン一覧
AWS SDK for Java 公式ドキュメント
Maven Central Repository
Java Keytool コマンドガイド
import com.amazonaws.AmazonClientException;
import com.amazonaws.AmazonServiceException;
import com.amazonaws.auth.DefaultAWSCredentialsProviderChain;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3ClientBuilder;
import com.amazonaws.services.s3.model.GetObjectRequest;
import java.io.File;
public class S3DownloadExample {
// ダウンロード対象のバケット名とオブジェクトキーを指定
private static final String BUCKET_NAME = "your-bucket-name"; // 実際のバケット名に置き換えてください
private static final String OBJECT_KEY = "path/to/yourfile.zip"; // S3内のオブジェクトキーに置き換えてください
private static final String DOWNLOAD_FILE_PATH = "C:/path/to/downloadedfile.zip"; // ダウンロード先のパスに置き換えてください
public static void main(String[] args) {
// S3クライアントの作成
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withRegion(Regions.AP_NORTHEAST_1) // バケットが存在するリージョンに変更
.withCredentials(new DefaultAWSCredentialsProviderChain())
.build();
try {
System.out.println("ダウンロードを開始します...");
// オブジェクトをダウンロード
s3Client.getObject(new GetObjectRequest(BUCKET_NAME, OBJECT_KEY), new File(DOWNLOAD_FILE_PATH));
System.out.println("ダウンロードが完了しました: " + DOWNLOAD_FILE_PATH);
} catch (AmazonServiceException ase) {
System.err.println("AmazonServiceException: " + ase.getMessage());
ase.printStackTrace();
} catch (AmazonClientException ace) {
System.err.println("AmazonClientException: " + ace.getMessage());
ace.printStackTrace();
} catch (Exception e) {
System.err.println("Exception: " + e.getMessage());
e.printStackTrace();
}
}
}
azure
AWSの**インターネットゲートウェイ(Internet Gateway)**は、Azureでいうところの以下の2つのコンポーネントの役割を組み合わせたものに近いです:
⸻
Azureにおける対応関係:
1. 仮想ネットワークのインターネット接続機能(Default route to Internet via 0.0.0.0/0)
• Azureの仮想ネットワーク(VNet)では、既定で「インターネットへの出入口」が組み込まれています。
• これは、VNet に属する サブネットに 0.0.0.0/0 のルートがあり、NSG などでブロックされていなければインターネットへ出られる という仕組みです。
2. NAT Gateway または Public IP アドレス付きの Network Interface
• AWSのインターネットゲートウェイは、パブリックIPを持つEC2がインターネットと通信するための出入口になります。
• Azureでは、仮想マシンに直接パブリックIPを付けたり、NAT Gatewayを使ってアウトバウンド通信を可能にすることがこれに相当します。
以下は、システム構成図の左右にAWSとAzureのネットワークコンポーネントを並べた比較と、その詳細説明です。
⸻
図の概要
• 左側 (AWS)
• VPC (Virtual Private Cloud)
独立したネットワークの境界を形成。
• サブネット
VPC内のIPアドレス範囲を分割した論理的なネットワーク。
• EC2インスタンス
仮想サーバー。パブリックIPをアタッチするか、NAT Gateway経由で通信。
• インターネットゲートウェイ (Internet Gateway)
VPCをインターネットと双方向に接続する出口/入口。
• ルートテーブル
0.0.0.0/0 → Internet Gateway のルート定義。
• セキュリティグループ (Security Group)
インスタンス単位のステートフルファイアウォール。
• 右側 (Azure)
• Virtual Network (VNet)
AWSのVPCに相当。
• サブネット
VNet内でIPアドレス範囲を分割。
• VM (Virtual Machine)
Azure上の仮想サーバー。Public IPを付与するか、NAT Gateway経由で通信。
• デフォルトルート / UDR (User-Defined Route)
既定で0.0.0.0/0がインターネット向けに設定されている。必要に応じてUDRでカスタマイズ。
• ネットワークセキュリティグループ (NSG)
サブネットまたはNIC単位で適用できるステートフルファイアウォール。
• NAT Gateway / Public IP
アウトバウンド通信用のNAT Gatewayや、直接Public IPを付与して双方向通信。
⸻
ポイント解説
1. インターネット接続の出入口
• AWS: Internet GatewayをVPCにアタッチし、ルートテーブルで0.0.0.0/0を向ける。
• Azure: VNetには既定でインターネットへの0.0.0.0/0ルートが組み込まれており、さらにUDRで細かく制御可能。
2. パブリックIPの割り当て
• AWS: EC2に直接Elastic IP (固定) やPublic IPをアタッチ。プライベートサブネットからはNAT Gatewayを介して通信。
• Azure: VMにPublic IPリソースをアタッチするか、サブネット単位でNAT Gatewayを配置。
3. ファイアウォール設定
• AWS: Security Groupをインスタンスに紐付け、ステートフルに許可設定。
• Azure: NSGをサブネット/NICに適用し、ステートフルにトラフィックをフィルタリング。
4. ルーティング
• AWS: ルートテーブルを作成し、必要に応じて複数のサブネットに関連付け。
• Azure: 既存のシステムルートに加え、ユーザー定義ルート(UDR)でカスタムルールを追加できる。
⸻
この図をもとに、オンプレミスや他のリソースとの接続拡張、VPN、ExpressRoute、Transit Gatewayなどのより高度な構成にも展開できるようになります。
以下は、パブリックサブネット/プライベートサブネットに分け、ロードバランサー、DB、S3、Route 53を組み込んだ典型的なAWS構成図です。
⸻
コンポーネントの配置
1. Route 53 (DNS)
• ドメイン名を管理し、外部リクエストをALBのDNS名へルーティング。
2. VPC
• ネットワークの枠組み。以下の2つのサブネットを含む。
3. パブリックサブネット
• Internet Gateway (IGW)
VPCをインターネットに接続するゲートウェイ。
• Application Load Balancer (ALB)
パブリックIPを持ちRoute 53から受信したHTTP/HTTPSトラフィックをEC2へ振り分け。
• NAT Gateway
プライベートサブネット内のリソースがインターネットへアウトバウンド通信するための足場。
4. プライベートサブネット
• EC2インスタンス
ALBの背後で動作し、アプリケーションをホスト。セキュリティグループで外部からの直接アクセスを遮断。
• RDSインスタンス (DB)
プライベートサブネット内で稼働するデータベース。EC2のみ接続可能。
5. S3
• VPC外にあるオブジェクトストレージ。EC2やALBから静的アセット(画像やJS/CSS)を取得。
⸻
通信フロー
1. エンドユーザー → Route 53
DNS解決によりALBのアドレスを取得。
2. ユーザー → ALB (パブリックサブネット)
HTTP/HTTPSリクエストを受信。
3. ALB → EC2 (プライベートサブネット)
リクエストを各EC2インスタンスへ振り分け。
4. EC2 → RDS
データベースクエリを実行。
5. EC2/ALB → S3
静的ファイル (画像やスクリプト) を取得。
6. EC2 (プライベートサブネット) → インターネット
アウトバウンド通信はNAT Gateway経由で行う。
⸻
この構成により、アプリケーションサーバーやデータベースをプライベートに保ちつつ、ロードバランサーを介してスケーラブルかつ高可用性のあるWebサービスを構築できます。
以下、Azure版のパブリックサブネット/プライベートサブネット構成図と解説です。
⸻
図の概要
• Azure DNS (DNS Zone)
• ドメイン名の管理・解決。Application GatewayのパブリックIPを指すレコードを設定。
• Virtual Network (VNet)
• AWSのVPC相当。プライベートネットワーク領域を提供。
• パブリックサブネット
• Application Gateway
レイヤ7ロードバランサー。パブリックIPを持ち、インターネットからのHTTP/HTTPSトラフィックを受信。
• Network Security Group (NSG)
サブネットまたはNICに適用するステートフルなファイアウォールルール。
• UDR (User-Defined Route)
必要に応じてカスタムルート(例:0.0.0.0/0 → Internet )を設定可能。
• プライベートサブネット
• NAT Gateway
プライベートサブネット内VMのアウトバウンドインターネットアクセスを提供。
• Virtual Machines (VMs)
Web/アプリケーションサーバーをホスト。外部から直接アクセス不可。
• Azure SQL Database
マネージドリレーショナルDBサービス。VMのみが接続可能。
• Storage Account (Blob)
• 静的アセット (画像、スクリプト、動画) を格納。パブリック読み取りまたはプライベートエンドポイント経由で利用可能。
⸻
通信フロー
1. クライアント → Azure DNS
DNSクエリでApplication GatewayのパブリックIPを取得。
2. クライアント → Application Gateway (パブリックサブネット)
HTTP/HTTPSリクエストを受信。
3. Application Gateway → NSG → Virtual Machines (プライベートサブネット)
NSGで許可されたトラフィックのみをVMに転送。
4. Virtual Machines → Azure SQL Database
DBクエリを実行。
5. Virtual Machines / Application Gateway → Storage Account (Blob)
静的コンテンツを取得。
6. Virtual Machines → NAT Gateway → Internet
アウトバウンド通信はNAT Gateway経由。
⸻
このAzure構成により、アプリケーション層とデータ層をプライベート化しつつ、Azureのマネージドサービスを活用した高可用・スケーラブルなアーキテクチャを実現できます。
上記のAzureシステム構成図では、以下の点を反映しています:
• Public Subnet と Private Subnet を明確に分離
• Public SubnetにはApplication Gateway(パブリックIP付き)、Network Security Group (NSG)、Azure AD Domain Servicesを配置
• Private SubnetにはVirtual MachinesとAzure SQL Databaseを配置
• NAT Gateway をPrivate Subnetのアウトバウンドインターネットゲートウェイとして設置
• 外部システム4つ (External System 1‐4) がPublic SubnetのApplication Gatewayへ接続
この構成により、認証基盤 (Azure AD DS) をパブリック側で提供しつつ、アプリケーションとデータベースをプライベートに保護し、外部システムとセキュアに統合できます。
- Azureシステム構成図
• Azure DNS がドメイン解決を行い、
• Public Subnet 内の Application Gateway (WAF + Public IP) へHTTPSでトラフィックを誘導。
• Public Subnetには NSG (Network Security Group) と Azure AD Domain Services を配置し、認証基盤を提供。
• Private Subnet にはアプリケーションサーバとして Virtual Machines と Azure SQL Database を配置し、外部から直接アクセスさせない。
• プライベートサブネットのアウトバウンドは NAT Gateway 経由。
• 静的コンテンツやファイルストレージは Azure Blob Storage(VNet外)を利用。
• 4つの外部システム (Earth, MeterReading, FMS, Proton) がHTTPSでApplication Gatewayに接続。
⸻
- プロトコルフロー図
- External Systems → Application Gateway
• HTTPS (TCP/443) - Application Gateway → NSG → Virtual Machine
• HTTP/HTTPS (TCP/80,443) - Virtual Machine → Azure AD Domain Services
• LDAP over TLS (TCP/636) - Virtual Machine → Azure SQL Database
• TDS (TCP/1433) - Virtual Machine → Azure Blob Storage
• HTTPS (TCP/443) - Virtual Machine → Internet (外部API呼び出しなど)
• HTTPS (TCP/443) via NAT Gateway
- External Systems → Application Gateway
⸻
これらの図をベースに、さらにログ集約(Azure Monitor)やKey Vault連携、Private Endpointによるストレージ/DBのプライベートアクセス**などを加えた拡張も可能です。
高レベルのシステム構成図やプロトコルフロー図に「必ずすべてのサービスをビジュアル化しなければならない」というルールはありません。むしろ、
1. 図の目的・観 audience(誰に何を伝えたいか)
2. 扱う範囲(データプレーン/制御プレーン/運用監視)
3. 図の見やすさ・複雑さのバランス
の3つを勘案して、必要最低限のコンポーネントに絞り込むのがベストプラクティスです。
⸻
- システム構成図に入れるべき要素
• データフローに直接関わる主要サービス
• リクエスト受け口:DNS → Application Gateway(WAF)
• 認証・認可:Azure AD Domain Services
• アプリケーション層:Virtual Machines/AKS など
• データ層:Azure SQL Database/Storage(Blob)
• ネットワーク:VNet、Public/Privateサブネット、NSG、NAT Gateway
• 省略してよい運用・管理系サービス
• Azure Monitor(ログ収集/アラート)
• Azure ATP/Security Center
• Azure Automanage
• Config、Systems Manager 相当
• Office LTSC、RDS SAL ライセンス要件
これらは「運用ビュー」「セキュリティ管理ビュー」など別の図にまとめるか、脚注・表としてドキュメントに記載するとすっきりします。
⸻
- プロトコルフロー図に入れるべき要素
• 実際にパケットが通る経路とポート番号- 外部システム → (TCP/443) → Application Gateway
- Application Gateway → (TCP/80/443) → NSG → VM
- VM → (TCP/636) → Azure AD Domain Services
- VM → (TCP/1433) → Azure SQL Database
- VM → (TCP/443) → Blob Storage
- VM → (TCP/443) → Internet (NAT Gateway 経由)
• 監視・管理プレーンの通信
監視エージェントやセキュリティエージェントが送る CloudWatch/Azure Monitor、ATP の通信は、必要なら別途「運用フロー図」で示します。
⸻
✔️ まとめ
• 高レベル図:データプレーン(主要な処理経路)だけを載せる
• 運用図:監視やセキュリティ、ライセンス管理など「制御プレーン」「運用プレーン」を切り出す
• 詳細設計書:サービスマッピング表(先ほどの AWS ⇔ Azure サービス対応リスト)を添付して、「この図に登場しないけど裏側で動いている」ですと注記
こうすることで、図は見やすく、ドキュメント全体としては網羅的、というベストバランスが取れます。
以下が、3枚の資料に登場する全要素をAzure環境に対応させたシステム構成図です。
⸻
図の構成要素
• Region & Network
• Frankfurt Region
• Azure Virtual Network(AZ1/2で冗長化)
• DNS & エントリポイント
• Azure DNS でドメイン解決
• インターネット経由で SPF認証システム (外部) もしくはドキュメントに示された外部連携システムからのHTTPSトラフィックを受け入れ
• パブリックサブネット (DMZ)
• Azure Application Gateway + WAF
• (※AWSのELB+WAF相当)
• プライベートサブネット
• SPP認証エージェント (RHEL VM)
• SPPアプリケーション (Windows VM)
• MFPSS連携 (Windows VM)
• バッチ処理 (Windows VM)
• Azure SQL Database
• Azure Blob Storage(外部ストレージ相当S3)
• アウトバウンドは NAT Gateway 経由
• 運用/管理サービス (図右)
• Azure Monitor (CloudWatch相当)
• Azure ATP (GuardDuty相当)
• Azure Policy (AWS Config相当)
• Azure Automanage (Systems Manager 相当)
• Azure Automange の誤表記として図示
⸻
この図は、
1. DMZでWAF付きロードバランサーを公開
2. 認証からアプリケーション、データベース、ストレージまでをプライベートネットワークで隔離
3. 運用・セキュリティ系サービスを外側にまとめて可視化
といった要件を満たしています。