IDEA Note

  • ValueError: Public Client should not possess credentials

    python で AzureAD の認証をする際 msal を使うことが多いが、

    PublicClientApplicationクラスに証明書を渡すと、

    ValueError: Public Client should not possess credentials というエラーになる。

    対処法として ConfidentialClientApplication クラスを使うことで回避できる。

    PublicClientApplicationクラスはパブリッククライアントを表し、アプリケーション自体が認証されることはないため、証明書の提供はサポートされていない。

    証明書ベースの認証には、ConfidentialClientApplicationクラスを使用する必要がある。

    このクラスは機密クライアントを表し、アプリケーション自体が認証されるため、証明書の提供が必要となるという理由

    以下、サンプルコード

    from msal import ConfidentialClientApplication
    
    client_id = 'YOUR_CLIENT_ID'
    tenant_id = 'YOUR_TENANT_ID'
    client_secret = 'YOUR_CLIENT_SECRET'
    authority = f'https://login.microsoftonline.com/{tenant_id}'
    
    app = ConfidentialClientApplication(
        client_id=client_id,
        client_credential=client_secret,
        authority=authority
    )
    
    result = None
    result = app.acquire_token_for_client(scopes=["https://graph.microsoft.com/.default"])
    
    if "access_token" in result:
        print(result['access_token'])
    else:
        print(result.get("error"))
        print(result.get("error_description"))
        print(result.get("correlation_id")) 
    
  • 「AWSではじめるデータレイク」を読んだ

    「AWSではじめるデータレイク」は、AWSを使ってデータレイクを構築する方法について詳しく解説された書籍である。本書は、AWSのデータレイクについて初心者から中級者までのユーザーに向けて、豊富な事例や具体的な手順を示しながら、データレイクの概念や構成要素、設計方法などについて詳細に解説している。

    本書の特徴の一つは、AWSのデータレイクを利用するメリットや機能面の解説が非常に丁寧であることだ。また、AWSのサービスを組み合わせて、スケーラブルで堅牢なデータレイクを構築するためのベストプラクティスについても解説されている。さらに、実際のビジネスケースを通じて、データレイクがどのように活用されるかもわかりやすく説明されている。

    本書で取り上げられたデータレイクの構成要素は、ストレージ層、処理層、分析層、セキュリティ層の4つである。それぞれの層の機能や使い方について、AWSのサービスを活用した実践的な手順が解説されている。例えば、ストレージ層では、S3やGlacierなどのAWSのストレージサービスを使って、データの保管やアクセス方法について詳しく解説されている。

    処理層では、EMRやLambdaなどのAWSのサービスを使って、データの加工や変換方法について解説されている。分析層では、RedshiftやAthenaなどのAWSのデータ分析サービスを使って、データの分析や可視化方法について解説されている。また、セキュリティ層では、IAMやKMSなどのAWSのセキュリティサービスを使って、データの保護やアクセス制御方法について詳しく解説されている。

    本書の内容は非常に実践的であり、データレイクの構築に必要なスキルや知識を習得する上で非常に役立つ。AWSのサービスを組み合わせることで、大量のデータを効率的に扱うことができるため、データ分析やビジネスインテリジェンスの分野での活用において、非常に有用な知識となる。また、本書で紹介されたベストプラクティスを活用することで、スケーラビリティや可用性など、データレイクを構築する上での課題に対しても十分な対応が可能となる。

    さらに、本書ではAWS以外のデータレイクの構築方法やツールについても言及されており、AWS以外の環境でもデータレイクを構築する際に役立つ情報が得られる。また、データレイクの構築におけるトラブルシューティングやパフォーマンスチューニングのポイントについても詳しく解説されているため、実際の運用においても非常に参考になる。

    一方で、本書はAWSを利用する上での基本的な知識があることが前提となっており、AWSの初心者にとっては難易度が高い可能性がある。また、本書で紹介されたAWSのサービスや機能が、新しいバージョンにアップデートされた場合には情報が古くなる可能性もあるため、最新の情報を得るためにはAWSのドキュメントや公式の情報源を参照する必要がある。

    総じて、本書はAWSを使ったデータレイクの構築に興味がある方や、既にAWSを利用している方にとって非常に有用な一冊である。豊富な実践的な事例や手順が示されており、AWSのデータレイクを効果的に活用するためのノウハウが詳しく解説されているため、データ分析やビジネスインテリジェンスの分野での活用を目指す方には、必読の書と言える。

  • [: 1: unexpected operator

    github actions で [: 1: unexpected operator というエラーが出た時の対処法を紹介。

    原因はshell が POSIX に準拠していないため起こる。

    POSIX に準拠している構文かどうかは checkbashisms コマンドで確認することができる。

     checkbashisms hogehoge.sh
    possible bashism in hogehoge.sh line 16 (should be 'b = a'):
        if [ $exist == 0 ] ; then
    

    この構文が問題であることがわかった

    上記の通りアドバイスをくれる。

     if [ $exist == 0 ] ; then
    

    今回はアドバイス通りではなく

    if [ $exist -eq 0 ] ; then

    と変更して対処した。

  • docker remote repository に image があるか確認する

    dokcer manifest inspect を使って確認することができる

    $ docker manifest inspect $IMAGE_NAME:$IMAGE_TAG
    

    上記コマンドを実行して、イメージが存在していると

    {
    	"schemaVersion": 2,
    	"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
    	"config": {
    		"mediaType": "application/vnd.docker.container.image.v1+json",
    		"size": 9641,
    		"digest": "sha256:xxxxxxx"
    	},
    	"layers": [
    

    というレスポンスを返す

    存在しない場合は以下のようなレスポンスになる

    no such manifest:
    

    そのため

    $ docker manifest inspect $IMAGE_NAME:$IMAGE_TAG > /dev/null ; echo $?
    

    で存在確認が可能

  • argocd login 実行時の TOKEN の保存場所

    argocd で CLI でログインした場合の TOKEN が発行されるがその格納先について

    以下のコマンドでログインした場合

    argocd login argo.sumito.jp:443 --sso

    TOKEN はこちらに格納される

    ~/.config/argocd/config
    
    users:
    - auth-token: xxxx.xxxx.xxxxx
      name: argo.sumito.jp:443
      refresh-token: xxxxx
    

    これを TOKEN に設定することで API にアクセスが可能

    curl -X GET -H "Content-Type: application/json" "https://$ARGOCD_SERVER/api/v1/applications" -H "Authorization: Bearer $ARGOCD_TOKEN"
    

  • qemu: uncaught target signal 11 (Segmentation fault) – core dumped

    m1/m2 mac に powershell のコンテナを動かして powershell の modules をインストールすると、core dump を吐いて止まってしまうことがある。その対処法を紹介。

    /# pwsh -Command Install-Module -Name Microsoft.Graph -F
    qemu: uncaught target signal 11 (Segmentation fault) - core dumped
    Segmentation fault
    

    イメージを lts を利用することで回避ができた

    docker run --platform linux/x86_64  -it mcr.microsoft.com/powershell:lts-ubuntu-22.04 /bin/bash
    Unable to find image 'mcr.microsoft.com/powershell:lts-ubuntu-22.04' locally
    lts-ubuntu-22.04: Pulling from powershell
    Digest: sha256:cb32194aa46f144c09c1a6610eee2684e3642b8609370aba927ab995b413931f
    Status: Downloaded newer image for mcr.microsoft.com/powershell:lts-ubuntu-22.04
    root@6d03d590fb19:/# pwsh -Command Install-Module -Name Microsoft.Graph -F
    root@6d03d590fb19:/#
    
  • E: Couldn’t find any package by regex ‘gcc-c+’

    Docker のベースイメージを Centos から Debian に変更し、

    yum install していたところを、

    apt-get install に雑に変更したら gcc-c+ がないよというエラーが陥った。

    原因は Debian ではこのパッケージ名で存在していないから。

    以下のように変更することで対処可能

    apt-get install g++
    

    また、c++ と、g++ の違いについては以下のページを参照

  • mac でファイルの文字コードを確認する

    生成したファイルの文字コードを確認したいケースがある。

    file コマンドを用いて確認することが可能

    file --mime /tmp/xxx/csv
    

    結果は以下の通り

    $ file --mime /tmp/xxx/csv
    /tmp/xxx/csv: text/csv; charset=utf-8
    

    utf-8 であることを確認

  • python dataframeで csv 出力する際の先頭の ,(カンマ)を削除する

    以下のように pandas dataframe をcsv に変換すると

    df.to_csv(f'/tmp/{output}', mode='w', encoding='utf-8')

    先頭に,(カンマ)が入ってしまう

    ,TITLE,NUMBER,xxx
    hoge,1,xxx
    

    この対処法として

    index=False

    を追加することによって回避が可能

    df.to_csv(f'/tmp/{output}', mode='w', encoding='utf-8', index=False)

    結果は以下の通り

    TITLE,NUMBER,xxx
    hoge,1,xxx
    

    先頭の,(カンマ)が取り除かれた状態で csv が生成された。

  • jq コマンドのシングルクォート内に変数を渡す

    シェルで jq コマンドで変数を渡す際、jq コマンドで シングルクォート が使われているために期待通り変数を渡すことができない。

    今回は jq コマンドのシングルクォート内に変数を渡す方法を紹介。

    (さらに…)