Cover Image

awscliで出力したSecurityGroupRuleをcsvに変換するPowerShellスクリプト

2023-4-20 読み終える時間: ~1 分

aws ec2 describe-security-group-rules > ec2_describe-security-group-rules.json

からの

$sgr = Get-Content .\ec2_describe-security-group-rules.json | ConvertFrom-Json
$sgrlist = @(
  @($sgr.SecurityGroupRules.SecurityGroupRuleId), ###[0]
  @($sgr.SecurityGroupRules.GroupId),             ###[1]
  @($sgr.SecurityGroupRules.IsEgress),            ###[2]
  @($sgr.SecurityGroupRules.IpProtocol),          ###[3]
  @($sgr.SecurityGroupRules.FromPort),            ###[4]
  @($sgr.SecurityGroupRules.ToPort),              ###[5]
  @($sgr.SecurityGroupRules.CidrIpv4),            ###[6]
  @($sgr.SecurityGroupRules.CidrIpv6),            ###[7]
  @($sgr.SecurityGroupRules.Description)          ###[8]
)

### header write
echo "SecurityGroupRuleId,GroupId,IsEgress,IpProtocol,FromPort,ToPort,CidrIpv4,CidrIpv6,Description" | Out-File -Encoding oem -Force .\sgrule-list.csv

for ($i = 0; $i -lt $sgrlist[0].Length; $i++ ) {
  ### Null to N/A
  if ($sgrlist[6][$i] -eq $nul) {$ipv4 = "N/A"}else{$ipv4 = $sgrlist[6][$i]}
  if ($sgrlist[7][$i] -eq $nul) {$ipv6 = "N/A"}else{$ipv6 = $sgrlist[7][$i]}
  if ($sgrlist[8][$i] -eq $nul) {$descr = "N/A"}else{$descr = $sgrlist[8][$i]}
  ### Input csv
  $line = $sgrlist[0][$i] + "," + $sgrlist[1][$i] + "," +  $sgrlist[2][$i] + "," +  $sgrlist[3][$i] + "," +  $sgrlist[4][$i] + "," +  $sgrlist[5][$i] + "," +  $ipv4 + "," +  $ipv6 + "," +  $descr
  $line | Out-File -Encoding oem -Append .\sgrule-list.csv
}

で、ルールだけ消すときはこうする、と

インバウンドの場合

aws --profile addrle ec2 revoke-security-group-ingress --group-id sg-0113793ba0362d9a0 --security-group-rule-ids sgr-0b142f3c7151c1f38

アウトバウンドの場合

aws --profile addrle ec2 revoke-security-group-egress --group-id sg-0113793ba0362d9a0 --security-group-rule-ids sgr-0a391a55503a18e74


今回はここまで



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
}

今回はここまで



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"
}

ようわからんのじゃ🤯


追記

続きを読む

awscliを使ったEC2のInstanceのAMIを取得するスクリプト(bash)

2020-12-31 読み終える時間: 5 分

また不格好なスクリプトを書いてしまった・・・

だいたいの説明

  • awscli V2利用(aws-cli/2.1.15 Python/3.7.3 Linux/4.4.0-19041-Microsoft exe/x86_64.ubuntu.20 prompt/off)
  • awscliのプロファイルとアクセスキーは設定済みとする
  • <インスタンスのNameタグの値>-system-v<N>という名前の付いたAMIを作成する ※<N>は数字
  • <インスタンスのNameタグの値>の中に"-v"という文字列があると失敗するはず
  • 世代管理する(個人的には1世代しか残さないので割と適当な造作)
  • ルートブロックデバイスしかSnapshotを作らない(xvdbとxvdcを決め打ちで除外)
  • Snapshotにもタグ付けする
  • AMI作成時に再起動しない
  • tempファイル作るのが嫌いな向きは使わない方が良いです

大変お世話になりました :https://gist.github.com/magnetikonline/6a382a4c4412bbb68e33e137b9a74168

続きを読む

awscliを使ったEC2のEBSのsnapshotを取得するスクリプト(bash)

2020-12-29 読み終える時間: 3 分

また不細工なスクリプトが出来てしまった・・・

環境

  • wslのubuntuにAWSCLI V2を入れて使う
  • awscliのプロファイルは登録済み(アクセスキーを使用)

続きを読む