かべぎわブログ

ブログです

2019年ふりかえり

2019年をふりかえる。

仕事

2社ほどでお仕事した。
2020年からはまた新しいところでお仕事する。
期待を裏切ったり裏切られたりいろいろあった。
もっとうまくやれた場面はあったとおもう。

私生活

お酒をのんで駅のホームでしらないおじさんに怒鳴られたり、前歯が欠けたり、公園で目を覚ましたり、スマホを落とすなどした。
まだなんとか生きています。
いまもシャンパンを飲みながらこの日記をかいている。

買ってよかったもの

Dyson v11

バッテリー残量が液晶モニタ的なものに表示されるのでよい。

Kindle Oasis

画面が黄色っぽくなるだけなんだけどそれがハイパーよい。
ほぼ紙

Youtube Premium

広告がでないのはやっぱりよい。
Google Play Musicもついているし。
Youtube Musicはつかっていない。

みた映画

新作旧作問わず順不同
ぜんぜんみれていない

  • ファウンダー ハンバーガー帝国のヒミツ
  • ムーンライト
  • グレイテストショーマン
  • ハードコア
  • FYRE: 夢に終わった史上最高のパーティー
  • パシフィック・リム/アップライジング
  • 新感染/ファイナル・エクスプレス
  • マルホランド・ドライブ
  • バスターのバラード
  • スイス・アーミー・マン
  • マイティ・ソー バトルロイヤル
  • ブラックパンサー
  • グエムル -漢江の怪物-
  • GODZILLA 怪獣惑星: パート1: 怪獣惑星
  • GODZILLA 決戦機動増殖都市
  • GODZILLA 星を喰う者
  • ハクソー・リッジ
  • ミスティック・リバー
  • ハイ・フライング・バード -目指せバスケの頂点-
  • ポーラー 狙われた暗殺者
  • ザ・テキサス・レンジャーズ
  • スパイダーマン: ホームカミング
  • カサブランカ
  • メッセージ
  • ボディガード
  • マーガレット・サッチャー 鉄の女の涙
  • ジャスティス・リーグ
  • アメリカン・サイコ
  • MEG ザ・モンスター
  • レボリューション -米国議会に挑んだ女性たち-
  • クレイジー・リッチ!
  • her/世界でひとつの彼女
  • ナイスガイズ!
  • カジノ・ハウス
  • 二郎は鮨の夢を見る
  • The Dawn Wall/ドーンウォール
  • ザ・ダート: モトリー・クルー自伝
  • マンチェスター・バイ・ザ・シー
  • アリー/スター誕生
  • 運び屋
  • アイリッシュマン
  • アクアマン
  • 遊☆戯☆王THE DARK SIDE OF DIMENSIONS
  • ガンジー
  • 交響詩篇エウレカセブン ハイエボリューション 1
  • ANEMONE/交響詩篇エウレカセブン ハイエボリューション
  • コードギアス 復活のルルーシュ
  • クリード 炎の宿敵
  • ゼイリブ
  • メカニック:ワールドミッション
  • シェイプ・オブ・ウォーター
  • ハン・ソロ/スター・ウォーズ・ストーリー
  • リメンバー・ミー
  • 探偵はBARにいる3
  • ローリング・サンダー・レヴュー: マーティン・スコセッシが描くボブ・ディラン伝説
  • プーと大人になった僕
  • アベンジャーズ/エンドゲーム
  • 名探偵ピカチュウ
  • ミュウツーの逆襲 EVOLUTION
  • ワンス・アポン・ア・タイム・イン・ハリウッド
  • ジョン・ウィック:パラベラム
  • ジョーカー
  • スター・ウォーズ/スカイウォーカーの夜明け

見たドラマとか連続もの系

ドキュメンタリーおおめ

  • アメリカン・クライム・ストーリー/ヴェルサーチ暗殺
  • 潜入! 世界の危険な刑務所 :シーズン3
  • 世界の現実旅行
  • ラブ,デス&ロボット
  • You vs. Wild -究極のサバイバル術-
  • Formula 1: 栄光のグランプリ
  • ルーザーズ: 失敗が教えてくれること
  • OUR PLANET 私たちの地球
  • 汚れた真実 :シーズン1
  • 全裸監督
  • Dope/ドープ :シーズン1~3
  • こころをダイジェスト
  • 世界の今をダイジェスト :シーズン2
  • 天才の頭の中: ビル・ゲイツを解読する
  • 伝説の映画監督 -ハリウッドと第二次世界大戦-
  • ファイナル・テーブル
  • ブラック・ミラー :シーズン5
  • ミート・イーター 猟理の達人
  • ボクらを作ったオモチャたち :シーズン3
  • サウスパーク :シーズン20~21
  • シリコンバレー :シーズン5
  • オール・オア・ナッシング ~マンチェスター・シティの進化
  • 有田と週刊プロレスと :シーズン4
  • ウィッチャー

読んだ本

  • The DevOps 逆転だ!究極の継続的デリバリー
  • the four GAFA 四騎士が創り変えた世界
  • AI vs. 教科書が読めない子どもたち
  • フェルマーの最終定理
  • ジェフ・ベゾス 果てなき野望
  • バッタを倒しにアフリカへ
  • 三体
  • 岩田さん: 岩田聡はこんなことを話していた。
  • うつ病九段 プロ棋士が将棋を失くした一年間
  • サピエンス全史
  • 実践Terraform AWSにおけるシステム設計とベストプラクティス
  • 料理の科学 加工・加熱・調味・保存の化学変化
  • ACTFULNESS(ファクトフルネス)10の思い込みを乗り越え、データを基に世界を正しく見る習慣
  • 科学者はなぜ神を信じるのか コペルニクスからホーキングまで
  • Yコンビネーター
  • IT技術者の長寿と健康のために
  • ピープルウエア
  • おうちで学べるアルゴリズムのきほん
  • おうちで学べる仮想化のきほん
  • おうちで学べるサーバのきほん
  • チューリングの計算理論入門 チューリング・マシンからコンピュータへ
  • スティーブ・ジョブズ
  • 暗号が通貨になる「ビットコイン」のからくり
  • オブジェクト指向でなぜつくるのか
  • 人工知能は人間を超えるか
  • 私の財産告白
  • コンピュータはなぜ動くのか 知っておきたいハードウエア&ソフトウエアの基礎知識
  • 言い訳 関東芸人はなぜM1で勝てないのか
  • 量子コンピュータ 超並列計算のからくり
  • コンテナ物語
  • Pythonによるクローラー&スクレイピング入門
  • Kubernetes完全ガイド
  • 暗号解読

やったゲーム

  • RimWorld
  • Farming Simulator 19
  • Farmer's Dynasty
  • Cities: Skylines
  • Dawn of Man
  • the Hunter Call of the Wild
  • Kenshi
  • Euro Truck Simulator 2
  • Green Hell
  • Monster Hunter: World
  • VA-11 HALL-A
  • Downwell
  • Slay the Spire
  • Cuphead
  • One Finger Death Punch 2
  • Sekiro: Shadows Die Twice
  • Planet Coaster
  • Celeste
  • Katana ZERO
  • Papers, Please
  • NieR:Automata Game of the YoRHa Edition
  • When Ski Lifts Go Wrong
  • Super Hexagon
  • Grand Theft Auto V
  • Moonlighter
  • Reigns
  • Thronebreaker: The Witcher Tales
  • Crypt of the NecroDancer
  • クリプト・オブ・ネクロダンサー feat. ゼルダの伝説
  • OneShot
  • Fit Boxing
  • ポケットモンスター シールド
  • Tetris99
  • Over Cooked 2
  • Human Fall Flat

来年の抱負

いきのびます。

2020(字幕版)

2020(字幕版)

  • 発売日: 2019/07/01
  • メディア: Prime Video

別のstateファイルの値を参照する

概要

リモートステートをつかって別のstateファイルの値を参照して見たいと思います。
これによって stateをまたいでいろいろできたりするのでstateの分離等もしやすくなるかもしれないしならないかもしれない。

EC2インスタンスを作成するstateと、それにEIPをアタッチするstateが別なんだけれどもアタッチができるよっていうのをやります。

前提

前提です。

バージョン

Terraformのバージョン等はこんなかんじ。

$ terraform --version
Terraform v0.12.18
+ provider.aws v2.43.0

EC2インスタンスをつくるstateのtfファイル

ひとつめのstateです。

provider "aws" {
  region = "ap-northeast-1"
}
terraform {
  backend "s3" {
    bucket = "mybucket"
    key    = "terraform.tfstate"
    region = "ap-northeast-1"
  }
}
resource "aws_instance" "example" {
  ami           = "ami-068a6cefc24c301d2"
  instance_type = "t3.micro"
  subnet_id     = aws_subnet.subnet.id
}
resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "subnet" {
  cidr_block = "10.0.1.0/24"
  vpc_id     = aws_vpc.main.id
}
resource "aws_internet_gateway" "igw" {
  vpc_id = aws_vpc.main.id
}
output "instance_id" {
  value = aws_instance.example.id
}

EIPをアタッチするstateのtfファイル

2つめです。

provider "aws" {
  region = "ap-northeast-1"
}
data "terraform_remote_state" "remote_state" {
  backend = "s3"
  config = {
    bucket = "mybucket"
    key    = "terraform.tfstate"
    region = "ap-northeast-1"
  }
}
resource "aws_eip" "eip" {
  instance = data.terraform_remote_state.remote_state.outputs.instance_id
}

うごかしてみる

うごかしてみます

EC2インスタンスをつくるstateのtfファイル

こんなかんじになります。
参照される値はoutputで出力する必要があります。

$ terraform apply
~~~省略~~~
Apply complete! Resources: 1 added, 0 changed, 1 destroyed.

Outputs:

instance_id = i-02814f190bddac514

EIPをアタッチするstateのtfファイル

EIPがアタッチされていることがわかりますね

$ terraform apply
data.terraform_remote_state.remote_state: Refreshing state...
aws_eip.eip: Refreshing state... [id=eipalloc-08169d0c5eaa117f4]

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
-/+ destroy and then create replacement

Terraform will perform the following actions:

  # aws_eip.eip is tainted, so must be replaced
-/+ resource "aws_eip" "eip" {
      + allocation_id     = (known after apply)
      + association_id    = (known after apply)
      ~ domain            = "vpc" -> (known after apply)
      ~ id                = "eipalloc-08169d0c5eaa117f4" -> (known after apply)
      + instance          = "i-02814f190bddac514"
      + network_interface = (known after apply)
      + private_dns       = (known after apply)
      + private_ip        = (known after apply)
      ~ public_dns        = "ec2-3-114-205-18.ap-northeast-1.compute.amazonaws.com" -> (known after apply)
      ~ public_ip         = "3.114.205.18" -> (known after apply)
      ~ public_ipv4_pool  = "amazon" -> (known after apply)
      - tags              = {} -> null
      ~ vpc               = true -> (known after apply)
    }

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

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

aws_eip.eip: Destroying... [id=eipalloc-08169d0c5eaa117f4]
aws_eip.eip: Destruction complete after 1s
aws_eip.eip: Creating...
aws_eip.eip: Creation complete after 1s [id=eipalloc-0bd8be7d66afa0c58]

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

おわりに

べんりですね

Terraform: Up and Running: Writing Infrastructure as Code

Terraform: Up and Running: Writing Infrastructure as Code

  • 作者:Yevgeniy Brikman
  • 出版社/メーカー: O'Reilly Media
  • 発売日: 2017/04/04
  • メディア: ペーパーバック

tfstateファイルをS3バケットで管理する

概要

TerraformのtfstateファイルをS3バケットで管理してみます。
仕事でチームでやるときはだいたいこの設定でやると思う。

こんなかんじ

こんなかんじで設定してあげます。

terraform {
  backend "s3" {
    bucket = "mybucket"
    key = "terraform.tfstate"
    region = "ap-northeast-1"
  }
}

terraform initするだけでtfstateファイルがS3バケットに格納されるようになります。

おわりに

tfstateファイルはGitで管理するよりこっちのほうが良いと思う。
pushとかpullしわすれたときの被害がでかいと思う。
その点、これは自動でやってくれるのでべんり。

Beanstalkで作成されたバケットができないときの対処法

概要

Elastic Beanstalkで作成されたS3バケットを削除しようとしたときに以下のようなエラーがでた。

botocore.exceptions.ClientError: An error occurred (AccessDenied) when calling the DeleteBucket operation: Access Denied

権限は足りてるはずなのにおかしいなあと思ってすこしハマったのでメモ

原因

バケットポリシーに以下にようなポリシーが設定してあるため。
DeleteBucketをDenyしている。

{
    "Sid": "eb-58950a8c-feb6-11e2-89e0-0800277d041b",
    "Effect": "Deny",
    "Principal": {
        "AWS": "*"
    },
    "Action": "s3:DeleteBucket",
    "Resource": "arn:aws:s3:::elasticbeanstalk-ap-northeast-1-961262193080"
}

対処法

単純にバケットポリシーを削除してしまえばいい。

おわりに

意外とハマった

Amazon Web Servicesインフラサービス活用大全 システム構築/自動化、データストア、高信頼化 (impress top gear)

Amazon Web Servicesインフラサービス活用大全 システム構築/自動化、データストア、高信頼化 (impress top gear)

  • 作者:Michael Wittig,Andreas Wittig
  • 出版社/メーカー: インプレス
  • 発売日: 2019/09/05
  • メディア: 単行本(ソフトカバー)

TerraformでS3バケットを作成する(ランダムな数値列をサフィックスにして)

概要

Terraformでランダムな数値列をサフィックスにして、バケットの名前がかぶらないようにしつつ、バケットを作成してみます。

前提

terraformのバージョン等はこんなかんじ。

$ terraform --version
Terraform v0.12.18
+ provider.aws v2.43.0
+ provider.random v2.2.1

こんなかんじ

こんなかんじでできます。
randomプロバイダを利用します。

provider "random" {}

resource "random_integer" "suffix" {
    min = 10000000
    max = 99999999
}

resource "aws_s3_bucket" "bucket" {
    bucket = "kabegiwa-${random_integer.suffix.result}"
}

実行すると

こんなかんじでバケットが作成されます。

$ aws s3 ls
2019-12-28 18:51:25 kabegiwa-18721568

おわりに

べんりですね

Terraform: Up & Running: Writing Infrastructure As Code

Terraform: Up & Running: Writing Infrastructure As Code

  • 作者:Yevgeniy Brikman
  • 出版社/メーカー: Oreilly & Associates Inc
  • 発売日: 2019/10/08
  • メディア: ペーパーバック

Terraformで渡した引数によって処理を変える

概要

Terraformの実行時にわたした引数によって処理を変更し、作成されるリソースを変えてみたいと思います。

こんなかんじ

引数hikisuuがtrueであればサブネットを作成する。 falseであればしない。といったかんじ。
VPCはどちらの場合でも作成される。

variable "hikisuu" {
  type = bool
}

resource "aws_vpc" "main" {
  cidr_block = "10.0.0.0/16"
}

resource "aws_subnet" "subnet" {
  count      = var.hikisuu ? 1 : 0
  vpc_id     = aws_vpc.main.id
  cidr_block = "10.0.1.0/24"
}

実行してみる

こんなかんじになる。

true

$ terraform plan -var "hikisuu=true"
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.


------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_subnet.subnet[0] will be created
  + resource "aws_subnet" "subnet" {
      + arn                             = (known after apply)
      + assign_ipv6_address_on_creation = false
      + availability_zone               = (known after apply)
      + availability_zone_id            = (known after apply)
      + cidr_block                      = "10.0.1.0/24"
      + id                              = (known after apply)
      + ipv6_cidr_block                 = (known after apply)
      + ipv6_cidr_block_association_id  = (known after apply)
      + map_public_ip_on_launch         = false
      + owner_id                        = (known after apply)
      + vpc_id                          = (known after apply)
    }

  # aws_vpc.main will be created
  + resource "aws_vpc" "main" {
      + arn                              = (known after apply)
      + assign_generated_ipv6_cidr_block = false
      + cidr_block                       = "10.0.0.0/16"
      + default_network_acl_id           = (known after apply)
      + default_route_table_id           = (known after apply)
      + default_security_group_id        = (known after apply)
      + dhcp_options_id                  = (known after apply)
      + enable_classiclink               = (known after apply)
      + enable_classiclink_dns_support   = (known after apply)
      + enable_dns_hostnames             = (known after apply)
      + enable_dns_support               = true
      + id                               = (known after apply)
      + instance_tenancy                 = "default"
      + ipv6_association_id              = (known after apply)
      + ipv6_cidr_block                  = (known after apply)
      + main_route_table_id              = (known after apply)
      + owner_id                         = (known after apply)
    }

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

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

false

$ terraform plan -var "hikisuu=false"
Refreshing Terraform state in-memory prior to plan...
The refreshed state will be used to calculate this plan, but will not be
persisted to local or remote state storage.


------------------------------------------------------------------------

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_vpc.main will be created
  + resource "aws_vpc" "main" {
      + arn                              = (known after apply)
      + assign_generated_ipv6_cidr_block = false
      + cidr_block                       = "10.0.0.0/16"
      + default_network_acl_id           = (known after apply)
      + default_route_table_id           = (known after apply)
      + default_security_group_id        = (known after apply)
      + dhcp_options_id                  = (known after apply)
      + enable_classiclink               = (known after apply)
      + enable_classiclink_dns_support   = (known after apply)
      + enable_dns_hostnames             = (known after apply)
      + enable_dns_support               = true
      + id                               = (known after apply)
      + instance_tenancy                 = "default"
      + ipv6_association_id              = (known after apply)
      + ipv6_cidr_block                  = (known after apply)
      + main_route_table_id              = (known after apply)
      + owner_id                         = (known after apply)
    }

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

------------------------------------------------------------------------

Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.

おわりに

ながくなった。

実践Terraform AWSにおけるシステム設計とベストプラクティス (技術の泉シリーズ(NextPublishing))

実践Terraform AWSにおけるシステム設計とベストプラクティス (技術の泉シリーズ(NextPublishing))

  • 作者:野村 友規
  • 出版社/メーカー: インプレスR&D
  • 発売日: 2019/09/20
  • メディア: オンデマンド (ペーパーバック)

TerraformでAWSのアカウント番号を利用する

概要

TerraformでAWSアカウント番号(アカウントID)を取得してみます。

前提

Terraformのバージョンはこんなかんじ。

$ terraform --version
Terraform v0.12.18
+ provider.aws v2.43.0

こんなかんじ

みんなだいすきcaller_identityです。

data "aws_caller_identity" "wawawa_id" {}

output "account_id" {
  value = data.aws_caller_identity.wawawa_id.account_id
}

おわりに

べんりですね。

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

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

  • 作者:前佛 雅人
  • 出版社/メーカー: インプレス
  • 発売日: 2015/10/22
  • メディア: Kindle版

Terraformでアカウントエイリアスを利用する

概要

TerraformでAWSのアカウントエイリアスを利用してみます。

前提

前提はこう

$ terraform --version
Terraform v0.12.18
+ provider.aws v2.43.0

こんなかんじ

data "aws_iam_account_alias" "wawawa" {}

output "account_alias" {
  value = "data.aws_iam_account_alias.wawawa.account_alias"
}

こうなる

こうなります
これだけだとよくわからない感もあるけれど

Outputs:

account_alias = kabegiwa

おわりに

べんりですね

実践Terraform AWSにおけるシステム設計とベストプラクティス (技術の泉シリーズ(NextPublishing))

実践Terraform AWSにおけるシステム設計とベストプラクティス (技術の泉シリーズ(NextPublishing))

  • 作者:野村 友規
  • 出版社/メーカー: インプレスR&D
  • 発売日: 2019/09/20
  • メディア: オンデマンド (ペーパーバック)

Terraformのバージョンを固定する

概要

Terraformのバージョンを固定してみます。

こんなかんじ

こんなかんじで書いてあげるとTerraform v0.12.18以外ではapply等ができなくなります。

terraform {
  required_version = "0.12.18"
}

または以下のようにして動作を確認した最も古いバージョン以上であればOKとする方法もある。

terraform {
  required_version >= "0.12.0"
}

demo

うごかないパターンをやってみる。

$ terraform --version
Terraform v0.12.17
+ provider.aws v2.40.0

こうなる。

$ terraform apply

Error: Unsupported Terraform Core version

  on main.tf line 2, in terraform:
   2:   required_version = "0.12.18"

This configuration does not support Terraform version 0.12.17. To proceed,
either choose another supported Terraform version or update this version
constraint. Version constraints are normally set for good reason, so updating
the constraint may lead to other errors or unexpected behavior.

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

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

  • 作者:前佛 雅人
  • 出版社/メーカー: インプレス
  • 発売日: 2015/10/22
  • メディア: Kindle版

AMIといっしょにスナップショットも削除してくれるPythonをかいた

概要

AMIといっしょにスナップショットも削除してくれるPythonをかいたので見てください。

これです

これです。

github.com

つかいかた

helpです

$ python ./delete_ami_snapshot.py --help
usage: ./delete_ami_snapshot.py [-h] --image_id IMAGE_ID [--profile [PROFILE]]

optional arguments:
  -h, --help           show this help message and exit
  --profile [PROFILE]  Use a specific profile from your credential file.

required arguments:
  --image_id IMAGE_ID  AMI image ID.

おわりに

べんりですね

イシューからはじめよ ― 知的生産の「シンプルな本質」

イシューからはじめよ ― 知的生産の「シンプルな本質」

  • 作者:安宅和人
  • 出版社/メーカー: 英治出版
  • 発売日: 2014/09/01
  • メディア: Kindle版

Terraformで複数ルールのセキュリティグループを作成する

概要

Terraformで複数のルールが記載されたセキュリティグループを作成してみます。

こんなかんじのやつ

$ aws ec2 describe-security-groups --filters Name=group-id,Values=sg-XXXXXX --output text
SECURITYGROUPS  Managed by Terraform    sg-XXXXXX   wawawa_security_group   123456789012    vpc-XXXXXX
IPPERMISSIONS   80  tcp 80
IPRANGES    0.0.0.0/0
IPPERMISSIONS   443 tcp 443
IPRANGES    0.0.0.0/0
IPPERMISSIONSEGRESS -1
IPRANGES    0.0.0.0/0

前提

Terraformのバージョンはこんなかんじ。

 terraform --version
Terraform v0.12.17
+ provider.aws v2.40.0

こんなかんじでつくれます

tfファイルはこんなかんじ

resource "aws_security_group" "wawawa_security_group" {
    name = "wawawa_security_group"

    ingress {
        from_port = 80
        to_port = 80
        protocol = "tcp"
        cidr_blocks = ["0.0.0.0/0"]
    }

    ingress {
        from_port = 443
        to_port = 443
        protocol = "tcp"
        cidr_blocks = ["0.0.0.0/0"]
    }

    egress {
        from_port = 0
        to_port = 0
        protocol = "-1"
        cidr_blocks = ["0.0.0.0/0"]
    }
}

以下にはこんなかんじではつくれず、エラーになるとのことだけれど Terraformのバージョンアップで作成できるようになったのかもしれない。
なんにせよべんりになりましたね。

Terraformで1つのセキュリティグループに複数のルールを設定する - Qiita

おわりに

べんりですね。

Invoke-Expressionでも終了ステータスを取得したい

概要

PowerShellでInvoke-Expressionでも終了ステータス(ExitCode)を取得してみます。

終了ステータスとれない問題

たとえばこんなかんじのPowerShellスクリプトがあったとする。

Write-Host 'wawawa'
exit 2

実行して終了ステータスとると当然Falseになる。

PS > .\wawawa.ps1
wawawa
PS > $?
False

だけどInvoke-Expressionで実行したときは終了ステータスがTrueになってしまう。
これはInvoke-Expressionは正常に成功しているためである。

PS > Invoke-Expression .\wawawa.ps1
wawawa
PS > $?
True

それの解決策

こうするとできる。

PS > $command=".\wawawa.ps1;`$?"
PS > $result=Invoke-Expression $command

PS > $result[-1]
False

おわりに

たいへんですね

PowerShell実践ガイドブック ~クロスプラットフォーム対応の次世代シェルを徹底解説~

PowerShell実践ガイドブック ~クロスプラットフォーム対応の次世代シェルを徹底解説~

  • 作者:吉崎 生
  • 出版社/メーカー: マイナビ出版
  • 発売日: 2018/05/30
  • メディア: 単行本(ソフトカバー)

Terraformで最新版のAmazonLinux2を取得する

概要

Terraformで最新版のAmazonLinux2をつかってEC2インスタンスを作成します。

こんなかんじ

filterでしぼっています。

provider "aws" {
  region = "ap-northeast-1"
}

data "aws_ami" "recent_amazon_linux2" {
    most_recent = true
    owners = ["amazon"]

    filter {
        name = "state"
        values = ["available"]
    }
    filter {
        name = "name"
        values = ["amzn2-ami-hvm-2.0.*"]
    }
}

resource "aws_instance" "wawawa" {
    ami = data.aws_ami.recent_amazon_linux2.image_id
    instance_type = "t3.micro"
}

おわりに

べんりですね

Terraform: Up & Running: Writing Infrastructure as Code (English Edition)

Terraform: Up & Running: Writing Infrastructure as Code (English Edition)

  • 作者:Yevgeniy Brikman
  • 出版社/メーカー: O'Reilly Media
  • 発売日: 2019/09/06
  • メディア: Kindle版

Terraformで変数をつかう

概要

Terraformで変数をつかってみます。
variableを使うと変数が定義できます。

きほんのかたち

インスタンスタイプをt3.microの変数を設定している。

provider "aws" {
  region = "ap-northeast-1"
}
variable "instance_type" {
    default = "t3.micro"
}
resource "aws_instance" "wawawa" {
    ami = "ami-068a6cefc24c301d2"
    instance_type = var.instance_type
}

こうなる

$ terraform plan | grep instance_type
      + instance_type                = "t3.micro"

-varオプションで上書き

-var オプションで上書きできます。

$ terraform plan -var 'instance_type=t3.medium' | grep instance_type
      + instance_type                = "t3.medium"

TF_VAR_wawawa環境変数で上書き

環境変数で上書きできます。
TF_VAR_wawawaという名前の環境変数を定義してあげると、それを読み込んでくれます。

$ export TF_VAR_instance_type=t3.large
$ echo ${TF_VAR_instance_type}
t3.large

$ terraform plan | grep instance_type
      + instance_type                = "t3.large"

ローカル変数で上書きされないようにする

ローカル変数をつかうと、上書きできないようになります。
こんなかんじで定義してあげます。

provider "aws" {
  region = "ap-northeast-1"
}
locals {
    instance_type = "t3.micro"
}
resource "aws_instance" "wawawa" {
    ami = "ami-068a6cefc24c301d2"
    instance_type = local.instance_type
}

おわりに

いろいろありますね

Terraform: Up and Running: Writing Infrastructure as Code

Terraform: Up and Running: Writing Infrastructure as Code

  • 作者:Yevgeniy Brikman
  • 出版社/メーカー: O'Reilly Media
  • 発売日: 2017/04/04
  • メディア: ペーパーバック

Pythonでコンソールのサイズを取得する

概要

Pythonを利用してコンソールのサイズを取得してみたいと思います。

こんなかんじ

こんなかんじです

import os
columns,lines = os.get_terminal_size() 

ゆーすけーす

こんなかんじでぼくはつかっている
こうすることでコンソールサイズがどんなかんじであろうと1行分*を出してくれる。
人間にみやすくなってよいです。

import os

columns,lines = os.get_terminal_size() 
print('*' * columns) 

こんなかんじでprintされる。

*******************************************************************************************************************************

Ansibleみ

みたいな

import os

columns,lines = os.get_terminal_size() 

title = 'PLAY [localhost]'
length = columns - len(title) - 1

print(title,'*' * length)

こんなかんじでprintされる。

PLAY [localhost] **************************************************************************************************************

おわりに

べんりですね

Excel×Python最速仕事術

Excel×Python最速仕事術