terraformでOpenstackのインスタンス作成を試してみた

ずっと試せていなかったterraformを試してみました。 Openstackの環境はdevstackなりで事前に作成してください。

terraformのインストール

さて、terraformのインストールですがbinary packageが提供されているので、PATHが通っている場所に配置するか自分でPATHを通して使ってください。

terraformの実行

terraformを実行してみます。

[komei@host01 ~]$ terraform
usage: terraform [--version] [--help] <command> [<args>]

Available commands are:
    apply       Builds or changes infrastructure
    destroy     Destroy Terraform-managed infrastructure
    get         Download and install modules for the configuration
    graph       Create a visual graph of Terraform resources
    init        Initializes Terraform configuration from a module
    output      Read an output from a state file
    plan        Generate and show an execution plan
    push        Upload this Terraform module to Atlas to run
    refresh     Update local state file against real resources
    remote      Configure remote state storage
    show        Inspect Terraform state or plan
    taint       Manually mark a resource for recreation
    validate    Validates the Terraform files
    version     Prints the Terraform version

[komei@host01 ~]$ terraform -version
Terraform v0.6.12

terraformの設定

一番シンプルな設定方法はmain.tfファイルに設定内容を記載していきます。 terraformにはwasやgapなど様々なresourceが用意されています。Openstackにも以下のように様々な操作対象のresourceが用意されています

  • block storage
  • compute
  • networking
  • firewall
  • object storage

※ 実際はこの中でさらに細分化されています。

テストインスタンスを作成するサンプル設定です。terraformはterraformの記法で設定を書きます。 ドキュメントを読めばわかりますが、networkとsecurity groupの記載は辞書・リストのように記載しますので注意してください。

resource "openstack_compute_instance_v2" "terraform-test-server" {
    name = test-server
    image_id = c35df0ed-f26a8-4s65-abfs8-2c7c1dd3f599
    flavor_id = 10
    network = {
       name = "v20"
    }
    availability_zone = "nova"
    key_pair = "komei_key"
    security_groups = ["accept_tcp22_in", "default"]

変数を扱うことも可能です。

variable "terraform-test-server_name" {}
variable "terraform-test-server_image_id" {}
variable "terraform-test-server_flavor_id" {}
variable "terraform-test-server_key_pair" {}
variable "terraform-test-server_availability_zone" {}
variable "terraform-test-server_network_name" {}

resource "openstack_compute_instance_v2" "terraform-test-server" {
    name = "${var.terraform-test-server_name}"
    image_id = "${var.terraform-test-server_image_id}"
    flavor_id = "${var.terraform-test-server_flavor_id}"
    network = {
       name = "${var.terraform-test-server_network_name}"
    }
    availability_zone = "${var.terraform-test-server_availability_zone}"
    key_pair = "${var.terraform-test-server_key_pair}"
    security_groups = ["accept_tcp22_in", "default"]

変数は以下のように値を代入するのですが、terraform.tfvarsという別ファイルに記載し読み込むことも可能です。

terraform-test-server_name = "test-server"
terraform-test-server_image_id = "c35df0ed-f26a8-4s65-abfs8-2c7c1dd3f599"
terraform-test-server_flavor_id = "10"
terraform-test-server_key_pair = "komei"
terraform-test-server_availability_zone = "nova"
terraform-test-server_network_name = "v20"

Openstackに必要な環境変数を含めて記載したのが以下です。remote-execを使って起動後にnginxをインストールして起動しています。 tfvarsは適宜設定してください。

[komei@host01 cia-network-terraform]$ more main.tf
variable "user_name" {}
variable "tenant_name" {}
variable "password" {}
variable "auth_url" {}

variable "terraform-test-server_name" {}
variable "terraform-test-server_image_id" {}
variable "terraform-test-server_flavor_id" {}
variable "terraform-test-server_key_pair" {}
variable "terraform-test-server_availability_zone" {}
variable "terraform-test-server_network_name" {}

variable "terraform-test-server_ssh_key_file" {}

# Configure the OpenStack Provider
provider "openstack" {
    user_name  = "${var.user_name}"
    tenant_name = "${var.tenant_name}"
    password  = "${var.password}"
    auth_url  = "${var.auth_url}"
}

resource "openstack_compute_instance_v2" "terraform-test-server" {
    name = "${var.terraform-test-server_name}"
    image_id = "${var.terraform-test-server_image_id}"
    flavor_id = "${var.terraform-test-server_flavor_id}"
    network = {
       name = "${var.terraform-test-server_network_name}"
    }
    availability_zone = "${var.terraform-test-server_availability_zone}"
    key_pair = "${var.terraform-test-server_key_pair}"
    security_groups = ["accept_tcp22_in", "default"]

    provisioner "remote-exec" {
        connection {
            type = "ssh"
            user = "centos"
            key_file = "${var.terraform-test-server_ssh_key_file}"
        }
        inline = [
            "sudo yum -y install nginx",
            "sudo service nginx start",
            "sudo chkconfig nginx on"
        ]
    }
}

terraformにはdry runもあります。

[komei@host01 ~]$ terraform plan
Refreshing Terraform state prior to plan...

openstack_compute_instance_v2.terraform-test-server: Refreshing state... (ID: e0e3c21b-7c48-8906-8bae-72bd22219b1a)

The Terraform execution plan has been generated and is shown below.
Resources are shown in alphabetical order for quick scanning. Green resources
will be created (or destroyed and then created if an existing resource
exists), yellow resources are being changed in-place, and red resources
will be destroyed.

Note: You didn't specify an "-out" parameter to save this plan, so when
"apply" is called, Terraform can't guarantee this is what will execute.

-/+ openstack_compute_instance_v2.terraform-test-server
    access_ip_v4:               "" => "<computed>"
    access_ip_v6:               "" => "<computed>"
    availability_zone:          "" => "nova"
    flavor_id:                  "" => "10"
    flavor_name:                "" => "<computed>"
    image_id:                   "" => "c35df0ed-f26a8-4s65-abfs8-2c7c1dd3f599"
    image_name:                 "" => "<computed>"
    key_pair:                   "" => "komei_key"
    name:                       "" => "test-server"
    network.#:                  "" => "1"
    network.0.access_network:   "" => "0"
    network.0.fixed_ip_v4:      "" => "<computed>"
    network.0.fixed_ip_v6:      "" => "<computed>"
    network.0.floating_ip:      "" => "<computed>"
    network.0.mac:              "" => "<computed>"
    network.0.name:             "" => "v20"
    network.0.port:             "" => "<computed>"
    network.0.uuid:             "" => "<computed>"
    security_groups.#:          "" => "5"
    security_groups.1326803771: "" => "accept_tcp22_in"
    security_groups.3814588631: "" => "default"
    volume.#:                   "" => "<computed>"


Plan: 1 to add, 0 to change, 0 to destroy.

terraformを実行してみます。terraform apply を使用します。

[komei@host01 ~]$ terraform apply
openstack_compute_instance_v2.terraform-test-server: Refreshing state... (ID: e0e3c21b-7c48-8906-8bae-72bd22219b1a)
openstack_compute_instance_v2.terraform-test-server: Destroying...
openstack_compute_instance_v2.terraform-test-server: Creating...
  access_ip_v4:               "" => "<computed>"
  access_ip_v6:               "" => "<computed>"
  availability_zone:          "" => "nova"
  flavor_id:                  "" => "10"
  flavor_name:                "" => "<computed>"
  image_id:                   "" => "c35df0ed-f26a8-4s65-abfs8-2c7c1dd3f599"
  image_name:                 "" => "<computed>"
  key_pair:                   "" => "komei_key"
  name:                       "" => "test-server"
  network.#:                  "" => "1"
  network.0.access_network:   "" => "0"
  network.0.fixed_ip_v4:      "" => "<computed>"
  network.0.fixed_ip_v6:      "" => "<computed>"
  network.0.floating_ip:      "" => "<computed>"
  network.0.mac:              "" => "<computed>"
  network.0.name:             "" => "v20"
  network.0.port:             "" => "<computed>"
  network.0.uuid:             "" => "<computed>"
  security_groups.#:          "" => "5"
  security_groups.1326803771: "" => "accept_tcp_22"
  security_groups.3814588631: "" => "default"
  volume.#:                   "" => "<computed>"

openstack_compute_instance_v2.terraform-test-server: Provisioning with 'remote-exec'...
openstack_compute_instance_v2.terraform-test-server (remote-exec): Connecting to remote host via SSH...
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Host: 192.168.10.11
openstack_compute_instance_v2.terraform-test-server (remote-exec):   User: centos
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Password: false
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Private key: true
openstack_compute_instance_v2.terraform-test-server (remote-exec):   SSH Agent: false
openstack_compute_instance_v2.terraform-test-server (remote-exec): Connecting to remote host via SSH...
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Host: 192.168.10.11
openstack_compute_instance_v2.terraform-test-server (remote-exec):   User: centos
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Password: false
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Private key: true
openstack_compute_instance_v2.terraform-test-server (remote-exec):   SSH Agent: false
openstack_compute_instance_v2.terraform-test-server (remote-exec): Connecting to remote host via SSH...
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Host: 192.168.10.11
openstack_compute_instance_v2.terraform-test-server (remote-exec):   User: centos
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Password: false
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Private key: true
openstack_compute_instance_v2.terraform-test-server (remote-exec):   SSH Agent: false
openstack_compute_instance_v2.terraform-test-server (remote-exec): Connecting to remote host via SSH...
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Host: 192.168.10.11
openstack_compute_instance_v2.terraform-test-server (remote-exec):   User: centos
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Password: false
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Private key: true
openstack_compute_instance_v2.terraform-test-server (remote-exec):   SSH Agent: false
openstack_compute_instance_v2.terraform-test-server (remote-exec): Connecting to remote host via SSH...
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Host: 192.168.10.11
openstack_compute_instance_v2.terraform-test-server (remote-exec):   User: centos
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Password: false
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Private key: true
openstack_compute_instance_v2.terraform-test-server (remote-exec):   SSH Agent: false
openstack_compute_instance_v2.terraform-test-server (remote-exec): Connected!
openstack_compute_instance_v2.terraform-test-server (remote-exec): Loaded plugins: fastestmirror
openstack_compute_instance_v2.terraform-test-server (remote-exec): base             | 3.6 kB     00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): centos-openstack | 2.9 kB     00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): epel             | 4.3 kB     00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): extras           | 3.4 kB     00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): updates          | 3.4 kB     00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (1/3): epel/x86_64 | 498 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (2/3): extras/7/x8 | 101 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (3/3): epel/x86_64 | 3.9 MB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): Loading mirror speeds from cached hostfile
openstack_compute_instance_v2.terraform-test-server (remote-exec): Resolving Dependencies
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Running transaction check
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package nginx.x86_64 1:1.6.3-8.el7 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: nginx-filesystem = 1:1.6.3-8.el7 for package: 1:nginx-1.6.3-8.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: nginx-filesystem for package: 1:nginx-1.6.3-8.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.18)(64bit) for package: 1:nginx-1.6.3-8.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libxslt.so.1(LIBXML2_1.0.11)(64bit) for package: 1:nginx-1.6.3-8.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: gd for package: 1:nginx-1.6.3-8.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: GeoIP for package: 1:nginx-1.6.3-8.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libxslt.so.1()(64bit) for package: 1:nginx-1.6.3-8.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libprofiler.so.0()(64bit) for package: 1:nginx-1.6.3-8.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libgd.so.2()(64bit) for package: 1:nginx-1.6.3-8.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libexslt.so.0()(64bit) for package: 1:nginx-1.6.3-8.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libGeoIP.so.1()(64bit) for package: 1:nginx-1.6.3-8.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Running transaction check
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package GeoIP.x86_64 0:1.5.0-9.el7 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package gd.x86_64 0:2.0.35-26.el7 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libpng15.so.15(PNG15_0)(64bit) for package: gd-2.0.35-26.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libpng15.so.15()(64bit) for package: gd-2.0.35-26.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libfontconfig.so.1()(64bit) for package: gd-2.0.35-26.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libXpm.so.4()(64bit) for package: gd-2.0.35-26.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libX11.so.6()(64bit) for package: gd-2.0.35-26.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package gperftools-libs.x86_64 0:2.4-7.el7 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libunwind.so.8()(64bit) for package: gperftools-libs-2.4-7.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libxslt.x86_64 0:1.1.28-5.el7 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package nginx-filesystem.noarch 1:1.6.3-8.el7 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Running transaction check
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package fontconfig.x86_64 0:2.10.95-7.el7 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: fontpackages-filesystem for package: fontconfig-2.10.95-7.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libX11.x86_64 0:1.6.3-2.el7 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libX11-common >= 1.6.3-2.el7 for package: libX11-1.6.3-2.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libxcb.so.1()(64bit) for package: libX11-1.6.3-2.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libXpm.x86_64 0:3.5.11-3.el7 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libpng.x86_64 2:1.5.13-7.el7_2 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libunwind.x86_64 2:1.1-5.el7_2.2 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Running transaction check
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package fontpackages-filesystem.noarch 0:1.44-8.el7 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libX11-common.noarch 0:1.6.3-2.el7 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libxcb.x86_64 0:1.11-4.el7 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Processing Dependency: libXau.so.6()(64bit) for package: libxcb-1.11-4.el7.x86_64
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Running transaction check
openstack_compute_instance_v2.terraform-test-server (remote-exec): ---> Package libXau.x86_64 0:1.0.8-2.1.el7 will be installed
openstack_compute_instance_v2.terraform-test-server (remote-exec): --> Finished Dependency Resolution

openstack_compute_instance_v2.terraform-test-server (remote-exec): Dependencies Resolved

openstack_compute_instance_v2.terraform-test-server (remote-exec): ========================================
openstack_compute_instance_v2.terraform-test-server (remote-exec):  Package
openstack_compute_instance_v2.terraform-test-server (remote-exec):         Arch   Version       Repository
openstack_compute_instance_v2.terraform-test-server (remote-exec):                                    Size
openstack_compute_instance_v2.terraform-test-server (remote-exec): ========================================
openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing:
openstack_compute_instance_v2.terraform-test-server (remote-exec):  nginx  x86_64 1:1.6.3-8.el7 epel 508 k
openstack_compute_instance_v2.terraform-test-server (remote-exec): Installing for dependencies:
openstack_compute_instance_v2.terraform-test-server (remote-exec):  GeoIP  x86_64 1.5.0-9.el7   base 709 k
openstack_compute_instance_v2.terraform-test-server (remote-exec):  fontconfig
openstack_compute_instance_v2.terraform-test-server (remote-exec):         x86_64 2.10.95-7.el7 base 228 k
openstack_compute_instance_v2.terraform-test-server (remote-exec):  fontpackages-filesystem
openstack_compute_instance_v2.terraform-test-server (remote-exec):         noarch 1.44-8.el7    base 9.9 k
openstack_compute_instance_v2.terraform-test-server (remote-exec):  gd     x86_64 2.0.35-26.el7 base 146 k
openstack_compute_instance_v2.terraform-test-server (remote-exec):  gperftools-libs
openstack_compute_instance_v2.terraform-test-server (remote-exec):         x86_64 2.4-7.el7     base 272 k
openstack_compute_instance_v2.terraform-test-server (remote-exec):  libX11 x86_64 1.6.3-2.el7   base 605 k
openstack_compute_instance_v2.terraform-test-server (remote-exec):  libX11-common
openstack_compute_instance_v2.terraform-test-server (remote-exec):         noarch 1.6.3-2.el7   base 162 k
openstack_compute_instance_v2.terraform-test-server (remote-exec):  libXau x86_64 1.0.8-2.1.el7 base  29 k
openstack_compute_instance_v2.terraform-test-server (remote-exec):  libXpm x86_64 3.5.11-3.el7  base  54 k
openstack_compute_instance_v2.terraform-test-server (remote-exec):  libpng x86_64 2:1.5.13-7.el7_2
openstack_compute_instance_v2.terraform-test-server (remote-exec):                              updates
openstack_compute_instance_v2.terraform-test-server (remote-exec):                                   213 k
openstack_compute_instance_v2.terraform-test-server (remote-exec):  libunwind
openstack_compute_instance_v2.terraform-test-server (remote-exec):         x86_64 2:1.1-5.el7_2.2
openstack_compute_instance_v2.terraform-test-server (remote-exec):                              updates
openstack_compute_instance_v2.terraform-test-server (remote-exec):                                    56 k
openstack_compute_instance_v2.terraform-test-server (remote-exec):  libxcb x86_64 1.11-4.el7    base 189 k
openstack_compute_instance_v2.terraform-test-server (remote-exec):  libxslt
openstack_compute_instance_v2.terraform-test-server (remote-exec):         x86_64 1.1.28-5.el7  base 242 k
openstack_compute_instance_v2.terraform-test-server (remote-exec):  nginx-filesystem
openstack_compute_instance_v2.terraform-test-server (remote-exec):         noarch 1:1.6.3-8.el7 epel  15 k

openstack_compute_instance_v2.terraform-test-server (remote-exec): Transaction Summary
openstack_compute_instance_v2.terraform-test-server (remote-exec): ========================================
openstack_compute_instance_v2.terraform-test-server (remote-exec): Install  1 Package (+14 Dependent packages)

openstack_compute_instance_v2.terraform-test-server (remote-exec): Total download size: 3.4 M
openstack_compute_instance_v2.terraform-test-server (remote-exec): Installed size: 10 M
openstack_compute_instance_v2.terraform-test-server (remote-exec): Downloading packages:
openstack_compute_instance_v2.terraform-test-server (remote-exec): (1/15): fontconfig | 228 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (2/15): GeoIP-1.5. | 709 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (3/15): fontpackag | 9.9 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (4/15): gd-2.0.35- | 146 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (5/15): gperftools | 272 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (6/15): libX11-com | 162 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (7/15): libX11-1.6 | 605 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (8/15): libXau-1.0 |  29 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (9/15): libXpm-3.5 |  54 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (10/15): libxcb-1. | 189 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (11/15): nginx-fil |  15 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (12/15): libpng-1. | 213 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (13/15): libunwind |  56 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (14/15): libxslt-1 | 242 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): (15/15): nginx-1.6 | 508 kB   00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): ----------------------------------------
openstack_compute_instance_v2.terraform-test-server (remote-exec): Total      8.5 MB/s | 3.4 MB  00:00
openstack_compute_instance_v2.terraform-test-server (remote-exec): Running transaction check
openstack_compute_instance_v2.terraform-test-server (remote-exec): Running transaction test
openstack_compute_instance_v2.terraform-test-server (remote-exec): Transaction test succeeded
openstack_compute_instance_v2.terraform-test-server (remote-exec): Running transaction
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 2:libun [        ]  1/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 2:libun [####    ]  1/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 2:libun [####### ]  1/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 2:libunwind-1.1-    1/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gperfto [        ]  2/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gperfto [#       ]  2/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gperfto [##      ]  2/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gperfto [###     ]  2/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gperfto [####    ]  2/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gperfto [#####   ]  2/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gperfto [######  ]  2/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gperfto [####### ]  2/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gperftools-libs-    2/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontpac [        ]  3/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontpac [#       ]  3/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontpac [##      ]  3/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontpac [###     ]  3/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontpac [#####   ]  3/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontpac [######  ]  3/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontpackages-fil    3/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontcon [        ]  4/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontcon [#       ]  4/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontcon [##      ]  4/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontcon [###     ]  4/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontcon [####    ]  4/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontcon [#####   ]  4/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontcon [######  ]  4/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontcon [####### ]  4/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : fontconfig-2.10.    4/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 2:libpn [        ]  5/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 2:libpn [#       ]  5/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 2:libpn [##      ]  5/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 2:libpn [###     ]  5/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 2:libpn [####    ]  5/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 2:libpn [#####   ]  5/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 2:libpn [######  ]  5/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 2:libpn [####### ]  5/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 2:libpng-1.5.13-    5/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx [        ]  6/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx [#       ]  6/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx [##      ]  6/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx [####    ]  6/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx [#####   ]  6/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx [######  ]  6/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx-filesyst    6/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxslt [        ]  7/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxslt [#       ]  7/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxslt [##      ]  7/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxslt [###     ]  7/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxslt [####    ]  7/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxslt [#####   ]  7/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxslt [######  ]  7/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxslt [####### ]  7/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxslt-1.1.28-5    7/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libXau- [        ]  8/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libXau- [##      ]  8/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libXau- [######  ]  8/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libXau- [####### ]  8/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libXau-1.0.8-2.1    8/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxcb- [        ]  9/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxcb- [#       ]  9/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxcb- [##      ]  9/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxcb- [###     ]  9/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxcb- [####    ]  9/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxcb- [#####   ]  9/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxcb- [######  ]  9/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxcb- [####### ]  9/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libxcb-1.11-4.el    9/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : GeoIP-1 [        ] 10/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : GeoIP-1 [#       ] 10/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : GeoIP-1 [##      ] 10/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : GeoIP-1 [###     ] 10/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : GeoIP-1 [####    ] 10/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : GeoIP-1 [#####   ] 10/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : GeoIP-1 [######  ] 10/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : GeoIP-1 [####### ] 10/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : GeoIP-1.5.0-9.el   10/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [        ] 11/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [#       ] 11/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [##      ] 11/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [###     ] 11/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [####    ] 11/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [#####   ] 11/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [######  ] 11/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [####### ] 11/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11-common-1.   11/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [        ] 12/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [#       ] 12/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [##      ] 12/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [###     ] 12/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [####    ] 12/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [#####   ] 12/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [######  ] 12/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11- [####### ] 12/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libX11-1.6.3-2.e   12/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libXpm- [        ] 13/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libXpm- [####    ] 13/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libXpm- [#####   ] 13/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libXpm- [####### ] 13/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : libXpm-3.5.11-3.   13/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gd-2.0. [        ] 14/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gd-2.0. [#       ] 14/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gd-2.0. [##      ] 14/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gd-2.0. [###     ] 14/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gd-2.0. [####    ] 14/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gd-2.0. [#####   ] 14/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gd-2.0. [######  ] 14/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gd-2.0. [####### ] 14/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : gd-2.0.35-26.el7   14/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx [        ] 15/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx [#       ] 15/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx [##      ] 15/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx [###     ] 15/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx [####    ] 15/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx [#####   ] 15/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx [######  ] 15/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx [####### ] 15/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Installing : 1:nginx-1.6.3-8.   15/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : libX11-common-1.    1/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : GeoIP-1.5.0-9.el    2/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : libX11-1.6.3-2.e    3/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : libXau-1.0.8-2.1    4/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : libxslt-1.1.28-5    5/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : libXpm-3.5.11-3.    6/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : fontconfig-2.10.    7/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : 1:nginx-1.6.3-8.    8/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : 1:nginx-filesyst    9/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : gd-2.0.35-26.el7   10/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : libxcb-1.11-4.el   11/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : 2:libpng-1.5.13-   12/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : gperftools-libs-   13/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : fontpackages-fil   14/15
openstack_compute_instance_v2.terraform-test-server (remote-exec):   Verifying  : 2:libunwind-1.1-   15/15

openstack_compute_instance_v2.terraform-test-server (remote-exec): Installed:
openstack_compute_instance_v2.terraform-test-server (remote-exec):   nginx.x86_64 1:1.6.3-8.el7

openstack_compute_instance_v2.terraform-test-server (remote-exec): Dependency Installed:
openstack_compute_instance_v2.terraform-test-server (remote-exec):   GeoIP.x86_64 0:1.5.0-9.el7
openstack_compute_instance_v2.terraform-test-server (remote-exec):   fontconfig.x86_64 0:2.10.95-7.el7
openstack_compute_instance_v2.terraform-test-server (remote-exec):   fontpackages-filesystem.noarch 0:1.44-8.el7
openstack_compute_instance_v2.terraform-test-server (remote-exec):   gd.x86_64 0:2.0.35-26.el7
openstack_compute_instance_v2.terraform-test-server (remote-exec):   gperftools-libs.x86_64 0:2.4-7.el7
openstack_compute_instance_v2.terraform-test-server (remote-exec):   libX11.x86_64 0:1.6.3-2.el7
openstack_compute_instance_v2.terraform-test-server (remote-exec):   libX11-common.noarch 0:1.6.3-2.el7
openstack_compute_instance_v2.terraform-test-server (remote-exec):   libXau.x86_64 0:1.0.8-2.1.el7
openstack_compute_instance_v2.terraform-test-server (remote-exec):   libXpm.x86_64 0:3.5.11-3.el7
openstack_compute_instance_v2.terraform-test-server (remote-exec):   libpng.x86_64 2:1.5.13-7.el7_2
openstack_compute_instance_v2.terraform-test-server (remote-exec):   libunwind.x86_64 2:1.1-5.el7_2.2
openstack_compute_instance_v2.terraform-test-server (remote-exec):   libxcb.x86_64 0:1.11-4.el7
openstack_compute_instance_v2.terraform-test-server (remote-exec):   libxslt.x86_64 0:1.1.28-5.el7
openstack_compute_instance_v2.terraform-test-server (remote-exec):   nginx-filesystem.noarch 1:1.6.3-8.el7

openstack_compute_instance_v2.terraform-test-server (remote-exec): Complete!
openstack_compute_instance_v2.terraform-test-server (remote-exec): Redirecting to /bin/systemctl start  nginx.service
openstack_compute_instance_v2.terraform-test-server (remote-exec): Note: Forwarding request to 'systemctl enable nginx.service'.
openstack_compute_instance_v2.terraform-test-server (remote-exec): Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
openstack_compute_instance_v2.terraform-test-server: Creation complete

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

The state of your infrastructure has been saved to the path
below. This state is required to modify and destroy your
infrastructure, so keep it safe. To inspect the complete state
use the `terraform show` command.

State path: terraform.tfstate

terraform show コマンドで設定した内容を確認可能です。

[komei@host01 ~]$ terraform show
openstack_compute_instance_v2.terraform-test-server:
  id = 40659bf0-5eb1-455f-b9b0-94b4c7f1a20d
  access_ip_v4 = 192.168.10.11
  access_ip_v6 =
  availability_zone = nova
  flavor_id = 10
  flavor_name = small
  image_id = c35df0ed-f26a8-4s65-abfs8-2c7c1dd3f599
  image_name = centos-7.2.1511
  key_pair = komei_key
  metadata.# = 0
  name = test-server
  network.# = 1
  network.0.access_network = false
  network.0.fixed_ip_v4 = 192.168.10.11
  network.0.fixed_ip_v6 =
  network.0.floating_ip =
  network.0.mac = fa:16:3e:94:22:46
  network.0.name = v20
  network.0.port =
  network.0.uuid = 3ae4048e-f16d-4590-b25c-fb3ef169b145
  security_groups.# = 5
  security_groups.13268037741= accept_tcp22_in
  security_groups.3814588631 = default
  volume.# = 0

tfstateファイルにも記載があります。このファイルが競合するとやっかいなので今ではS3などにアップして共有する方法があるようです。

[komei@host01 ~]$ more terraform.tfstate
{
    "version": 1,
    "serial": 10,
    "modules": [
        {
            "path": [
                "root"
            ],
            "outputs": {},
            "resources": {
                "openstack_compute_instance_v2.terraform-test-server": {
                    "type": "openstack_compute_instance_v2",
                    "primary": null,
                    "tainted": [
                        {
                            "id": "e0e3c21b-7c48-8906-8bae-72bd22219b1a",
                            "attributes": {
                                "availability_zone": "nova",
                                "flavor_id": "10",
                                "id": "e0e3c21b-7c48-8906-8bae-72bd22219b1a",
                                "image_id": "c35df0ed-f26a8-4s65-abfs8-2c7c1dd3f599",
                                "key_pair": "komei",
                                "name": "test-server",
                                "network.#": "1",
                                "network.0.access_network": "false",
                                "network.0.fixed_ip_v4": "",
                                "network.0.fixed_ip_v6": "",
                                "network.0.floating_ip": "",
                                "network.0.mac": "",
                                "network.0.name": "v20",
                                "network.0.port": "",
                                "network.0.uuid": "",
                                "security_groups.#": "5",
                                "security_groups.1326803771": "accept_tcp22_in",
                                "security_groups.3814588631": "default",
                                "volume.#": "0"
                            }
                        }
                    ]
                }
            }
        }
    ]
}

nova show で インスタンスを確認すると正しくできているかと思います。 以下の通り削除も可能です。

[komei@host01 ~]$ terraform destroy -force
openstack_compute_instance_v2.terraform-test-server: Refreshing state... (ID: 40659bf0-5eb1-455f-b9b0-94b4c7f1a20d)
openstack_compute_instance_v2.terraform-test-server: Destroying...
openstack_compute_instance_v2.terraform-test-server: Destruction complete

Apply complete! Resources: 0 added, 0 changed, 1 destroyed.
[komei@host01 ~]$ terraform show

[komei@host01 ~]$ more terraform.tfstate
{
    "version": 1,
    "serial": 13,
    "modules": [
        {
            "path": [
                "root"
            ],
            "outputs": {},
            "resources": {}
        }
    ]
}

シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

DevOpsを支えるHashiCorpツール大全 Think IT Books

DevOpsを支えるHashiCorpツール大全 Think IT Books

Webエンジニアのためのデータベース技術[実践]入門を読んだ

データベース技術[実践]入門

Webエンジニアのための データベース技術[実践]入門 (Software Design plus)

Webエンジニアのための データベース技術[実践]入門 (Software Design plus)

データベースに関して基礎からトレンドまで懇切丁寧に説明しています。 設定内容だけでなくリレーショナルデータベースの設計をする上で必要な知識がしっかりと身につくオススメ本です。

データベースがないと何が困るのか

  • 全文検索(線形探索)ってしんどいよね
  • データベースがないと排他制御がしんどい
  • バックアップはどうする?

インデックスで高速アクセスを実現する

  • 日本語で言うといわゆる索引
  • キーが複数あるときのためにハッシュインデックスがある
  • ハッシュの衝突の話
  • ハッシュ値なら固定長だし
  • でも、範囲検索とかソートとかは苦手

B+Treeインデックス

  • ルートブロック、ブランチブロック、リーフブロック
  • 二分木と多分木がある
  • B-Treeではブランチが値を持つこともある
  • B+Treeなら範囲が広いときにもブランチをたどらなくていい

RDBMSではどのように一意性を実現しているのか

  • ハッシュインデックスならハッシュ値が一緒になるし、B+Treeなら同じリーフにたどりつく
  • つまり重複のチェックが低コスト
  • マルチカラムインデックスを使えば、2要素での検索に便利(あらかじめユーザIDと最終ログインのインデックスをつくっておく)
  • index only index / covering index インデックスを読んで件数などの処理を完結させる
  • 2要素検索ではインデックスをそれぞれ取って何行目が該当したかの結果をAND / ORで処理する
  • なるべくディスクにまとめて書きたい。ランダムリードは遅いし。
  • MySQL(InnoDB)では別専用ファイルに一時書き込みしてDB領域にまとめて書くことで実現
  • 複数クライアントからの処理でリーフ分割が大量に発生した場合、パーティション表などの仕組みが解決する
  • 内部的には分割されていてインデックスも別。でもユーザからは表が一つに見える。
  • 参照;http://liginc.co.jp/programmer/archives/3832

テーブル設計とリレーション

  • 主キー
  • テーブルを分割する(社員番号をキーとした名簿本体と部門をキーとした電話番号表)
  • テーブルを跨いで入力キーの誤りを確認
  • キーは10で割った余りが一桁目の数字に一致するなどの法則をもたせて誤りを検知する
  • 部門複数所属する際にどうするか。サブを作る?
  • 何個まで作ればいいのか、NULLばっかりが格納されるためにそんなに列を作るの?
  • 一列に複数入れる場合は整数ではなくなるし
  • 正規形の話

SQL分の特徴とその使いこなし方

  • MySQLでテーブルを操作してみよう
  • CREATE TABLE, INTEGER, VARCHAR, PRIMARY KEY
  • データベース製品間の互換性は難しい。データ型の名前やサポートしているものの違い
  • 標準化にこだわるよりパフォーマンスを重視すべし。無理にしてCHAR型にしてバイトを増やすとかどうなの
  • 列の定義変更やインデックスの追加削除などは後から困難なので最初にしっかり設計すること
  • SELECTは負荷をかけない効率的な条件をうまく使うこと。全文検索などデータベースが重くなる原因になる。
  • WHEREがないUPDATEは全スキャンが走るので注意
  • TRUNCATEを使えばレコードを0にできる。定義情報は残す
  • DROP TABLEで定義情報を消す
  • 3個のSELECT分を打つよりもAND条件を使って1文で書いた方がよい。いわゆるジョインDB側で効率のよいアクセスをしてくれる
  • シャーディング(テーブルを複数のサーバに分割)しているとサーバ跨いだジョインができないのでアプリケーション側と設計をすりあわせる必要あり
  • データリンク機能とか持っているDBもある
  • EXPLAINを使うとクエリを流す前に効率性を検証できる
  • とくにrowsに注目し、各テーブルで1が出ていればインデックスを用いた効率の良いアクセスとなる
  • ビジネスロジックはストアプロシージャーで実装する。が、最近はやらない。昔はクエリをまとめたりで活躍。純粋にメールを送出するなのどのロジックはもはやアプリケーションでいいでしょという発想

トランザクション、整合性、耐障害性

  • 一つのSQL分で一つのユーザ処理が終わることはほんとんどない
  • 商品を買うだけでもitem / user_item / user / purchase_histrory
  • コミットとロールバック
  • 一つのSQL文の場合でも同様にコミットをしておくと、長い処理の途中で止まった時にロールバックができる
  • REDOログ。クラッシュリカバリ。MyISAMはない(?)
  • REDOはシーケンシャルライトだから負担が少ない
  • NoSQLはトランザクションの概念をほぼ持っていない。アプリケーションロジックで対応しないといけない。
  • ロックして排他制御
  • InnoDBはレコード単位でロック。MyISAMはテーブル単位
  • スレーブはレプリケーションをどこまで実行したかslave_relay_log_infoに記述する

レプリケーション

  • 片方向/非同期の話
  • バイナリログの受信(I/Oスレッド)と実行(SQLスレッド)
  • どちらの遅延なのかで障碍時のインパクトは違う
  • 片方向/準同期の話
  • 受信を同期にする
  • 片方向で言えることはスレーブが単一スレッドになる
  • 双方向レプリケーション
  • クラスタ、バックアップとポイントインタイムリカバリの話

ストレージ技術の変革とデータベースへの影響

  • スペックがあがると同時に1台の処理要求があがる。1coreでの処理負担も増える
  • バッチとかレプリケーションの負担があがる
  • SATA SSD -> PCI Express SSD
  • クリティカルセクション(1スレッドアクセスになるよう排他制御する処理区間)の改善
  • MySQL5.1以降でI/Oの並列性が大幅に向上
  • MySQLO5.5以降でパージ処理(物理的に削除する処理)とチェックポイントなどのバックグラウンド処理を並列化して処理できるように
  • レプリケーションの処理はこれから
  • Tx/Rx Multi QueueがRed Hat EnterpriseLinux6以降で実装

データベース運用の勘所

  • CPU使用率
  • ディスクI/O(%iowait)
  • システム空間での使用率(%system)
  • ユーザ空間での使用率(%user)

ストール

  • 1秒間隔のSQLコマンド実行数の監視が必要
  • その1秒のために増強するのはスペック的に厳しい
  • gdbなどのデバッガを用いてプロセスのスタックトレースをとる
  • 例として新規接続のスレッド生成のためのcloneに時間がかかってるなら、接続を貼りっぱなしにすればいい

MySQL 導入のポイント

ストレージエンジン

  • クライアントからの接続を受け付けて専用のスレッドを割り当て
  • キャッシュにヒットすればクエリキャッシュから返す
  • キャッシュにヒットしない場合は構文解析(パース)処理をする
  • SQL文の実行計画、インデックスの利用可否、ジョインの際にどのテーブルを使うか
  • ストレージエンジンはテーブル単位で選択できる
  • ACID特性
  • Atomicity(全部コミットされるかロールバックされるか)
  • Consistency(複数テーブルにまたがっている場合でもエラーで片側が更新されることはない)
  • Isolation(参照・更新が競合した場合でも矛盾した状態にならないように排他制御が可能)
  • Durability(コミットした結果は確実に保存され電源断が起きても復旧が可能)
  • テーブル.frmにメタ情報が格納される。5.1からは日本語名も。
  • エラーログ、スロークエリログ、バイナリログ
  • log-bin, slow-query-log, long-query-log
  • max_connection
  • innodb_buffer_file_size
  • innodb_flush_method, O_DIRECT
  • innodb_data_file_path, auto extend

バックアップとリカバリ

  • コールドバックアップ、オンランバックアップ
  • データベースファイル、バイナリファイル、設定ファイル
  • 論理バックアップと物理バックアップ
  • 論理バックアップはSQL文形式で人間が読める状態でバックアップされる。mysqldumpを使用
  • MyISAMInnoDBに変換することも可能
  • 論理バックアップは時間がかかるがデータサイズも少なく圧縮効率が非常によい。
  • 物理バックアップはディスク側の機能を使うのがよい
  • リカバリはバックアップ+バイナリログ

コールドバックアップ

$ mysqladmin shutdown -uroot
$ cp -rp /var/lib/mysql /backup/
$ mysafe_safe&

バイナリログによるリカバリ

$ mysqlbinlog hostname.000011 > recover.sql
$ mysql -uroot < recover.sql
  • ステートメントベースと行ベースがある
  • ステートメントベースだとSQL文そのままなのでランダムな数値が入るようなUUID()などの関数が入っている場合に値がおかしくなる
  • 5.1以降は行ベースが可能になっている
  • mysqldump -uroot —lock-all-tables —master-data=2 > dump.sql
  • dump.sqlの中にバイナリファイルのどこまで書き込まれているか記載するようにオプションで指定
  • InnoDBの場合、全体のスナップショットを取る時だけロックしてバックアップする方法がとれる(--single-transaction)
  • FLUSH TABLE WITH READ LOCKが走るので重いクエリで待ち時間が発生しないように注意する
  • 不要なバイナリログはPUARGE MASTER LOGS TO ‘hostname.000042'
  • 物理バックアップの場合はテーブルロックしてsyncコマンドでディスクに書き出してロック解除する

データベース技術の現在と未来

  • レンジパーティションイング
  • テーブルやインデックスを物理的に1個でまとめて管理する
  • 特定のパーティションに入れて連続的にメモリに乗せる
  • twitterのようなサービスでは1週間や1ヶ月分単位でパーティンションを切る
  • TokuDBではFractal Treeというインデックスを持っていてレンジパーティションイング不要で性能を維持できる

その他

  • DELETE後はOPTIMIZE TABLEで再編成
  • できなかったとしてINSERTの時の再利用を考えてDELTEは推奨
  • DELETE時のスレーブ遅延を防ぐには、スレーブ側に対象をSELECTしておくとよい
  • MySQL5.5以降で「change buffering」が実装。DELETE時のインデックス論理削除はバックグラウンドで。
  • 秒間のupdate回数はCom_update, 内部レコードの更新回数はInnodb_rows_updated
  • スレーブがどれくらい書き込めるかは、一度レプリを止めて再開して秒間の更新を見る
  • Thread_runningで並列度が取れる。SHOW GLOBAL_STATUSクエリを実行している分もカウントされている
  • マスタの場合、BINLOG_DUMPもカウントされている
  • Event Schedulerを使用している場合はカウントされている
  • vmstat/sarではMySQLが待ち状態のストールになっていても加算されない
  • スロークエリログ、SHOW FULL PROCESSLIST
  • tcpdumpやすべてのクエリをスローログに出してmk-query-degitで解析する
  • SET GLOBAL long_query_time=0
  • 1+N型はINを使って1+1型へ
  • クエリは軽いがトランザクションのロック時間が長いものをどう見つけるか
  • SHOW ENGINE INNODB STATUSを見れば長く待たされているトランザクションが、長く実行されているトランザクションがわかる
  • MySlowTranCaptureを使えば楽にトランザクションと該当クエリの特定が可能
  • innnodb_lock_wait_timeoutはデフォルト50秒。長い。
  • コネクションプーリングで外部とのTCP/IP接続は済ませておくこと
  • サーバをまたいだデッドロックには注意。innodbは同一サーバ内の自動検出
  • ユーザA->ユーザBの順に昇順にロックを統一するなど

シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

Webエンジニアのための データベース技術[実践]入門 (Software Design plus)

Webエンジニアのための データベース技術[実践]入門 (Software Design plus)

GCPUG Tokyo February 2016に参加してきた

GCPUG Tokyo February 2016

2016/02/12(金) 19:00 〜 22:00

殴り書きなので記載ミスがあったらすいません。。

Compute Engine リソース概要

  • Local SSD
  • I/O重視したい人向け
  • snapshotは取れない
  • live migration対応した?(レプリカ作ったりするのは自分で?)

  • custom script

  • start / shutdown
  • shutdownは待ってくれないので注意。ベストエフォート

  • Network Load Balancer

  • TCP/IP Lv LoadBalancing
  • Regionに所属する
  • Forwarding Rule(region)
  • Target Pool(instance / instance group)
  • Backup poolできる。ただしホットスタンバイ
  • セッションアフィニティ対応

  • HTTP/HTTPS Load Balancer

  • Global
  • GCPのアンドロメダ上にいる(?)
  • Forwarding Rule -> Target Policy -> URL Map(URLごとの向き先制御) -> Backend Service(instance group)
  • muliti region対応

  • instance group

  • instance template
  • auto scaler or manual
  • zone base

  • unmanaged instance group

  • templateではなく任意のinstanceを任意で追加する
  • zone base

  • metadata

  • key value
  • instance wide
  • project wide
  • projectはまたげない

HTTPロードバランサの運用例

  • マナボでandroid技術者
  • AWSからコスト面うんぬんで乗り換えた
  • Network Loadbalancer

    • SSL Terminationはない
    • 単一リージョンのみ
    • NAT配下だとソースIPわからない
    • スマホなどグローバルIPがころころかわると困る
  • HTTP(S) Load Balancer

  • GAになった
  • SSL Terminationできる
  • リージョンまたげる
  • proxinityのLB
  • One Global IP(DNSベースのラウンドロビンではない)

  • アドベントカレンダーAWSユーザが15分でGCP入門を書いた

  • 作ってみる

  • ファイアウォールルール
  • tag
  • 複数リージョンで作成
  • ヘルスチェックも作成
  • 外部IPアドレス確保(typeはグローバルにしましょう)
  • グローバル転送ルールは80/443で二つ作成
  • バックエンドサービス
  • 分散モード (CPU使用率/リクエスト数)で閾値を決めることが可能
  • バックエンドは複数追加しないとFailoverしない

  • Tips

  • ファイアウォールをよりセキュアに
  • LBからの通信のみ許可した方がいいよね
  • そもそもインスタンスのexternal IPを取りましょう
  • メンテナンスの時はiptablesで止めるとかも

  • auto scale

  • インスタンステンプレートを作るのが面倒
  • スナップショットが楽
  • スナップショット作ったらそれを元にしてインスタンステンプレートを作る

GCE構築例

  • Glanysの代表の人
  • MSP事業、システム設計・構築。運用保守
  • Googleのテクニカルパートナー
  • インフラエンジニア
  • GCE初期から触ってます

  • 2年前ソーシャルゲームで画面タッチアクションゲーム

  • web socket
  • 当時mariaDB。最近はperconaつかってます
  • 当時HA proxyでやってた
  • consulというクラスタしながら監視してapiでその状態を拾えるやつを使ってた
  • 健全なweb serverを

  • 事例

  • ハグカムのGLOBAL CROWN(英会話のWEBレッスン)
  • webRTCを利用したリアルタイム動画対話型システム
  • バックエンドはHA Proxyでハンドリング

  • ピアラのresult master

  • perconaを使う予定
  • 絶賛設計中

  • capy 法人向け不正ログイン対策

  • caputureが最近はOCRで解析される
  • パズルを当てるような仕様に
  • 12月くらいすごい拡大
  • 300万クエリをperconaが受けてる
  • rabbitmq
  • cloudstorageの使い方が特殊
  • Elastic Search 8GB〜150GB。様々なレイヤーのエラーログをkibanaで。auto scaleはしていない。

  • ゲーム系

  • photon?ゲームエンジン
  • metadata活用している
  • ゲームサーバ起動時にmetadataからconfigにglobal ipを拾っている

  • teraform大好き

  • Base image

  • baseはcentos
  • 必要ミドルウェアは/usr/local配下にビルド
  • ソースはtarballとともに保管

  • consul

  • cluster情報
  • 監視

  • serf

  • 将来的に廃止

  • terraform

  • instance生成
  • disk attach
  • firewall設定
  • LB設定

  • rerun

  • bashのcommand line framewark
  • チームでコマンド体系化が行えて便利

  • envutils

  • 環境変数コントロール

  • clutils

  • consul/serfの自動設定

  • clctl

  • perlオーケストレーションツール

  • influxdb / grafana

  • 時系列データベース

  • gmonitor

  • influxdbに直接データを書き込める
  • リソース監視、通信、ミドルウェアのステータス取得

  • strecherのGCS版

  • GCSを利用した大規模向けデプロイツール
  • AWS界隈ならS3で情報ひっかかるかも

  • slack / pagerduty / twilio / bitbucket ...etc

GAE + GCEの運用事例

  • Google Developer Expert Apps Script
  • フルスタックエンジニアやってます
  • kabukuで働いている
  • rinkak(GCE)
  • 3Dプリントプロダクトのマーケットプレイス
  • rinkak MMS(App engine / GCE)
  • 工場側に導入して決済やったり見積もりしたり
  • rinkak backend(GCE / EC2)

  • サーバサイド

  • python(FLASK)
  • クライアント再度
  • angularJS
  • Cofee Script
  • Bootstrap

  • GCE側にデータ持っていない

  • datastoreに直接アクセスしない(Appengineを必ず通す)
  • Front serverにアクセスしたユーザからAjaxで直接アクセス

  • なぜGAE + GCE??

  • 独自ドメインで運用したい場合がある
  • GAEだとGAE独自ドメイン + SSL
  • Google Apps for workの契約が必要

  • GCEでやるしかない

  • GCEの構成を深堀り

  • L4LB
  • websocketを使う可能性があるから
  • 開始当時はHTTP LBのSSLがα版だった
  • ターゲットプールでブルーグリーン
  • マルチAZ
  • webサーバはnginx
  • appサーバはflask + usgi
  • instanceテンプレートは更新負荷
  • startup-scriptはmetadataサーバに直接書かないことをおすすめ(instance templateに書き込むと・・・)

  • nginx

  • 静的配信、SSL解き、ルーティング
  • GAEの -dot-バジージョン番号でアクセス

  • app(docker)

  • バージョンごとにDocker Imageがいる
  • バージョン番号はpackage.json+ブランチ名

  • Docker Image

  • BitbucketにコードをプッシュするとJenkinsが自動Build
  • GCRにバージョン番号付きでpush

  • wacher

  • metadataサーバにwait-for-changeリクエストを使って監視
  • metadataサーバに入っているバージョン番号を見てDocker imageをrun

  • Google Cloud Storage

    • GAEで権限チェックとSigned URL化
  • Cloud logging

  • 基本はjson形式で
  • PubSubにも入れている

  • 今後とまとめ

  • 多くのweb Frontはパターン化されている
  • GASよく落ちる
  • AWSクラウドデザパタは読むべし

GCEをTerraformする

  • Terraformってなに?
  • vagrantの会社が2014/7から
  • Cloud Formationみたいなもの

  • リソースの数だけIaaSを操作できる。

  • googleも35個ある
  • ドライランある
  • 冪等性とドライラン弱い

Google Compute Engine入門 (アスキー書籍)

Google Compute Engine入門 (アスキー書籍)

Amazon Web Services クラウドデザインパターン実装ガイド 改訂版

Amazon Web Services クラウドデザインパターン実装ガイド 改訂版


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

KVM徹底入門 Linuxカーネル仮想化基盤構築ガイド

KVM徹底入門 Linuxカーネル仮想化基盤構築ガイド

KVM -- Virtualisierung unter Linux. (German Edition)

KVM -- Virtualisierung unter Linux. (German Edition)

KVMで仮想マシンをクローンをする方法

f:id:komeiy:20150107164847j:plain

検証環境で何台かマシンが必要な時など使えないと不便ですよね。KVMでも簡単にcloneできます。 結構忘れて毎回調べるのでメモしておきます。

KVMで仮装マシンをクローンする方法

以下、centos7_2からcentos7_4を作成する手順です。

事前準備

クローン元の仮想マシンをshutdownしておいてください。

[root@hostserver ~]# virsh list --all
 Id    名前                         状態
----------------------------------------------------
 -     centos7                        シャットオフ

virt-cloneの使い方

virt-cloneを使用します。仮装ディスクはあらかじめ作成しておく必要ありません。

[root@hostserver ~]# virt-clone --original centos7 --name centos7_2 --file /var/lib/libvirt/images/testvm2.img --check path_exists=off
割り当て中 'testvm2.img'                                                                                                       | 5.0 GB  00:00:00

'centos7_2'のクローニングに成功しました。

centos7_2ができています。

[root@hostserver ~]# virsh list --all
 Id    名前                         状態
----------------------------------------------------
 -     centos7                        シャットオフ
 -     centos7_2                      シャットオフ

virt-clone後にopening backend "socket" failedが出た場合

virt-clone後に仮想マシンの起動すると以下の通り失敗してしまいます。 その場合はvirus editでchannelの設定を修正します。

[root@hostserver ~]# virsh start centos7_2
エラー: ドメイン centos7_2 の起動に失敗しました
エラー: 内部エラー: モニターに接続中にプロセスが終了しました: 2016-01-16T10:33:21.477810Z qemu-kvm: -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-centos7/org.qemu.guest_agent.0,server,nowait: Failed to bind socket: No such file or directory
2016-01-16T10:33:21.477952Z qemu-kvm: -chardev socket,id=charchannel0,path=/var/lib/libvirt/qemu/channel/target/domain-centos7/org.qemu.guest_agent.0,server,nowait: chardev: opening backend "socket" failed
[root@hostserver ~]# virsh edit centos7
ドメイン centos7 XML の設定は編集されました


    <channel type='unix'>
      <source mode='bind' path='/var/lib/libvirt/qemu/channel/target/domain-centos7_2/org.qemu.guest_agent.0'/>
      <target type='virtio' name='org.qemu.guest_agent.0'/>
      <address type='virtio-serial' controller='0' bus='0' port='1'/>
    </channel>

[root@hostserver ~]# virsh start centos7
ドメイン centos7 が起動されました

シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

KVM徹底入門 Linuxカーネル仮想化基盤構築ガイド

KVM徹底入門 Linuxカーネル仮想化基盤構築ガイド

KVM -- Virtualisierung unter Linux. (German Edition)

KVM -- Virtualisierung unter Linux. (German Edition)

Apache2.2.xと2.4.xでのアクセス制限方法の違い

f:id:komeiy:20141223135843j:plain

勉強のためZabbix3.0を入れたのですが、 Apache 2.4.xを使ったところアクセス制限の書き方が変わっていたのでメモしておきます。

2.2.xの時のエントリです。

komeiy.hatenablog.com

Apache 2.4.6で試してみた

以下、試した時のバージョンです。

[root@localhost conf.d]# httpd -v
Server version: Apache/2.4.6 (CentOS)

2.4.6だとこんな感じで書きます。

[root@localhost conf.d]# cat zabbix.conf
#
# Zabbix monitoring system php web frontend
#

#Alias /zabbix /usr/share/zabbix
Alias /zabbix /var/www/html/zabbix

<Directory "/var/www/html/zabbix">
    Options FollowSymLinks
    AllowOverride None
    Require all granted
    php_value max_execution_time 300
    php_value memory_limit 128M
    php_value post_max_size 16M
    php_value upload_max_filesize 2M
    php_value max_input_time 300
    # php_value date.timezone Europe/Riga
</Directory>

Apache2.2.xと2.4.xでの書き方の違い

全てアクセス許可

  • Apache2.2.x Allow from all

  • Apache2.4.x Require all granted

全てアクセス拒否

  • Apache2.2.x deny from all

  • Apache2.4.x Require all denied

特定の接続元を指定する

  • Apache2.2.x allow from deny from

  • Apache2.4.x require ip require not ip

エラーログ

間違えたら/var/log/zabbix/zabbix_server.logに出力が出ると思いますので確認してください。

[Sat Nov 14 23:28:06.550481 2015] [authz_core:error] [pid 15736] [client 192.168.1.100:59410] AH01630: client denied by server configuration: /usr/share/zabbix
[Sat Nov 14 23:52:48.367884 2015] [core:error] [pid 12992] (13)Permission denied: [client 192.168.1.100:53259] AH00035: access to /zabbix/index.php denied (filesystem path '/var/www/html/zabbix/index.php') because search permissions are missing on a component of the path

シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

サーバ構築の実際がわかる Apache[実践]運用/管理 (Software Design plus)

RedshiftへSQLWorkbench/Jで接続してみる

redshiftへSQLWorkbench/Jで接続する方法です。

手順は以下の通りです。ポイントは 接続方法に合わせてDriverを選択するという点です。 2015年11月8日時点でpostgresqlの接続もサポートされているようです。

  • SQLWorkbench/Jをインストール
  • Redshift用のDriverをインストール
  • JDBCのURLを確認する
  • 各種パラメータを設定し接続

SQLWorkbench/Jをインストール

公式HPのDownloadsから使用するOSに合わせてStable releaseからダウンロードしインストールします。 MAC OSXの場合、通常のアプリケーションと大差はないので割愛します。

http://www.sql-workbench.net

Redshift用のDriverをインストール

今回はpostgresqlでははなくJDBCで接続します。Driverはこの記事を記載した時点で以下の通りです。

JDBC 4.1 互換ドライバ: https://s3.amazonaws.com/redshift-downloads/drivers/RedshiftJDBC41-1.1.7.1007.jar このドライバーのクラス名は com.amazon.redshift.jdbc41.Driver です。

SQLWorkbench/Jの左下のManage Driverから上記のDriverをimportします。class名はcom.amazon.redshift.jdbc41.Driverです。

RedshiftのJDBC URLを確認

Amazon Management Consoleで以下から確認します。

Clusters- > YourClusterName -> Configuration -> Cluster Database Properties -> JDBC URL

http://docs.aws.amazon.com/ja_jp/redshift/latest/mgmt/images/rs-mgmt-clusters-cluster-database-properties-jdbc.png

RedshiftへSQLWorkbench/Jを使用して接続

先ほどimportしたRedshift用のDriverとJDBC URL、Master Username/Passwordを設定します。

f:id:komeiy:20151104131604p:plain

接続が問題なければ以下の通りクエリを投げることが可能です。

f:id:komeiy:20151104131842p:plain

実際にクエリを投げてみるのは各自データ内容に合わせてお好みで。 勉強用だと無料枠を超えてしまうのが痛いですね。


シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

データベース徹底攻略 (WEB+DB PRESS plus)

データベース徹底攻略 (WEB+DB PRESS plus)

データ分析が支えるスマホゲーム開発 ~ユーザー動向から見えてくるアプリケーションの姿~

データ分析が支えるスマホゲーム開発 ~ユーザー動向から見えてくるアプリケーションの姿~

tail -fの結果にタイムスタンプをつける方法のメモ

f:id:komeiy:20150107164847j:plain

メモです。アプリからログに書き込まれたタイミングを確認するなど、出力にタイムスタンプをつけたい時などに使います。

tail -f error.log | while read line; do printf "$(date -u '+%F %T%z')\t$line\n"; done

出力は以下のような感じです。

2015-11-06 23:14:38+0000 Nov  6 23:14:12 komei login[3783]: USER_PROCESS: 3783 ttys000

シェアして頂けると嬉しいです。
参考になったという方がいれば是非お願いしますm(_ _ )m
モチベーション維持の観点で非常に励みになります。

このエントリーをはてなブックマークに追加

新しいLinuxの教科書

新しいLinuxの教科書

Linuxシステム[実践]入門 (Software Design plus)

Linuxシステム[実践]入門 (Software Design plus)