2 つの AWS-EC2 Linux インスタンスがあります。
1 つは DB および doc ファイル用で、もう 1 つは Java アプリケーションが実行されている tomcat 用です。
ユーザーがファイルをダウンロードできる、つまり2番目のインスタンスにあるシナリオがあります。
私はそれをグーグルで検索しました.NFS、FTPなどのいくつかのオプションがあります.パフォーマンスとセキュリティの点でどちらが優れているかわかりません.
ありがとう。
1 に答える
0
すでに利用可能なサービスを利用する 1 つの方法は SCP です。
まず、キー ペアを生成します。
$ ssh-keygen -b 4096 -C "tomcat-servlet-key"
秘密鍵を Tomcat インスタンスに として保存し、の内容をファイル ストレージ インスタンスに/path/to/my-key
コピーします。(ファイル所有者ユーザーを追加する方法については、ユーザーの追加に関する AWS ドキュメントを参照し、ファイル所有者が提供するファイルに対する読み取りアクセス許可を持っていることを確認してください。)/path/to/my-key.pub
/home/fileowner/.ssh/authorized_keys
Ant Scp タスクを使用して、サーブレット コードを少し簡単にすることができます。
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.optional.ssh.Scp;
import com.google.common.io.Files;
public class ScpServlet extends HttpServlet {
private static final String SERVER_2_USER = "fileowner";
private static final String SERVER_2_PRIVATE_IP = "10.0.0.xyz";
private static final String PRIVATE_KEY_FILE = "/path/to/my-key";
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Scp scp = new Scp();
scp.setProject(new Project());
scp.setRemoteFile(SERVER_2_USER + '@' + SERVER_2_PRIVATE_IP + ":/tmp/hello.txt");
File outfile = File.createTempFile("hello", ".txt");
try {
scp.setLocalTofile(outfile.getAbsolutePath());
scp.setKeyfile(PRIVATE_KEY_FILE);
scp.setHost(SERVER_2_PRIVATE_IP);
scp.setUsername(SERVER_2_USER);
scp.setTrust(true);
scp.execute();
response.setContentType("text/plain");
try (OutputStream out = response.getOutputStream()) {
Files.asByteSource(outfile).copyTo(out);
}
} finally {
outfile.delete();
}
}
}
VPC 内の他のインスタンスからのアクセスのみを許可するセキュリティ グループ内のファイル ストレージ インスタンスをロックダウンできます。
このソリューションには、ファイルを Tomcat インスタンスのディスクにコピーしてそこから提供するという不要な中間ステップがありますが、Scp タスクを拡張してバイトをメモリに保持できる場合があります。
于 2015-02-24T21:53:40.393 に答える