Cover Image

awscliで出力したSubnetのjsonをPowerShellでcsvとして部分出力する

2023-3-30 読み終える時間: ~1 分

や~、けっこう悩んだ。

まずNameタグなんかは1行でスパッと抜き出せなくて、もっといい書き方ないのかな~ってなってる。

とりあえず以下がそのコード。

### aws ec2 describe-subnets で出力したjson読み込み
$subnet = Get-Content .\describe-subnets.json | ConvertFrom-Json
### カウント用に1要素なにか配列にする
$subnetid = @($subnet.Subnets.SubnetId)

### ヘッダーを1行目に記載
$csvheader = "SubnetName," + "SubnetId," + "CidrBlock," + "Ipv6CidrBlock," + "VpcId," + "AvailabilityZone"
$csvheader | Out-File -Force -Encoding oem -FilePath .\subnets.csv

### 中身を入れていく
for ($i = 0; $i -lt $subnetid.Length; $i++) {
  ### Nameタグ取り出し
  $subnettags = $subnet.Subnets | where {$_.SubnetId -eq $subnet.Subnets.SubnetId[$i]}
  $subnetnametag = $subnettags.Tags | where {$_.Key -eq "Name"}
  $subnetnamevalue = $subnetnametag.Value
  ### NameタグがないときはN/Aを入れる
  $subnetname = if ($subnetnamevalue -eq $nul) {"N/A"}else{$subnetnamevalue}

  ### Ipv6も値が空ならN/Aを入れる
  $ipv6cidrblock = $subnet.Subnets | where {$_.SubnetId -eq $subnet.Subnets.SubnetId[$i]}
  $ipv6cidr = $ipv6cidrblock.Ipv6CidrBlockAssociationSet.Ipv6CidrBlock
  $ipv6block = if ($ipv6cidr -eq $nul) {"N/A"}else{$ipv6cidr}

  ### 中身を詰める
  $line = $subnetname + "," + $subnetid[$i] + "," + $subnet.Subnets.CidrBlock[$i] + "," + $ipv6block + "," + $subnet.Subnets.VpcId[$i] + "," + $subnet.Subnets.AvailabilityZone[$i]
  $line | Out-File -Append -Encoding oem -FilePath .\subnets.csv
}

今回はここまで



このサイト作った時のCloudFormation-JSON

2022-5月-29 読み終える時間: 15 分

このサイトは非常にシンプルな構成で、AWS環境でEC2インスタンス1つにグローバルIPを割りあててそのままインターネットに公開している。

インスタンスタイプはt3a.nanoを使い、これは1hで0.0067USD@東京(月間5USDちょい)という低価格。

しかしオレゴンリージョンであればさらに0.0047USDに下がるという事で、東京リージョンからオレゴンリージョンに移設した。昨日。

東京リージョンで取得したAMIをオレゴンリージョンにコピー。EIPを新たに取得して、下方のCFnコードでスタック作成する。

便宜上jsonファイルは3つに分けている。

  1. alterworks-aws-stack1-vpc.json (無課金部分)
  2. alterworks-aws-stack2-iam.json (無課金グローバル部分)
  3. alterworks-aws-stack3-instance.json (お金かかるやつ)

メンテナンス性は気にしていないが、実際面このシンプル構成だと全部作り直しで障害復旧とかできるので問題なかろう、である。

あとついでにIPv6対応してみた。IPv6設定で非常に有用な参考サイト 【備忘録】CloudFormationで IPv6 対応のVPCとサブネットを作る【CFn】 - サーバーワークス

それぞれのjsonコードが以下のような感じ。(使っていない設定も入っているが、気にしない)

  • alterworks-aws-stack1-vpc.json

続きを読む

awscliへのjsonの渡し方

2022-2-10 読み終える時間: 4 分

ん~、クォーティングが、ががg

とりあえず外部ファイルにして

aws glue update-table --database-name --table-input file://table.json

のように書く。

table.json 例

{
    "Name": "new_table",
    "StorageDescriptor": {
        "Columns": [
            {"Name": "c1", "Type": "int"},
            {"Name": "c2", "Type": "string"},
            {"Name": "c3", "Type": "string"}
        ],
        "Location": "s3://mybucket/db/new_table",
        "InputFormat": "org.apache.hadoop.mapred.TextInputFormat",
        "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
        "SerdeInfo": {
            "SerializationLibrary": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
            "Parameters": {
                 "separatorChar":","
            }
        }
    },
    "Parameters": {
        "projection.enabled": "true",
        "projection.year.range": "2021,2030",
        "projection.year.type": "integer",
        "projection.month.range": "1,12",
        "projection.month.type": "integer",
        "projection.day.range": "1,31",
        "projection.day.type": "integer"
    },
    "PartitionKeys":[
        {"Name":"year", "Type":"int"},
        {"Name":"month", "Type":"int"},
        {"Name":"day", "Type":"int"}
    ],
    "TableType": "EXTERNAL_TABLE"
}

ようわからんのじゃ🤯


追記

続きを読む

CloudFormationのJSONコード書きの練習 続

2020-2-12 読み終える時間: 15 分

やっぱクソ長い気がする😂

今回は3分割

  • stack1 VPC周りを作成
  • stack2 TAG付け用のIAMロール作成
  • stack3 インスタンス作成
続きを読む

CloudFormationのJSONコード書きの練習

2020-2-12 読み終える時間: 9 分

非常に長ったらしくなってしまう。どうにかならないものか。。。

続きを読む