nodejsでCSVファイルを作成する
CSVファイルを読み込む let datas = fs.readFileSync('data/chart/1m_' + code + '.csv').toString().split("\r\n");
CSVファイルを読み込む let datas = fs.readFileSync('data/chart/1m_' + code + '.csv').toString().split("\r\n");
特定のパラメータの値をチェック
単発実行 AMI 現在のインスタンスのTagの状態を確認 aws ec2 describe-images --image-ids ami-xxxxxx タグを付与(例として system:front というTagを付与する) aws ec2 create-tags --resources ami-ffa5df99 --tags Key=system,Value=front ⇨再度実行しても同じKey/Valueなら結果は変わらないことを確認 systemのタグが付いてるリソースを列挙 aws ec2 describe-images --filter Name="tag-key",Values="system" ワイルドカードによる検索も可能 aws ec2 describe-images --filter Name="tag-key",Values="sys*" タグのKeyが system の値を取得 aws ec2 describe-images --image-ids ami-xxxxxx | jq '.Snapshots[] | [ .Tags[] | select(.Key == "system").Value]' Snapshot 現在のTagの状態を確認 snapshotIdをキーに確認する場合 VolumeId=$(aws ec2 describe-snapshots --snapshot-ids snap-xxxxxx | jq .Snapshots[].VolumeId | tr -d '"') aws ec2 describe-volumes --volume-ids $VolumeId AMIのImageIdをキーに確認する場合 SnapshotId=$(aws ec2 describe-images --image-ids ami-xxxxxxx | jq ....
基本コンセプト Composition コンポジションはインフラモジュールの集合体であり、論理的に分離された複数の領域(例:AWSリージョン、複数のAWSアカウント)にまたがることが可能である。コンポジションは、組織全体やプロジェクトに必要な完全なインフラストラクチャを表現するために使用される。 コンポジションは、インフラストラクチャーモジュールで構成され、リソースモジュールで構成され、個々のリソースを実装する。 作成すべきファイル main.tf: モジュール、ローカル、データソースを呼び出して、すべてのリソースを作成 outpputs.tf: main.tfで作成されたリソースからの出力 variables.tf: main.tfで使用される変数の宣言 terraform.tfvars: 環境特有の変数の値を宣言 ref: https://github.com/antonbabenko/terraform-best-practices/tree/master/examples/large-terraform/stage
概要 ApacheやNginx、ELBのアクセスログの集計などをする時に以下のような変換を行う必要がある。 Input: timestamp,backend_processing_time_msec,alb_status_code,backend_status_code,target_status_code_list,method,URL 2021-12-01T03:50:00.115676Z,182,201,201,201,POST,https://api.test.io:443/service1/v2/jp/cart/7219b08ec8464865a6020bb6025cd641/details 2021-12-01T03:50:20.597508Z,67,200,200,200,GET,https://api.test.io:443/service2/v2/jp/history/0130050002112010350-8052922 2021-12-01T03:50:20.613452Z,145,200,200,200,GET,https://api.test.io:443/service2/v2/jp/history?display_results=5&search_page=1 2021-12-01T03:50:20.894114Z,22,200,200,200,GET,https://api.test.io:443/service2/v2/jp/history/0130050002112010350-8052921 2021-12-01T03:51:45.903017Z,8,404,404,404,DELETE,https://api.test.io:443/service3/v1/jp/reserve/7041b995fa1b4c8b99543acc50c60865 2021-12-01T03:54:41.598315Z,20,200,200,200,GET,https://api.test.io:443/service3/v1/jp/stocks?code_list=11111111%22222222%33333333 2021-12-01T03:54:56.672346Z,165,200,200,200,GET,https://api.test.io:443/service4/v1/jp/pay/accesstoken?device_id=AAAAA-BBBB-CCC ⬇️ URLの正規化(≒変換, 名寄せ) Output: timestamp,backend_processing_time_msec,alb_status_code,backend_status_code,method,URL 2021-12-01T03:50:00.115676Z,182.0,201,201,POST,https://api.test.io:443/service1/v2/jp/cart/{cart_no}/details 2021-12-01T03:50:20.597508Z,67.0,200,200,GET,https://api.test.io:443/service2/v2/jp/history/{order_no} 2021-12-01T03:50:20.613452Z,145.0,200,200,GET,https://api.test.io:443/service2/v2/jp/history 2021-12-01T03:50:20.894114Z,22.0,200,200,GET,https://api.test.io:443/service2/v2/jp/history/{order_no} 2021-12-01T03:51:45.903017Z,8.0,404,404,DELETE,https://api.test.io:443/service3/v1/jp/reserve/{cart_no} 2021-12-01T03:54:41.598315Z,20.0,200,200,GET,https://api.test.io:443/service3/v1/jp/stocks 2021-12-01T03:54:56.672346Z,165.0,200,200,GET,https://api.test.io:443/service4/v1/jp/pay/accesstoken 上記のような変換を行うことで、APIのEndpointごとにコール回数やレスポンス時間など統計処理をPandasなどを行うことができる。 コード 概要で説明したような事を実現するために、以下のコードを作成。 1. URLの変換パターンを定義した設定ファイル(JSON) 置換のパターンはAPIの定義書などを参考に記述するのが良い(ない場合はアクセスログからリバースするしかない…) { "^(.*)/history/[0-9]{12,19}-[0-9]{5,7}": "\\1/history/{order_no}", "^(.*)(cart|reserve)/[0-9a-z]{32}": "\\1\\2/{cart_no}" } 2. inputしたCSVからURLの変換処理を行うスクリプト(Python) タイトル詐欺になるが、クエリパラメータに関する置換はルールが単純なのでJSONでは定義せず、こちらのスクリプトで定義・処理している(# REMOVE QUERY PARAMETERのセクション)。 import pandas as pd import json input_filename = './input.csv' output_filename = './output.csv' input_csv = pd.read_csv( input_filename, sep=',', usecols=lambda x: x in ['timestamp','alb_status_code', 'backend_status_code', 'method', 'URL', 'backend_processing_time_msec'], index_col='timestamp', dtype={'timestamp': str, 'alb_status_code': str, 'backend_status_code': str, 'method': str, 'URL': str, 'backend_processing_time_msec': 'float16'} ) # REMOVE QUERY PARAMETER input_csv = pd....