ウェブインコ

インコの技術メモ

Amazon EC2

Windows + VirtualBox + Amazon Linux 2
PC を汚したくないので VirtualBox の中に環境を作って作業。
今まで CentOS だ、Ubuntu だ Debian だと煩わしかったのだけれど、最近は Amazon Linux 2 一択になってきましたのでメモ。

Amazon Linux 2
以下の2つをダウンロード。

  ディスクイメージ ( amzn2-virtualbox-2.0.20220316.0-x86_64.xfs.gpt.vdi )
    https://cdn.amazonlinux.com/os-images/latest/virtualbox/
  サンプル ( Seed.iso )
    https://cdn.amazonlinux.com/os-images/latest/
VirtualBox
新規
  AmazonL2(任意)
  C:\Users\ほにゃらら\VirtualBox VMs
  Linux
  Red Hat (64-bit)
  メモリ 2048(任意)
  既にある仮想ハードディスクを使用する。
    + 追加
    C:\Users\ほにゃらら\amzn2-virtualbox-2.0.20211005.0-x86_64.xfs.gpt.vdi
設定
  ストレージ → コントローラー:IDE(光ディスク)
    + 追加
    C:\Users\ほにゃらら\seed.iso
  ネットワーク
    アダプター1
    高度
    ポートフォワーディング
    (+)
Name Protocol Host IP Host Port Guest IP Guest Port
SSHTCP222222
HTTPTCP8080
NodeTCP88898889
等、適当に欲しいものを足してください。 SSH は必須。
起動。
ユーザー:ec2-user
パスワード:amazon
sudo su で root になれます。
(もし VirtualBox コンソールで困ったら)
  アンダーバーが打てない。
    シフトを押しながらハイフン「-」。
  vi でコロンが打てない。
    エスケープ語、シフトを押しながら 11(「1」を 2 回)打つと :.! となるので、
    .! を削除。
    (通常文章のところではどうしたら良いか分かりません)
  コンソールから抜ける
    キーボード右側の Ctrl を押下。
    どうしようもなくなったら Ctrl + Alt + Delete でも可。
DHCP
vi /etc/sysconfig/network-scripts/ifcfg-eth0
TYPE=Ethernet
BOOTPROTO=dhcp
ONBOOT=yes ←ここ(最初からなっていました)
root許可(ローカルだし)
vi /etc/ssh/sshd_config
PermitRootLogin  yes
パスワード許可(ローカルだし)
vi /etc/ssh/sshd_config
#PasswordAuthentication no
PasswordAuthentication yes

systemctl restart sshd
WinSCP、putty 等
    ホスト  localhost
    ポート  2222
  ユーザー  ec2-user
パスワード  amazon
ブラウザ
Apache を動かしていれば以下。
http://localhost/
Node.js なら以下な感じ(人夫々)。
http://localhost:8889/



MySQLを外部から接続したい
インスタンスを複数立ててMySQLは他のサーバーから接続したい。
結構ハマったこと→セキュリティーグループにMySQLを追加。

さしあたって使うものの概要
S3 : ファイル置場、ローカルからファイルの上げ下げを行う。S3←→EC2とかのやりとりも。
EC2
├Instances : サーバー本体。
├Volumes : 外付けディスク。EC2からしか見えない。マウントして使う。よくEBSと呼ばれる。
└Snapshots : バックアップイメージ。ここからVolumesを復活できる。

Instances
インスタンスはリブート、ストップ、スタートがブラウザから出来ます。
ターミネイトは完全削除です。全部消えるので注意。
ec2-xx-xx-xx-xx.compute-1.amazonaws.com
xx-xx-xx-xxなのが外向きのIPです。リブートしたら変わります。
固定にしたいときにはそういう契約が追加であります。
しないときはあげっぱなしで良いのではないでしょうか。

Volumes
インスタンスはAMIというイメージでバックアップが取れますが、/dev/sda1の10GB部分だけなので、大量のファイルはVolumesをくっつけて置きます。
ここに置いたものはSnapshotsで簡単にバックアップが取れるし復活できるので便利です。

S3
ファイルのアップロードはEC2に直接WinSCPからでも出来ますが激重なので、いったんS3にあげてからEC2にコピーします。
S3にはブラウザのメニューからもアップできますが1ファイル辺り最大300MBまでです。
大きなファイルはFireFoxのアドオン「S3 Firefox Organizer」を使うと良いです。

ツール
ローカルパソコンからEC2に命令できます。
最初に構築したり運用したりするときには、Linuxの中に入っていつものように作業することの他に、ローカルパソコンからEC2専用のコマンドをたたいて作業することになります。(ブラウザから出来ることが増えたので減りはしてます)
手前のLinuxにツールを入れた例。
jre-6u23-linux-i586-rpm.bin
をダウンロードしてWinSCPで手元のLinuxサーバーに置き実行権限を与える。
chmod a+x jre-6u23-linux-i586-rpm.bin
実行
./jre-6u23-linux-i586-rpm.bin
環境変数設定(ターミナル閉じるまで有効)
/home/admin/ec2/に解凍した場合
export JAVA_HOME=/usr
export EC2_HOME=/home/admin/ec2/ec2-api-tools
export PATH=$PATH:$JAVA_HOME/bin:$EC2_HOME/bin
export EC2_PRIVATE_KEY=/home/admin/ec2/pk-xxxxxx.pem
export EC2_CERT=/home/admin/ec2/cert-xxxxxx.pem
ec2ver
でバージョンがでたらOK

キーファイルはブラウザの管理画面から Account → Security Credentials → X.509証明書でダウンロードして置いてください。

EBSのマウント
ブラウザからVolumesを作ります。
このときくっつけたいインスタンスと同じゾーン(us-east-1cみたいなの)にしないといけません。
容量は任意で。
できたらツールで以下のコマンド。
ec2-attach-volume -d /dev/sde -i i-xxxxxxxx vol-xxxxxxxx
 i-xxxxxxxx : インスタンスのID(EC2 Instance)
 vol-xxxxxxxx : EBSのVolumeID
 ↑ブラウザの管理画面で見れます。
 /dev/sde は sdc,sdd,...... などと試して空いているところを探してください。
yes | mkfs -t ext3 /dev/sde
mkdir /data
mount /dev/sdf /data
 /dataというディレクトリを作ってマウントした場合。

EBSのバックアップ
ブラウザから EC2→Volumes Create Snapshot をしておきます。

EBSから復旧
ブラウザから EC2→Snapshots Create Volume で新しいディスクを作ります。
できたら上と同じように以下コマンドを実行します。
ec2-attach-volume -d /dev/sdg -i i-xxxxxxxx vol-xxxxxxxx
mount /dev/sdf /data
 mkfsはいりません。

S3→EC2
rubyでできたツールなので、まずrubyをインストールします。
yum install ruby
s3sync.tar.gz をダウンロードしてきてサーバー(インスタンス)に置きます。
以下/root/の下に置いた例。
cd /root
tar xvfz /some/where/s3sync.tar.gz
mkdir .s3conf
chmod 700 .s3conf

cat > ~/.s3conf/s3config.yml << E-O-F
aws_access_key_id: xxxxxxxxxxxxx
aws_secret_access_key: xxxxxxxxxxxxxxxxxxxxx
E-O-F

xxxxxxxxxxxxはブラウザの管理画面から Account → Security Credentials あたりにあります。
いちいちログインしなおさないといけなくて不便。

ディレクトリ構成はこう。
/root/.s3conf
/root/s3sync

◆バケット一覧表示
/root/s3sync/s3cmd.rb listbuckets
 hoge1
 hoge2

◆バケット内リスト
/root/s3sync/s3cmd.rb list hoge1

◆ファイル取得
/root/s3sync/s3cmd.rb get hoge1:hage1.tgz hage1.tgz

 一度使えなくなって、インスタンスを再起動したら直ったことが有ります。勘違いかもだけど。

インスタンスを作るときの注意
なにとなくクイックスタートから選んでいたら、高機能高額のものになていました。
Community AMIs タブで 32-bit centos とかで検索したら安いのを選べます。
Account → Security Credentials → アカウントアクティビティ でときどき料金の確認をしよう。