LoginSignup
4
4

More than 5 years have passed since last update.

ちょっとしたアーカイブやバイナリをcloud-initで配備する

Posted at

AWSではファイル渡したいならS3経由とかで捗る感じですが、本当にちょっとしたものの場合は、そのためにバケット用意したり、S3アクセスできるキーを用意したりというのは非常に面倒です。

cloud-initはテキストベースですが、一応がんばればバイナリファイルを渡す事も出来ますので、そのやり方。

事前準備

渡したいものをアーカイブする

1つの場合はそのままでいいですが、複数ある場合は処理が面倒なのでtar等で適当にアーカイブしておきます。後々楽なので、ルート(/)からのアーカイブにするのがおすすめ。

archive_sample
cd /
tar cpvfj /tmp/archive.tar.bz2 /tmp/hello.txt

ファイルをbase64エンコードする

cloud-initに入れるために、ファイルをbase64エンコードします。

encode_archive
base64 archive.tar.bz2 > archive.tar.bz2.b64

cloud-initをつくる

先ほどのbase64エンコードしたテキストをcloud-initに入れて、それをデコード・解凍してファイルを配備できるようにします

参考
cloud-initで設定ファイルをつくる

cloud-init_sample
#cloud-config
# vim: syntax=yaml

repo_upgrade: all

runcmd:
  -
    - sh
    - -c
    - |+
      cat > /tmp/hostkey.tar.bz2.b64 <<EOF
      QlpoOTFBWSZTWZrk4+cAAIH7hMoQAFBgAf2ACABiRt5AAACACCAAdBpPVMgGg0NDRptQSUJoDQ0A
      DQJfMgxqEE8wCRdGgjSPIMSQNVrR0mu6JPyoASNgGjy0hzIkMOUWmskiEgvXg9DmDYQE53yo5WL9
      RX3IiAfi7kinChITXJx84A==
      EOF
  - [sh, -c, "base64 -d /tmp/archive.tar.bz2.b64 > /tmp/archive.tar.bz2"]
  - [tar, xfj, /tmp/archive.tar.bz2, -C, /]

あとはこのcloud-initを使って普通にEC2インスタンスを作ってください。

あとがき

スマートな方法ではないですが、ちょっとしたバイナリを入れちゃいたい要件があったので。。。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4