LoginSignup
1
0

More than 1 year has passed since last update.

WindowsでのAWS CLIセットアップ手順、タブ補完の有効化手順と注意点

Posted at

JAWS-UG CLI専門支部などでハンズオンイベントに参加する時、よく使われるのがcloud9というサービスです

cloud9はVSCodeのようなIDEを提供してくれる素晴らしいサービスで、たまに開発環境を使う程度であれば十分すぎる代物です

ただ一方、個人的にローカルの開発環境を整えてる人に対するあこがれもありました
ハードルが高く感じてしまいなかなか手を出せていませんでしたが、連休を使ってAWS CLIをローカルで動かせるようにしてみました

結果、インストールはすぐにできたのですがセットアップで少し手こずりました
Windowsの事例がググってもあまり出てこなかったので、備忘録もかねて記事にしておきます

前提

OS:Windows 11
IDE:VSCode(ターミナルはPowerShell)

AWS CLIのインストール

基本的には、公式ドキュメント通りにやればOK

  1. Windows用のMSIインストーラーをダウンロードして実行する
  2. VSCodeのターミナルで以下コマンドを入力して、バージョンが返ってくればインストール成功
aws --version

設定ファイル、認証情報ファイルの設定

AWS CLIの設定ファイル、認証情報ファイルについて

AWS CLIの構成設定は、主に2つのファイルに格納されています

  • config:設定ファイル、リージョンや出力形式の指定を格納する
  • credential:認証情報ファイル、アクセスキーとシークレットアクセスキーを格納する

上記はいずれもホームディレクトリに格納されており、Windowsの場合はC:\Users\ローカルユーザー名\.awsに格納されているはずです

この2つを設定することで、AWSにアクセスして操作ができるようになります

設定方法

こちらも公式ドキュメントに従えばOK、特に引っかかりポイントはありませんでした

  1. 事前にマネジメントコンソールで、使用するアクセスキーとシークレットアクセスキーを発行しておく
  2. PowerShellでaws configureコマンドを入力し、アクセスキー、シークレットアクセスキー、デフォルトリージョン、出力フォーマットをそれぞれ入力する
    $ aws configure
    AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
    AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    Default region name [None]: us-west-2
    Default output format [None]: json
    
  3. aws configure listとコマンドを入力し、入力内容を確認する
$ aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************ABCD  shared-credentials-file    
secret_key     ****************ABCD  shared-credentials-file    
    region                us-west-2             env    AWS_DEFAULT_REGION

タブ補完を有効化する

コマンドを途中まで入力し、Tabキーを押すと勝手に補完してくれる機能が「タブ補完」です
※AWSの公式ドキュメントでは「コマンド補完」と記載されています

タブ補完はデフォルトで無効になっているので、公式ドキュメントを参考にして有効化する必要があります

実はここに、Windowsならではの引っかかりポイントがありました

具体的な手順は上記ドキュメントに倣うとして、引っかかりポイントを記載しておきます

Windowsセキュリティで拒否される

以下のコマンドを入力する手順で、コマンドを実行できませんでした

PS C:\> if (!(Test-Path -Path $PROFILE ))
{ New-Item -Type File -Path $PROFILE -Force }

よく見てみると、Windowsセキュリティの通知も一緒に飛んできていました

image.png
↑記載内容は違いますが、こんな感じで画面の端っこに通知が来ました

Windowsセキュリティを疑って設定を確認してみると、ランサムウェアの防止の設定で「コントロールされたフォルダーアクセス」がオンになっていました
これをオフ、もしくはアプリの追加をするとコマンドが実行できるようになりました
image.png

ターミナルを再起動するとエラーが出力されてしまう

公式ドキュメントに従って以下のようなスクリプトファイルを作成したら、ターミナルを再起動させます

Register-ArgumentCompleter -Native -CommandName aws -ScriptBlock {
    param($commandName, $wordToComplete, $cursorPosition)
        $env:COMP_LINE=$wordToComplete
        $env:COMP_POINT=$cursorPosition
        aws_completer.exe | ForEach-Object {
            [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
        }
        Remove-Item Env:\COMP_LINE     
        Remove-Item Env:\COMP_POINT  
}

やっとタブ補完ができるようになるとわくわくしていたら、まさかのエラー。。。

このシステムではスクリプトの実行が無効になっているため、ファイル hoge\hoge\hoge.ps1 を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170) を参照してください。

(ファイルパスは適当なものに置き換えています)

調べてみると、どうやらデフォルトではPowerShellのスクリプト実行ポリシーに引っかかっているようでした

公式ドキュメントの手順では、タブ補完のために新しいスクリプトファイルを作成しています
タブ補完を有効化すると、ターミナルを開くたびに作成したスクリプトを実行しているみたいです

しかし、デフォルトではスクリプトが実行できない権限になっているため、これを変更する必要があるようです

私はRemoteSignedのポリシーをユーザーに対して割り当てました

Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

上記コマンドを実行してターミナルを再起動すると、タブ補完ができるようになりました!!!

その後

今現在はどうしているかというとWSL2を導入しました

ここまで頑張ったのになぜやり直したのかというと、単純にPowerShellやコマンドプロンプトが使いにくいと感じてしまったからです。。。
以下は個人的な感想です

  • コマンドプロンプトはls打てない、PowerShellなら打てるけどls -alはダメなの!?
  • PowerShellのコマンドわからない
  • コマンドプロンプトとPowerShellの使い分けがわからない

会社の研修でLinuxの勉強をしていたこともあって、コマンドを打ちにくいを感じてしまいました
WSL2ならWindowsの中でLinux(Ubuntu)を動かすことができるので、泣く泣くWSL2に切り替えました。。。

Windowsの開発環境ってどうやって構築するのがベストプラクティスなのでしょうか。。。?
ご存じの方いたら教えていただけますと幸いです

参考情報

純粋にインストールするだけなら、こちらの記事が簡潔にまとまっていてわかりやすかったです

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0