技術関連の覚書

案件でやったり自宅で試したことの覚書

AWS MFA認証でAWSCLIを使う

ここに書いてあるのを参考に自分の環境に合わせて認証をする。 docs.aws.amazon.com

セキュリティ情報
ここを開いて「多要素認証 (MFA) (1)」にある識別子をコピーして--serial-numberの引数にする --token-codeは認証アプリやトークン端末の数字を記入

 % aws sts get-session-token --profile credentialに書いてあるprofile名 --serial-number arn:aws:iam::000000000000:mfa/USERNAME --token-code 000000

出力

{
    "Credentials": {
        "AccessKeyId": "ASIAXXXXXXXXXXXXXXXX",
        "SecretAccessKey": "XxXXXxXXXxXXXxXXXxXXXxXXXxXXXxXX",
        "SessionToken": "XXXXXXX=",
        "Expiration": "2024-08-01T17:58:47Z"
    }
}

このAccessKeyIdとSecretAccessKeyとSesionTokenをcredentialsに貼り付けるとAWSCLIで接続する際のMFAでの認証ができるようになる。

awscliとlocalstack

AWSCLIとlocalstack

AWSのサービスを使うときに * バッチ処理などをshellやバッチファイルなどで処理したい時 * AWSを使ったサービスの単体テストでまずはローカルで試したい

そういった場合に使えるのがawscliとlocalstack

AWSCLI

awscliはコマンドラインAWSのサービスを操作するものでwindows,linux,macなどで使える。

使い方はAWS コマンドラインインターフェイス(CLI: AWSサービスを管理する統合ツール)| AWSからCLIリファレンスを見れば使い方があります(英語)。

localstack

localstackはローカルで起動できるAWSサービスのスタブです。

まずはawsの認証設定をします。

ローカルで動作しますが、AWSCLIで認証作業をするためダミーの認証設定が必要になります

aws configureコマンドでlocalstackのプロファイルを作成します

$ aws configure --profile localstack
AWS Access Key ID [None]: dummy
AWS Secret Access Key [None]: dummy
Default region name [None]: us-east-1
Default output format [None]: json

あとは、GitHub - localstack/localstack: 💻 A fully functional local AWS cloud stack. Develop and test your cloud & Serverless apps offline!からcloneして、プロジェクトルートでdocker-compose up -d を実行すれば使えます。

他の方法ではpythonがインストールしてある環境であれば、pip install localstackが最も簡単にインストールできます(とgithubページに書いてあります)

Powershellの使いみちまとめ(なにかやるごとにここに追記してく)

サーバーはLinuxでも開発はWindowsでやることが多く、設計後に設計書から自動でソースなどを起こすようなスクリプトPowershellで作る機会が増えてきたのでまとめることにする Pythonとかだと楽なんだろうなあ

ファイル操作

UTF8Bom無しでテキストを出力する

$encode = New-Object Systen.Text.UTF8Encoding $False
[System.IO.File]::WriteAllLines($outputfile, "出力テキスト", $encode)

$encodeを変えれば出力エンコードが変えられる テキストは$()で出力する関数から出力するようにすれば長いテキストも出力できる

※リダイレクトではUTF16になってしまう

関数で値を返す方法

Write-Output "テキスト"

関数からテキストを返す場合、Powershellにはreturnがないので、一度Write-Outputなどで出力させ、呼び出し元では$()で囲ってやる必要がある

function outText(){
    Write-Output("出力したいテキスト")
}

$(outText)

数値を文字列に変換したい場合は

[string]を使って文字列に変換する

function add($a, $b){
    $c = $a + $b
    Write-Output("演算:"+[string]$c)
    Write-Output("連結"+[string]$a + [string]$b)
}

add 100 200

演算:300
連結:100200

検索

grepっぽいもの

Select-String "検索したい文字列" ファイル名 Select-String -Pattern "正規表現" ファイル名

置換

"文字列".Replace("変えたい文字列","変更する文字列") "文字列" -Replace "正規表現","変える文字列" 正規表現の表し方は、.、\w+ エスケープ文字は\でなくなので、"をエスケープする場合は" .は0文字以上の文字列、は前のパターンの繰り返しなのでこの2つで任意の文字列になる。 \wは任意の単語、+で繰り返すので単語の羅列になる 囲み文字の注意点は、""(.*)"","`$1"にした場合、一番外側の""だけが置換されることになる "aaa","bbb"のようなCSV形式ならaaa","bbbと置換されてしまう

部分置換する場合、"(グループ).*","`$1"で()グループが取り出せる

PowershellでConfluenceの記事を取り出す(2)

実行権限によってスクリプトが実行できない場合はSet-ExecutionPolicyを実行して権限ポリシーを変更する(要管理者権限)

Set-ExecutionPolicy <実行ポリシー>

|実行ポリシー|| |Restricted|| |AllSigned|| |RemoteSigned|| |Unrestricted|| |Bypass||

デバッグ出力

$VerbosePreference = 'Continue' # Verbose On
# $VerbosePreference = 'SilentlyContinue' # Verbose Off

Write-Verbose("出力内容")

$VerbosePreference = 'Continue' を設定すると出力される この場合標準エラーに出力されるのでリダイレクトしても2を指定しない限りファイル出力されない

Pascal/Camel↔snake変換

camelCase→snake_case

$ret = ([regex]"[A-Z]").Replace($org, {"_"+$args[0].Groups[0].Value.ToUpper()})

PascalCaseの場合は先頭の大文字の部分に_が追加されるため先頭1文字を除去するか、1文字目を小文字にしてから変換する必要がある。

snake_case→camelCase

    $camel = ([regex]"_([a-z])").Replace($snake, {$args[0].Groups[1].Value.ToUpper()})

PascalCaseにする場合は先頭が小文字のままなので先頭を大文字に変更する。

カレントディレクトリを取得する

$pwd = (Convert-Path .)

実行パスに確実にファイルを保存したい場合などに必要な場合がある。 何も指定しない場合、C:\Users[ユーザーパス]\Documentsなどに保存される場合もある。

PowershellでConfluenceの記事を取り出す

ConfluencePSというモジュールをインポートすると使えるようになる。 実行するときは管理者権限が必要

Install-Module ConfluencePS
Update-Module ConfluencePS

使い方は

Import-Module ConfluencePS
Set-ConflenceInfo -BaseURI 'https://yourpage.atlassian.net/wiki' -PrompotCredentials

こうすると認証情報を入力するダイアログが出現してID、パスワードを入れるとConfluenceへのアクセスができるようになる。

Get-ConfluencePage -PageID xxxxxx

PageIDで指定したページ番号のQページ内容を取得できる。 これの内容を取り出すためにはどうしたらいいかが次の課題

intelliJでspringboot + myBatisを使ったシステム開発をするための準備

Spring initializr

OSUbuntu 20.04
IDEIntelliJ IDEA Community 2020.3 AMD64
ProjectGradle Project
LanguageKotlin
SpringBoot2.4.0
Project MetadataGroupcom.example.kotlin
Artifactmybatisdemo
Namemybatisdemo
DescriptionDemo project for Spring Boot
Package namecom.example.kotlin.mybatisdemo
Packagingjar
Java11
DependenciesMyBatis Framework
H2 Database

IntelliJにmyBatis Builderプラグインをインストール Shift連打(2回くらい早く押せばよいです)でmybatis builderを検索して実行 DBに接続する。

今回はPostgresqlなのでPostgresを選択して接続情報を入力

f:id:boctok-ctpoba:20201210020028p:plain
MyBatis Builderの設定

f:id:boctok-ctpoba:20201210015704p:plain
MyBatis BuilderでMapperクラスをジェネレートする

f:id:boctok-ctpoba:20210104133555p:plain
MyBatis Builderのパラメータ設定
f:id:boctok-ctpoba:20210104133651p:plain
配置や生成物などを設定する

生成されるもの 生成されるものはxmlの設定ファイルとJavaソースコードになる。 XMLファイルはmybatis-generator.xml Mapperクラス、モデルクラス、Exapmleクラス、Exampleクラスの中にCriteria、Criterion、CeneratedCriteriaクラスが生成される。 名前は テーブル名Mapper、テーブル名、テーブル名Exampleになる。

powershellを使ったExcelの操作

使いどころ

未だにExcelによる申請書とかが多く、マクロ作るのが権限的にできなかったり他のソフト(rubyとかPythonとか)をインストールできない現場で苦肉の策としてPowershellを使って動かすことになったのでメモ。 Powershellも権限的にスクリプトファイルを実行できない場合もあるけど、最悪でもテキストを流し込んで実行できるのでメモ。

powershellの基本的な出力
Write-Output("リダイレクトするとファイルに出力される")
Write-Host("リダイレクトしてもファイルに出力されない")
スクリプト実行権限ポリシーの変更

powershellで以下を実行

Set-ExecutionPolicy RemoteSigned
ExcelBookのオープンクローズ

Excelオブジェクトの作成

$excel = New-Object -ComObject Excel.Application

実行するExcelの可視化設定

$excel.Visible = $false

Excel Bookのオープン

$xlsxBook = $excel.Workbooks.Open($xlsxName)

Excelのクローズ

# ブックを閉じる
$xlsxBook.Close()
# Excelオブジェクトの終了
$excel.Quit()
# インスタンスの削除
$excel = $null

シートの取得

$sheet = xlsxBook.Worksheets
$xSheet = $sheet.Item("シート名")

シート名、インデックス

Write-Host($xSheet.Name)
Write-Host($xSheet.Index)

セルの値

$cVal = $xSheet.Range("A2").Text
$cVal = $xSheet.Cells(2, 1).Text