AWSを利用し始めた人でまだAWSのCLIを実行した経験がない人向けの内容になっています。読み終えるとmacOS上でのAWS CLIのインストール方法と初期設定方法、利用方法について理解することができます。

macOSでのインストール

macOSではAWS CLIのインストールドキュメントに記載されたパッケージを利用した方法とHomebrewを利用した方法でAWS CLIをインストールすることができます。

パッケージを利用してインストール

パッケージを利用する場合はドキュメント内では”GUI Installer”, “Command line installer – All users”, “Command line – Current user”の3つの方法で記述されています。

本文書ではsudoの権限を持っているので”Command line installer – All users”の手順に沿ってインストールを行います。

AWS CLI Install
AWS CLI Install

curlコマンドを利用してパッケージファイルをダウンロードします。コマンドが完了するとAWSCLIV2.pkgファイルがコマンドを実行したディレクトリに作成されます。


 % curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"

sudo installerコマンドを利用してダウンロードしたパッケージファイルを利用してインストールを行います。


 % sudo installer -pkg AWSCLIV2.pkg -target /
Password:
installer: Package name is AWS Command Line Interface
installer: Installing at base path /
installer: The install was successful.

インストール後は”aws –version”, “which aws”コマンドを実行することでインストールしたAWS CLIのバージョンと実行ファイルのパスを確認することができます。


 % aws --version
aws-cli/2.15.18 Python/3.11.7 Darwin/23.3.0 source/x86_64 prompt/off
 % which aws
/usr/local/bin/aws

lsコマンドを実行すると/usr/local/bin/awsは/usr/local/aws-cli/awsからシンボリックリンクが貼られていることがわかります。インストールするとAWS CLIに関するファイルは/usr/local/aws-cli下に保存されています。


% ls -l /usr/local/bin/aws
lrwxr-xr-x  1 root  admin  22  2  9 14:55 /usr/local/bin/aws -> /usr/local/aws-cli/aws

Homebrewでのインストール

macOSではHomebrewを利用してインストールを行うことができます。


% brew install awscli

Homebrewでインストールを行った場合にはパッケージファイルを利用してインストールした場合とリンク先が異なります。

インストールを行ってから時間が経過するとどちらの方法でインストールしたかわからない場合もあります。brewのコマンドを利用して確認する方法もありますがリンク先を利用することで確認することができます。


 % ls -l /usr/local/bin/aws
lrwxr-xr-x  1 mac  admin  32  2  9 14:05 /usr/local/bin/aws -> ../Cellar/awscli/2.15.18/bin/aws

Homebrewを利用した場合はコマンド一つでアンインストールすることができます。


% brew uninstall awscli

認証設定

AWS CLIを利用するためには認証設定を行う必要があります。方法はいくつかありますがここでは作成したIAMユーザのアクセスキーとシークレットキーを利用して設定を行います。

本文書では動作確認のため何のポリシーも設定していないテスト用のIAMユーザを作成して、IAMユーザのアクセスキーとシークレットキー作成の許可を持つユーザを利用してテスト用のIAMユーザのアクセスキーとシークレットキーの作成を行っています。

aws configureによる認証設定

aws configureを実行するとAWSのAccess Key, Secret Acces Key, Default region nameとoutput formatを聞かれます。


 % aws configure
AWS Access Key ID [None]: BKJA5FTZBHG7UGUYJ7W5
AWS Secret Access Key [None]: vlS8M3aC7oKiqkq1W753Szr/5hi9L/5GwLnFWsk
Default region name [None]: ap-northeast-1
Default output format [None]: json

実行後にconfigure listコマンドを実行すると設定した情報を確認することができます。


% aws configure list
      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key     ****************J7W5 shared-credentials-file    
secret_key     ****************FWsk shared-credentials-file    
    region           ap-northeast-1      config-file    ~/.aws/config

設定値はユーザのホームディレクトリの.awsの直下にファイルで保存されています。


 % cd .aws
 % pwd
/Users/mac/.aws
 % ls
config		credentials

動作確認

設定が完了して適切なポリシーが設定されている場合はコマンドを利用して許可されたサービスに対する情報を取得することができます。

ユーザ情報の取得

ポリシーが設定されていないユーザでユーザ自身の情報が取得できるか確認を行うため”aws iam get-user”コマンドを実行します。AccessDeniedでエラーメッセージが表示されますがjohndoeというユーザ名であることは戻されるメッセージから確認することができます。


 % aws iam get-user

An error occurred (AccessDenied) when calling the GetUser operation: User: arn:aws:iam::90000000000:user/johndoe is not authorized to perform: iam:GetUser on resource: user johndoe because no identity-based policy allows the iam:GetUser action

メッセージからiam:GetUserという名前のActionが必要だということがわかるので新たにポリシーを作成してテスト用のIAMユーザに作成したポリシーをアタッチします。このポリシーでは自分自身の情報しか取得できないので他のユーザの情報も取得したい場合には”arn:aws:iam::*:user/*”に変更する必要があります。


{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "iam:GetUser",
            "Resource": "arn:aws:iam::*:user/${aws:username}"
        }
    ]
}

ポリシーをアタッチ後に再度”aws iam get-user”コマンドを実行すると自分自身のユーザ情報を取得することができます。


% aws iam get-user
{
    "User": {
        "Path": "/",
        "UserName": "johndoe",
        "UserId": "BIDA5JTZKHG9DD5NS6BLS",
        "Arn": "arn:aws:iam::90000000000:user/johndoe",
        "CreateDate": "2024-02-13T01:32:31+00:00",
        "PasswordLastUsed": "2024-02-13T01:34:56+00:00",
        "Tags": [
            {
                "Key": "BKJA5FTZBHG7UGUYJ7W5",
                "Value": "access key for AWS CLI Test"
            }
        ]
    }
}

EC2インスタンスの起動/停止

ユーザ情報の取得を行うだけの権限を持っているだけなので例えば既存のec2インスタンスを起動しようとしてもAccessDeniedのエラーメッセージが表示されます。エラーのメッセージの中に必要なActionの名前(ec2:StartInstances)が表示されます。


% aws ec2 start-instances --instance-ids i-086452f1f925c671d15

An error occurred (UnauthorizedOperation) when calling the StartInstances operation: You are not authorized to perform this operation. User: arn:aws:iam::9000000000:user/johndoe is not authorized to perform: ec2:StartInstances on resource: 
//略

EC2の管理にはAmazonEC2FullAccessという名前のポリシーがあるのでIAMユーザにAmazonEC2FullAccessがアタッチされている場合には下記のコマンドで停止中のEC2インスタンスを起動することができます。


% aws ec2 start-instances --instance-ids i-086452f1f925c671d15

{
    "StartingInstances": [
        {
            "CurrentState": {
                "Code": 0,
                "Name": "pending"
            },
            "InstanceId": "i-086452f1f925c671d15",
            "PreviousState": {
                "Code": 80,
                "Name": "stopped"
            }
        }
    ]
}

起動したEC2のインスタンスは下記のコマンドで停止させることができます。


% aws ec2 stop-instances --instance-ids i-086452f1f925c671d15

{
    "StoppingInstances": [
        {
            "CurrentState": {
                "Code": 64,
                "Name": "stopping"
            },
            "InstanceId": "i-086452f1f925c671d15",
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        }
    ]
}

このようにコマンドラインでサービスの操作を行うためには適切なポリシーの設定が必要となりますが適切なポリシーが設定されるとコマンドを実行するだけで操作を行うことができるので効率よくAWSのサービスを運用することができます。

コマンドラインのリファレンスはこちらから確認することができます。