Perl で、1GB のデータ(テキストファイル)を作成する方法

次のコードを makefile.pl などというファイル名で保存して、chmod +x ./makefile.pl し、そして ./makefile.pl を実行すれば makefile.pl と同じディレクトリ上に sample.txt に1GiB (ギビバイト=2^30)ぴったりのデータ(「a」の文字で埋め尽くされた テキストファイル)が作成されていると思う。プログラム的には、例えば 1KiB のダミーデータを変数($data)に入れてそれを 1024 x 1024 回書き込んだ方が 1文字ずつ 2^30 回書き込むよりも速いと思うが、試してみたらバァッファオーバーフローしてるのか?うまくいかなかった。
ちなみに、2^30 = 1ギガバイト = 1,073,741,824 バイト = 1024 バイト x 1024 キロバイト x 1024 メガバイト

#!/usr/bin/perl

open(OUT, '>sample.txt');
for(my $i = 0; $i < 2^30; $i++) { print OUT 'a'; }
close(OUT);

1;

次のコードを makefile.pl などというファイル名で保存して、chmod +x ./makefile.pl し、そして ./makefile.pl を実行すれば makefile.pl と同じディレクトリ上に sample.txt に1GiB (ギビバイト=2^30)ぴったりのデータ(「a」の文字で埋め尽くされた テキストファイル)が作成されていると思う。プログラム的には、例えば 1KiB のダミーデータを変数($data)に入れてそれを 1024 x 1024 回書き込んだ方が 1文字ずつ 2^30 回書き込むよりも速いと思うが、試してみたらバァッファオーバーフローしてるのか?うまくいかなかった。
ちなみに、2^30 = 1ギガバイト = 1,073,741,824 バイト = 1024 バイト x 1024 キロバイト x 1024 メガバイト

#!/usr/bin/perl

open(OUT, '>sample.txt');
for(my $i = 0; $i < 2^30; $i++) { print OUT 'a'; }
close(OUT);

1;

Amazon EC2 で、サーバ自身のグローバル IP アドレスを調べる方法

Amazon EC2 は何もしないと DHCP でグローバル IP アドレスが割り当てられる。これはサーバを立ち上げるときには大変困る。EC2 でサーバを立ち上げた後、アプリから割り振られた IP アドレスを知るにはどうしたらいいのだろう?ひとつには、ec2-describe-instances で現在起動しているインスタンスの一覧を出して調べていく…という方法があるが、あまりスマートではない。というわけで、次のようにするとよいと思う。

curl https://169.254.169.254/2008-02-01/meta-data/public-ipv4
この例のように Amazon EC2 では、https://169.254.169.254/2008-02-01/meta-data/パラメータ という URL で、サーバ内部から curl を使って調べることができるようだ。

Amazon EC2 は何もしないと DHCP でグローバル IP アドレスが割り当てられる。これはサーバを立ち上げるときには大変困る。EC2 でサーバを立ち上げた後、アプリから割り振られた IP アドレスを知るにはどうしたらいいのだろう?ひとつには、ec2-describe-instances で現在起動しているインスタンスの一覧を出して調べていく…という方法があるが、あまりスマートではない。というわけで、次のようにするとよいと思う。

curl https://169.254.169.254/2008-02-01/meta-data/public-ipv4
この例のように Amazon EC2 では、https://169.254.169.254/2008-02-01/meta-data/パラメータ という URL で、サーバ内部から curl を使って調べることができるようだ。

Amazon EC2 で、インスタンスを終了する

  1. イメージ登録を抹消(自分のマシンから)
    • # ec2-deregister ami-5bae4b32
      IMAGE ami-5bae4b32
  2. イメージを S3 から削除(EC2 のインスタンスから)
    • # ec2-delete-bundle -b <your-s3-bucket> -p image -a <aws-access-key-id> -s <aws-secret-access-key>
  3. インタンスを停止
    • # ec2-terminate-instances i-10a64379
      (例)INSTANCE i-10a64379 running shutting-down

      または、

    • # shutdown –h now

※イメージを S3 に保存する前にインスタンスを停止するとすべての変更が失われるので注意。不意に EC2 のインスタンスを落としてもデータだけは失いたくない場合は EBS を利用する(その理由ために EBS が存在する)。

  1. イメージ登録を抹消(自分のマシンから)
    • # ec2-deregister ami-5bae4b32
      IMAGE ami-5bae4b32
  2. イメージを S3 から削除(EC2 のインスタンスから)
    • # ec2-delete-bundle -b <your-s3-bucket> -p image -a <aws-access-key-id> -s <aws-secret-access-key>
  3. インタンスを停止
    • # ec2-terminate-instances i-10a64379
      (例)INSTANCE i-10a64379 running shutting-down

      または、

    • # shutdown –h now

※イメージを S3 に保存する前にインスタンスを停止するとすべての変更が失われるので注意。不意に EC2 のインスタンスを落としてもデータだけは失いたくない場合は EBS を利用する(その理由ために EBS が存在する)。

Amazon EC2 で、イメージを作成する

  1. インスタンスの /mnt ディレクトリに鍵ペアをアップロード
    • # scp -i id_rsa-gsg-keypair pk-xxxxx.pem cert-xxxxx.pem root@domU-12-34-31-00-00-05.usma1.compute.amazonaws.com:/mnt ←入力
  2. ボリュームをバンドル
    • # ec2-bundle-vol -d /mnt -k /mnt/pk-xxxxx.pem -c /mnt/cert-xxxxx.pem -u <your_EC2_user_id> -r i386 ←入力
      # ls –la /mnt/image.* (で確認)
  3. イメージ(AMI)を S3 にアップロード
    • # ec2-upload-bundle -b <your-s3-bucket> -m /mnt/image.manifest.xml -a <aws-access-key-id> -s <aws-secret-access-key> ←入力
  4. AMI を登録
    • # ec2-register /mnt/image.manifest.xml ←入力
      IMAGE ami-5bae4b32 ←これは結果出力
  5. 登録した AMI をインタンス化
      1. インスタンスの /mnt ディレクトリに鍵ペアをアップロード
        • # scp -i id_rsa-gsg-keypair pk-xxxxx.pem cert-xxxxx.pem root@domU-12-34-31-00-00-05.usma1.compute.amazonaws.com:/mnt ←入力
      2. ボリュームをバンドル
        • # ec2-bundle-vol -d /mnt -k /mnt/pk-xxxxx.pem -c /mnt/cert-xxxxx.pem -u <your_EC2_user_id> -r i386 ←入力
          # ls –la /mnt/image.* (で確認)
      3. イメージ(AMI)を S3 にアップロード
        • # ec2-upload-bundle -b <your-s3-bucket> -m /mnt/image.manifest.xml -a <aws-access-key-id> -s <aws-secret-access-key> ←入力
      4. AMI を登録
        • # ec2-register /mnt/image.manifest.xml ←入力
          IMAGE ami-5bae4b32 ←これは結果出力
      5. 登録した AMI をインタンス化