かべぎわブログ

ブログです

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最速仕事術

S3バケットの中のオブジェクトを数えてくれるPythonをかきました

概要

S3バケットの中にあるオブジェクトを数えてくれるPythonをかきました。

これです

これです
値はCloudWatchメトリクスから持ってきています。
github.com

つかいかた

こうやってつかうのだ

$ python get_object_count.py --help
usage: get_object_count.py [-h] --bucket BUCKET [--profile [PROFILE]]

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

required arguments:
  --bucket BUCKET      The name of the bucket name.
$ python ./get_object_count.py --bucket mybucket
12 Count

おわりに

aws s3 ls s3://mybucket --recursive --human --sumとかやらなくていいです。

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

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

  • 作者: Michael Wittig,Andreas Wittig,株式会社クイープ
  • 出版社/メーカー: インプレス
  • 発売日: 2019/09/05
  • メディア: 単行本(ソフトカバー)
  • この商品を含むブログを見る

CloudWatch Logs InsightsでLambdaの実行時間の長いものを取得する

関数

CloudWatch Logs InsightsをつかってLambda関数の実行時間の長いものを取得してみたいと思います。

やってみる

やってみる。

クエリ

クエリはこんなかんじです。

filter @type = "REPORT"
| fields @requestId, @billedDuration, @duration
| sort by @duration desc
| limit 10

実行時間を確認したいLambdaのロググループを選択して [クエリの実行]すると以下のように結果がでてきます。
f:id:kabegiwakun:20191122065053p:plain

おわりに

べんりですね

AWS認定資格試験テキスト AWS認定 ソリューションアーキテクト-アソシエイト

AWS認定資格試験テキスト AWS認定 ソリューションアーキテクト-アソシエイト

  • 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,金澤圭
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2019/04/20
  • メディア: 単行本
  • この商品を含むブログを見る

DockerでCentOS8のAWSCLI環境を作成する

概要

DockerでCentOS8のイメージをつかってAWSCLIの動作環境を作ってみたいと思います。

Dockerfile

こんなかんじ。

FROM centos:8

RUN dnf install -y wget python3

RUN wget https://bootstrap.pypa.io/get-pip.py
RUN python3 get-pip.py

RUN pip install awscli

ENV PATH $PATH:/root/.local/bin

CentOS8ではPythonがインストールされていないため、そのインストールからはじめている。
インストールはyumではなくdnfをつかっています。

やってみる

やってみます。

buildする

buildします。

$ ls
Dockerfile

$ docker build -t awscli .

runして中にはいってみる

起動して中に入ってみます

$ docker run -it awscli

AWSCLIがはいっていることがわかります。

$ aws --version
aws-cli/1.16.287 Python/3.6.8 Linux/4.9.184-linuxkit botocore/1.13.23

おわりに

おわり

Docker実践ガイド 第2版 impress top gearシリーズ

Docker実践ガイド 第2版 impress top gearシリーズ

S3バケットのサイズを取得してくれるPythonをかいた

概要

S3バケットのサイズ(オブジェクトのサイズの合計)を取得してくれます。
CloudWatchメトリクスの値をもとにしています。

コード

これです。 github.com

つかいかた

usage: 'get_bucket_size.py [-h] --bucket BUCKET [--profile [PROFILE]]

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

required arguments:
  --bucket BUCKET      The name of the bucket name.

こんなかんじで表示されます。

$ python ./get_bucket_size.py --bucket mybucket
6487.0 Bytes

おわりに

おわり

Amazon Web Services パターン別構築・運用ガイド 改訂第2版

Amazon Web Services パターン別構築・運用ガイド 改訂第2版

  • 作者: NRIネットコム株式会社,佐々木拓郎,林晋一郎,小西秀和,佐藤瞬
  • 出版社/メーカー: SBクリエイティブ
  • 発売日: 2018/03/23
  • メディア: Kindle版
  • この商品を含むブログを見る

AWSマネジメントコンソールのヘッダーに色をつけるChrome/Firefox拡張

概要

AWSのマネジメントコンソールのヘッダーに色つけてくれるChrome/Firefox拡張です。
AWS console regions colorです。
リージョンがわかりやすくなります。

まねこんポチポチしてたらオレゴンにインスタンスつくってたわみたいなことがたぶんなくなります。

Chrome

chrome.google.com

Firefox

addons.mozilla.org

こんなかんじ

こんなかんじになります。
デフォルトだと東京はこうで
f:id:kabegiwakun:20191112064428p:plain

オレゴンがこうです。
f:id:kabegiwakun:20191112090902p:plain
わかりやすいですね

カスタマイズもできる

いろがきにいらなければ変更できます。
f:id:kabegiwakun:20191112064639p:plain

おわりに

わかりやすいですね

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書 徹底攻略シリーズ

徹底攻略 AWS認定 ソリューションアーキテクト ? アソシエイト教科書 徹底攻略シリーズ

オブジェクトをすべて削除してからS3バケットを削除してくれるPythonをかきました

概要

かんたんにS3バケットを削除してくれるPythonをかきました。

バケットを削除するときはすべてのオブジェクトを削除してからじゃないと削除できなくてめんどくさいなーってかんじだったのでかいた。

スクリプト

これです。
github.com

import boto3, argparse

class s3():
    def __init__(self, bucket_name, profile='default'):
        self.session = boto3.Session(profile_name=profile)
        self.s3 = self.session.resource('s3')
        self.bucket = self.s3.Bucket(bucket_name)

    def delete_all_object(self):
        self.s3_objects = list(self.bucket.objects.all())
        for self.s3_object in self.s3_objects:
            self.s3_object.delete()

    def delete_all_object_versions(self):
        self.s3_object_versions = list(self.bucket.object_versions.all())
        for self.s3_object_version in self.s3_object_versions:
            self.s3_object_version.delete()

    def delete_bucket(self):
        self.bucket.delete()

    def delete(self):
        self.delete_all_object()
        self.delete_all_object_versions()
        self.delete_bucket()


def main():
    s3(bucket_name, profile).delete()

if __name__ == '__main__':
    parser = argparse.ArgumentParser(prog=__file__)
    required = parser.add_argument_group('required arguments')
    optional = parser.add_argument_group('optional arguments')
    required.add_argument('--bucket',required=True, help='The name of the bucket name.')
    optional.add_argument('--profile',nargs='?',default='default',help='Use a specific profile from your credential file.')
    
    args = parser.parse_args()
    bucket_name = args.bucket
    profile = args.profile

    main()

こんなかんじでつかう

$ python delete_bucket.py --bucket mybucket

おわりに

間違ったバケットを消さないよう注意

Amazon Web Services エンタープライズ基盤設計の基本

Amazon Web Services エンタープライズ基盤設計の基本