よくあるローカルからEC2へファイルをアップロードしたい。そんな時によく使われる方法です。
まずはファイルの配置場所とコピーの宛先のEC2のキーペアの配置場所を確認しておきます。
今回の記事は分かりやすくデスクトップに置いていると想定しています。
ファイルをEC2にコピーする場合はscpコマンドを使用します。
sh-3.2# scp -i <キーペアファイル名>.pem sample01.txt ec2-user@<パブリックIPアドレス>:/home/ec2-user/
成功するとファイル名が表示されます。
sample01.txt 100% 796 75.5KB/s 00:00
もしもNo such file or directoryが出る場合はファイルパスが間違っている可能性があります。
ユーザーがデスクトップにいる場合は絶対パスを必要はありません。ファイル名だけでOKです。
現在いるディレクトリがデスクトップにいない場合は下記のように指定する必要があります。
sh-3.2# scp -i /Users/username/Desktop/TEST.pem /Users/username/Desktop/sample01.txt ec2-user@××.××.××.××:/home/ec2-user/
それではSSH接続してみてファイルがコピーされているか確認しましょう。
ssh -i /Users/username/Desktop/<キーペアファイル名>.pem ec2-user@<パブリックIPアドレス>
findコマンドを使って.txtに絞ってみましょう。最後の行に先ほどのsample01.txtが存在しているのが確認できます。
[ec2-user@ip-××-××-××-×× ~]$ find ./ -name "*.txt" -type f
./.cache/Homebrew/api/formula_names.before.txt
./.cache/Homebrew/api/cask_names.before.txt
./.cache/Homebrew/api/formula_aliases.txt
./.cache/Homebrew/api/formula_names.txt
./.cache/Homebrew/api/cask_names.txt
./.cache/Homebrew/all_commands_list.txt
./.cache/Homebrew/external_commands_list.txt
./data.txt
./sample01.txt
そもそもEC2に接続できない問題が発生すれば下記のドキュメントを参考にしてみてください。
EC2からローカルへダウンロードする方法
ローカルで実行します。
sh-3.2# scp -i /Users/username/Desktop/<キーペアファイル名>.pem ec2-user@<パブリックIPアドレス>:/home/ec2-user/sample01.txt /Users/username/Desktop/
scp -i <キーペアファイル名>.pem <ユーザー名>@[パブリックIP]アドレス: <ファイルを落とすローカルのディレクトリパス>
またfindコマンドを使ってみるとデスクトップに存在することが確認できます。
sh-3.2# find ./ -name "sample01.txt" -type f
find: .//Pictures/写真ライブラリ.photoslibrary: Operation not permitted
.//Desktop/sample01.txt
上記の通りやってもらえれば基本的にできると思いますが詰まった時は正確なファイルパスを確認しコピーすること。手入力だと打ち間違いにも気づかないので。
個人的な振り返り
行う手順を書き出すこと。
・EC2に置いているファイルをローカルに落とす必要があるためにまずはキーペアのファイル名が必要。
・どのEC2からどのファイルをダウンロードするのか?
・EC2に置いているファイルをどこに転送するのか?
などの手順を書き出してみると必要なコマンドができる。
参考にしたドキュメント
