Intellijではboto3操作時のCredential設定が簡単です

2022.04.26

はじめに

データアナリティクス事業本部のkobayashiです。

Intellij&PycharmをメインIDEにして開発を行っています。PythonスクリプトでBoto3を使ってAWSリソースを扱うことが多いのですが、その際に認証情報をIntellijのAWS Toolkitプラグインを使うようにしたところとても幸せになったのでまとめます。

環境

  • IntelliJ IDEA 2021.3.2
  • PyCharm 2021.3.2
  • AWS Toolkit 1.40

Boto3で認証情報を使う

通常ローカルでの開発でBoto3で認証情報を使うには以下のパターンが主な方法かと思います。

  • clientメソッド、 resourceメソッドで認証情報を指定する
  • Sessionオブジェクト生成時に認証情報を指定する
  • 環境変数で認証情報を渡す
  • ~/.aws/credentialsのdefaultに認証情報を設定する

コード例

import boto3

# Let's use Amazon S3
session = boto3.Session(profile_name='cm_sspg')
s3 = session.resource('s3')
# Print out bucket names
for bucket in s3.buckets.all():
    print(bucket.name)

上記の何れの場合でも「ソースに認証情報をベタ書きする」or「外部で設定した認証情報を読み込む」必要があります。これだとソースコードに余計な記述が必要だったり、認証情報の変更時のメンテナンス性が悪いです。また特にIAMユーザーにMFAが設定されている場合はそのスクリプトの実行の都度パスコードを入力する必要がありかなりの手間です。

Enter MFA code for arn:aws:iam::1234567890:mfa/iam_user_name:

これまで自分は自作のオレオレモジュールを作ってMFA認証を回避していましたが欠点としてソースにモジュールを読み込む記述をしなければならず本番環境などへPushする際に記述を削除する手間がありました。

ただ今回AWS Toolkitをよくよくいじっていると簡単にこれらの欠点をなくす方法があったのでその設定を行ってみます。

AWS Toolkitで認証情報を使う

AWS Toolkitでは認証情報は認証情報ファイルに登録してあるProfileから選択します。したがって~/.aws/credentialsにProfileを登録しておきます。

AWS Toolkitでの設定

はじめにAWS Toolkit をインストールします。Preferences > Pluginsから簡単にインストールできるので予めインストールしておきます。

次にツールウィンドウからAWS Toolkitを開き、使いたいProfileを選択します。MFAが設定されていない場合はこれだけで終わりです。

MFAのパスコードを入力

MFAが設定されている場合はProfileの選択後MFAパスコードを入力する必要があります。

次にツールウィンドウのEnter MFA codeを押下する。

MFAパスコードを入力するモーダルが表示されるのでパスコードを入力する。

Pythonスクリプトの実行環境を設定

AWS ToolkitでAWSリソースが扱えるようになったのでPython実行時にこの認証情報を使うように設定します。実行するスクリプトはS3のバケット名を取得する以下のスクリプトになります。

import boto3

# Let's use Amazon S3
s3 = boto3.resource('s3')
# Print out bucket names
for bucket in s3.buckets.all():
    print(bucket.name)

Intellij(PyCharm)でPythonスクリプトのRun Configurationを開きEdit Configurations templatesを選択する

Pythonの項目を選択しAWS Connectionタブを開く。Use the currently selected credential profile/regionを選択し、Applyする。

以上で設定は終わりです。後はIDE上でPythonスクリプトを実行すると現在AWS Toolkitで選択しているProfileを使ってBoto3を使うことができます。もちろんMFAのパスコードも聞かれることはありません。

まとめ

Intellij(PyCharm)のAWS Toolkitの認証情報機能でBoto3実行時のProfile指定を行ってみました。コードを修正する必要や環境変数に認証情報を設定する必要がなくそれらの設定の手間がなくなります。Profileの切り替えも簡単です。特にMFAを設定してあるユーザープロファイルを使う場合はパスコードを入力する手間がなくなるので非常に便利です。

最後まで読んで頂いてありがとうございました。