AWS CLI でバッチ実行時にプロファイルが使えない?を環境変数で一発解決
- yeda1343
- 4 日前
- 読了時間: 3分

目次
バッチ実行でプロファイルを指定できずに困った話
AWS CLI を使ってバッチ処理を行う際、--profileを指定できずに困ったことがありました。
社内の他のメンバーが作成した共有スクリプトを実行したところ、スクリプト内でAWS CLI の --profileが指定されておらず、default設定のプロファイルに自動的に接続されてしまい、意図しないアカウントにアクセスして実行エラーになったのです。
大変焦ったのですが、環境変数で無事に解決することができました。このブログでは同じような問題が発生した方のために、私が実行した解決策を説明します!
AWSプロジェクトの人手が足りないという方に!AWSエンジニアを派遣します
サービスの特徴や弊社が選ばれる理由はこちら
普段は --profile 指定でうまく使えていたのに…
AWS CLI に接続する際の認証方法はいくつかありますが、私は普段、アクセスキーを使って ~/.aws/config と ~/.aws/credentials を設定し、AWS CLI のプロファイルを使い分けています。
[default]
aws_access_key_id = AKIA...
aws_secret_access_key = ...
[profile dev]
aws_access_key_id = AKIA...
aws_secret_access_key = ...
[profile prod]
aws_access_key_id = AKIA...
aws_secret_access_key = ...
そして、コマンド実行時に --profile をつければ、どの環境にアクセスしているか一目瞭然で安心でした。
aws s3 ls --profile dev
でもバッチ実行時には引数指定が使えない
問題は「バッチファイルの中で --profile を渡せないケース」でした。
# profile未指定のままバッチ実行
.\count_s3_buckets.ps1
今回は、VSCodeのターミナルでS3バケット数をカウントするバッチスクリプトを実行してみます。

このとき、スクリプト内でawsコマンドが使われていても、自動的にdefaultプロファイルの環境に接続するため、目的のプロファイルの環境からの結果は返ってきません。
環境変数 AWS_PROFILE で解決
そこで、バッチ実行前に一時的に有効な環境変数 AWS_PROFILE を設定するようにしました。
# 使用したいプロファイルを環境変数でセット
$Env:AWS_PROFILE = "dev"
バッチを再度実行してみます。
# その状態でバッチを実行
.\count_s3_buckets.ps1

その結果、バッチ内で使用されたAWS CLI もすべてdevプロファイルで動作し、無事に目的の環境へ接続して処理が成功しました!
この方法はあくまでも一時的な設定のため、一度ターミナルを閉じ、再度新しいターミナルでバッチを実行してみます。

すると、実行結果が変わりました。
環境変数が解除され、アクセス先がdefaultプロファイルに戻っていることがわかります。
この一時的な環境変数設定を使えば、awsコマンドを大量に実行したいときも便利になりますね。
以上、プロファイル指定できずに困ったときに実施した、一時的な設定方法でした。
AWSプロジェクトの人手が足りないという方に!AWSエンジニアを派遣します
サービスの特徴や弊社が選ばれる理由はこちら