2020-10-02

Share on:

10:50

起きたのは9時で株式市場が動いてる事を確認したりして、あまりにもダンボールとかが多かったのでまとめたりしてとにかく掃除をした。進捗率15%。切符とかを何とかしたい。ていうか平日の9時から11時ごろまで掃除してるって生活は何とも異常だ。こんなに時間あるならちゃんと毎日やっておけばいいのにね(できない)。

11:30

AWSアカウントを2つ申し込みしつつ、飯を炊く、炊きつつ、国勢調査を書こうかなーと思ったんだけど今日日やっぱりインターネットがいいか…

11:45

国勢調査オンライン手軽すぎてワロタ。10分かかってないかも

12:50

飯くったっぽ

これ出すのしんどい。snippet欲しい。

13:30

ダラダラしつつ再開。でも今日はあまり仕事しない、てかほとんどしない。 レシートを記録して、まああとコーヒーとか飲みながら音楽でもやってるか(グヘヘ

、と思ったけどCIの記事書きたい。遊ぶのはCI書いてからにするか。

、と思ったけどCIやめ。止まってるAWSの環境やる。

止まってるAWS

cloud-initでハマってごちゃごちゃやってたんだっけ。。。

cloud-initをテストするというか終了したり開始したりするとIP変わっちゃうからEIPを付けておくか、起動時にDNSを設定しに行くよにするのが100倍楽でしょう。コンソールからだと結果取れるけどterraform cloudだと面倒くさいから。

ただ、テンプレとして使うにはちょっと組織固有になっちゃうので、そこは面倒な所ではあります。ま、EIPにしたってそうなんだろうけど。

 1data "aws_route53_zone" "example-domain" {
 2   name         = "YOUR.DOMAIN"
 3   private_zone = "false"
 4 }
 5
 6resource "aws_route53_record" "web-public" {
 7  zone_id         = data.aws_route53_zone.example-domain.zone_id
 8  name            = "YOUR_HOST"
 9  type            = "A"
10  ttl             = "300"
11  records         = [aws_instance.web.public_ip]
12  allow_overwrite = true
13}

terraformでやるならまあ、こんな所でしょう。ただし、これはロードバランサを通さないという前提。

cloud-initって?

cloud-initってのはAWSのホストの中に入ってる構成スクリプトでcloud-initってコマンドもあるんですが、まあむずいので最初はとりあえず「こうやったらこうなる」的な理解で進めざるをえないと思う。ここでやるべきはボリュームのマウントとかホスト名の変更とかである。ユーザの作成もやってもいい。やってもいいというのは、どのみちマシンイメージは作り直しになる事うけあいなので、そっちで作っちゃってもいいぞっていう事、どっちでもいい。

でも、ここではcloud-initを取り上げているので、やれる所までやってみよう。

 1#cloud-config
 2merge_how:
 3  - name: list
 4    settings: [append]
 5  - name: dict
 6    settings: [no_replace, recurse_list]
 7
 8hostname: ${hostname}
 9fqdn: ${fqdn}
10timezone: "Asia/Tokyo"
11
12#package_update: true
13#package_upgrade: true
14
15users:
16  - default
17  - name: user
18    gecos: "Default User"
19    sudo: ["ALL=(ALL) NOPASSWD:ALL"]
20    groups: users
21    ssh_authorized_keys:
22      - "ssh-rsa ...."
23    shell: /bin/bash
24    lock_passwd: True

とまあ、こんな感じでssh_authorized_keysには自分の「公開鍵」を書きます。これでuserが出来ている事を確認できればok。でも、実はホスト名を変更したら再起動せにゃならんのだった。

ボリュームをマウントする

ボリュームはweb consoleから作っておかにゃならんという事。コマンドで何でもできるわけじゃない。で同じAZに置かないといけない(ここ重要)。というわけでここまで用意しときます。ちなみにボリュームには検索して取れるように適切な「タグ」を振りまうす。

terraform側からやる事はこの作っておいたdataを検索して取ってきてアタッチする事です。

 1 "aws_ebs_volume" "web-data" {
 2  most_recent = true
 3
 4  filter {
 5    name   = "tag:Project"
 6    values = [local.workspace]
 7  }
 8
 9  filter {
10    name   = "tag:Env"
11    values = [var.env]
12  }
13}
14
15resource "aws_volume_attachment" "web-data" {
16  device_name = "/dev/sdf"
17  volume_id   = data.aws_ebs_volume.web-data.id
18  instance_id = aws_instance.web.id
19}

こんな感じでfilterから見つけてこれるようにして、/dev/sdfにアタッチします。ここでご覧の通りterraform側ではAZは全くわからんという事になるのでAZが間違っていてもterraformはvalidになりますが、applyする時にエラーになって終わります。チーン。

ディスクを「フォーマット」する

っていう言い方でいいのかわからんが、パーディションを作ったりファイルシステムしたりします。

1# cfdisk /dev/xvdf
2# mkfs.ext4 /dev/xvdf1
3# tune2fs -r0 /dev/xvdf1

とか

でmount

1# mount /dev/xvdf1 /mnt

これ、↑この作業っすね。

1mounts:
2  - [/dev/xvdf1, /data, ext4, "rw,noatime", "0", "0"]
3
4power_state:
5#  delay: "+10"
6  mode: reboot
7  message: Bye Bye
8  timeout: 30

適用すると

1$ df -h
2Filesystem      Size  Used Avail Use% Mounted on
3/dev/xvda2      7.8G  1.1G  6.4G  14% /
4udev             10M     0   10M   0% /dev
5tmpfs           200M  4.2M  196M   3% /run
6tmpfs           500M     0  500M   0% /dev/shm
7tmpfs           5.0M     0  5.0M   0% /run/lock
8tmpfs           500M     0  500M   0% /sys/fs/cgroup
9/dev/xvdf1       14G   35M   14G   1% /data

とかってなると思います。

15:20 ちなみにこれで

進捗率50%くらいです(笑)

つか、今回の構成要件を整理してみる。

  • 単にデモ用、確認用、ステージングですらない本当に確認
    • ちょっと見たら落としてもいい、むしろ落とせ
      • じゃあDockerとかの方が楽じゃん、まあいいか
      • 落とす場合「終了」じゃなくて「停止」でもいい
  • とはいえVPCくらいはちゃんと切りたい

というわけで、まあ、ぼちぼちやっていきまショウ。

18:45

というか、ここまでで気付いたんだけど「停止」して「起動」する場合やっぱEIP当てないとダメでしょうねえ…

以下のチュートリアルを読めばとりあえず無理無理停止する事はできるようになるんじゃないかと思います。

https://aws.amazon.com/jp/premiumsupport/knowledge-center/start-stop-lambda-cloudwatch/

ただ、このチュートリアルのイマイチな所は

  • とにかく停止するだけ
  • インスタンスIDがベタ打ち

ただし、学べる事も多い

  • 関数の作り方
  • 関数を実行するroleの当て方(この場合だとEC2と起動/停止し、ログに書き込む権限を与えればいいという事が理解できる)
  • イベントのテスト発動のやり方
  • イベントのスケジュールの実際の仕掛け方

これを、もう少し発展的に改良していくといいと思うけど、時間がないからとりあえずここまで

19:20

音楽をする

3:50

起きた。アレ…