AWSに戻る

AWS CLI (Command Line Interface)

AWS CLIとは

AWS CLI(Command Line Interface)は、コマンドラインシェルでコマンドを使用してAWSサービスとやり取りするためのオープンソースツールです。最小限の設定で、コマンドラインからAWSサービスを制御したり、スクリプトを通じてAWSリソースを自動化したりすることができます。AWS CLIを使用すると、AWS Management Consoleで提供されるものと同等の機能にアクセスできます。

AWS CLIの主な特徴

AWS CLIのバージョン

AWS CLIには、現在2つの主要バージョンがあります:

バージョン 特徴 推奨される使用場面
AWS CLI バージョン 1
  • Python 2.7以上で動作
  • pip、パッケージマネージャー、インストーラーでインストール可能
  • 広範なドキュメントとコミュニティサポート
レガシーシステムやPython 2.7環境での使用
AWS CLI バージョン 2
  • インストーラーのみでインストール(依存関係が含まれる)
  • 改善されたパフォーマンスとユーザビリティ
  • 新機能(自動プロンプト、AWS IAM Identity Centerとの統合など)
  • セキュリティの強化
新規インストールや最新機能が必要な場合(推奨)

AWS CLIバージョン2の主な改善点

AWS CLIのインストール

AWS CLIは、主要なオペレーティングシステムにインストールできます。以下は、AWS CLI バージョン2のインストール方法です。

Windows

インストール手順

  1. AWS CLI MSIインストーラーをダウンロード:
  2. ダウンロードしたMSIインストーラーを実行
  3. インストールウィザードの指示に従う
  4. インストールを確認:
    aws --version

macOS

インストール手順

  1. macOSのインストーラーをダウンロード:
    curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
  2. インストーラーを実行:
    sudo installer -pkg AWSCLIV2.pkg -target /
  3. インストールを確認:
    aws --version

Linux

インストール手順

  1. インストーラーをダウンロード:
    curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
  2. ファイルを解凍:
    unzip awscliv2.zip
  3. インストールスクリプトを実行:
    sudo ./aws/install
  4. インストールを確認:
    aws --version

AWS CLIの設定

AWS CLIを使用するには、AWSアカウントの認証情報を設定する必要があります。以下は、AWS CLIの設定方法です。

認証情報の設定

aws configureコマンドを使用した設定

aws configure

プロンプトに従って、以下の情報を入力します:

AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: ap-northeast-1
Default output format [None]: json

複数のプロファイルの設定

名前付きプロファイルの作成

aws configure --profile produser

プロンプトに従って、プロファイル固有の認証情報を入力します。

名前付きプロファイルの使用

aws s3 ls --profile produser

環境変数を使用した設定

Linux/macOS

export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION=ap-northeast-1

Windows (Command Prompt)

set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
set AWS_DEFAULT_REGION=ap-northeast-1

Windows (PowerShell)

$env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
$env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
$env:AWS_DEFAULT_REGION="ap-northeast-1"

設定ファイル

AWS CLIの設定は、以下の2つのファイルに保存されます:

credentialsファイルの例

[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[produser]
aws_access_key_id = AKIAI44QH8DHBEXAMPLE
aws_secret_access_key = je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY

configファイルの例

[default]
region = ap-northeast-1
output = json

[profile produser]
region = us-west-2
output = text

AWS CLIの基本的な使用方法

AWS CLIのコマンド構造は、一般的に以下の形式に従います:

aws <サービス> <コマンド> <サブコマンド> [オプション] [引数]

基本的なコマンド例

S3バケットの一覧表示

aws s3 ls

EC2インスタンスの一覧表示

aws ec2 describe-instances

特定のEC2インスタンスの詳細表示

aws ec2 describe-instances --instance-ids i-1234567890abcdef0

新しいEC2インスタンスの起動

aws ec2 run-instances \
    --image-id ami-0abcdef1234567890 \
    --instance-type t2.micro \
    --key-name MyKeyPair \
    --security-group-ids sg-0123456789abcdef0 \
    --subnet-id subnet-0123456789abcdef0

出力形式

AWS CLIは、以下の出力形式をサポートしています:

形式 説明
json JSON形式の出力(デフォルト)
aws ec2 describe-instances --output json
text タブ区切りのテキスト形式
aws ec2 describe-instances --output text
table テーブル形式(人間が読みやすい)
aws ec2 describe-instances --output table

フィルタリング

AWS CLIでは、出力をフィルタリングするための2つの主要な方法があります:

サーバーサイドフィルタリング

多くのAWSサービスは、--filterパラメータを使用したサーバーサイドフィルタリングをサポートしています:

aws ec2 describe-instances \
    --filters "Name=instance-type,Values=t2.micro" "Name=instance-state-name,Values=running"

クライアントサイドフィルタリング(JMESPath)

--queryパラメータを使用して、JMESPath式で出力をフィルタリングできます:

aws ec2 describe-instances \
    --query "Reservations[*].Instances[*].[InstanceId,InstanceType,State.Name]"

特定の条件に一致するインスタンスのみをフィルタリング:

aws ec2 describe-instances \
    --query "Reservations[*].Instances[?InstanceType=='t2.micro'].[InstanceId,State.Name]"

AWS CLIの高度な機能

ドライランモード

--dry-runオプションを使用すると、実際にリソースを変更せずにコマンドをテストできます:

aws ec2 stop-instances --instance-ids i-1234567890abcdef0 --dry-run

ページネーション

大量のデータを扱う場合、AWS CLIは自動的にページネーションを行います。手動でページネーションを制御するには:

aws s3api list-objects \
    --bucket my-bucket \
    --max-items 100 \
    --starting-token eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxfQ==

ウェイター

ウェイターを使用すると、特定の状態になるまで待機できます:

aws ec2 wait instance-running --instance-ids i-1234567890abcdef0

自動プロンプト(AWS CLI v2)

AWS CLI v2では、--cliコマンドを使用して自動プロンプトを有効にできます:

aws ec2 run-instances --cli-auto-prompt

S3コマンド

AWS CLIには、S3バケットとオブジェクトを操作するための高レベルコマンドが用意されています:

ファイルのアップロード

aws s3 cp myfile.txt s3://my-bucket/

ディレクトリの同期

aws s3 sync my-local-directory s3://my-bucket/my-directory

バケット内のすべてのオブジェクトを削除

aws s3 rm s3://my-bucket --recursive

AWS CLIのスクリプティングと自動化

AWS CLIは、シェルスクリプトやバッチファイルで使用して、AWSリソースの管理を自動化できます。

シェルスクリプトの例

すべての停止中のEC2インスタンスを起動するスクリプト

#!/bin/bash
# 停止中のインスタンスIDを取得
instance_ids=$(aws ec2 describe-instances \
    --filters "Name=instance-state-name,Values=stopped" \
    --query "Reservations[*].Instances[*].InstanceId" \
    --output text)

# 各インスタンスを起動
for id in $instance_ids; do
    echo "Starting instance $id"
    aws ec2 start-instances --instance-ids $id
done

特定のタグを持つEC2インスタンスをバックアップするスクリプト

#!/bin/bash
# Backup タグが true のインスタンスを検索
instance_ids=$(aws ec2 describe-instances \
    --filters "Name=tag:Backup,Values=true" "Name=instance-state-name,Values=running" \
    --query "Reservations[*].Instances[*].InstanceId" \
    --output text)

# 現在の日時
timestamp=$(date +%Y-%m-%d-%H-%M)

# 各インスタンスのスナップショットを作成
for id in $instance_ids; do
    # インスタンスに接続されているボリュームを取得
    volume_ids=$(aws ec2 describe-instances \
        --instance-ids $id \
        --query "Reservations[*].Instances[*].BlockDeviceMappings[*].Ebs.VolumeId" \
        --output text)
    
    # 各ボリュームのスナップショットを作成
    for vol_id in $volume_ids; do
        echo "Creating snapshot of volume $vol_id for instance $id"
        aws ec2 create-snapshot \
            --volume-id $vol_id \
            --description "Backup $timestamp for instance $id" \
            --tag-specifications "ResourceType=snapshot,Tags=[{Key=InstanceId,Value=$id},{Key=CreatedBy,Value=AutomatedBackup},{Key=Timestamp,Value=$timestamp}]"
    done
done

AWS CLIとJSONの使用

JSONファイルを使用したEC2インスタンスの起動

ec2-instance-params.json:

{
  "ImageId": "ami-0abcdef1234567890",
  "InstanceType": "t2.micro",
  "KeyName": "MyKeyPair",
  "SecurityGroupIds": ["sg-0123456789abcdef0"],
  "SubnetId": "subnet-0123456789abcdef0",
  "TagSpecifications": [
    {
      "ResourceType": "instance",
      "Tags": [
        {
          "Key": "Name",
          "Value": "MyInstance"
        },
        {
          "Key": "Environment",
          "Value": "Development"
        }
      ]
    }
  ]
}

コマンド:

aws ec2 run-instances --cli-input-json file://ec2-instance-params.json

AWS CLIのセキュリティのベストプラクティス

AWS CLIのトラブルシューティング

一般的な問題と解決策

問題 解決策
認証情報エラー
  • aws configureで認証情報が正しく設定されているか確認
  • 環境変数が正しく設定されているか確認
  • IAMユーザーに必要な権限があるか確認
コマンドが見つからない
  • AWS CLIが正しくインストールされているか確認
  • PATHにAWS CLIのインストールディレクトリが含まれているか確認
  • aws --versionでインストールを確認
リージョンエラー
  • --regionオプションでリージョンを指定
  • AWS_DEFAULT_REGION環境変数を設定
  • aws configureでデフォルトリージョンを設定
パラメータエラー
  • aws help <サービス> <コマンド>でコマンドのヘルプを表示
  • パラメータの形式が正しいか確認
  • 必須パラメータがすべて指定されているか確認
タイムアウトエラー
  • ネットワーク接続を確認
  • --cli-connect-timeoutと--cli-read-timeoutオプションを使用してタイムアウト値を増やす

デバッグモード

--debugオプションを使用すると、詳細なデバッグ情報が表示されます:

aws s3 ls --debug

AWS CLIとの統合サービス

AWS CLIは、他のツールやサービスと統合して、より強力な自動化ソリューションを構築できます:

ツール/サービス 統合の利点
AWS CloudFormation CLIを使用してCloudFormationスタックを作成、更新、削除
AWS Systems Manager CLIを使用してSystems Managerのオートメーションを実行
AWS Lambda CLIを使用してLambda関数をデプロイと呼び出し
CI/CDパイプライン Jenkins、GitLab CI、GitHub Actionsなどのパイプラインでの自動化
シェルスクリプト 複雑な自動化タスクのためのスクリプト作成
AWS SDKs CLIとSDKを組み合わせた高度なアプリケーション開発

まとめ

AWS CLIは、AWSリソースを管理するための強力なコマンドラインツールです。コマンドラインからAWSサービスを制御したり、スクリプトを通じてAWSリソースを自動化したりすることができます。AWS CLIを使用することで、AWS Management Consoleで提供されるものと同等の機能にアクセスでき、より効率的にAWSリソースを管理できます。

AWS CLIの主な利点は以下の通りです:

AWS CLIを効果的に活用するには、適切な認証情報の設定、セキュリティのベストプラクティスの適用、スクリプトによる自動化の実装が重要です。また、AWS CLIの高度な機能(フィルタリング、ページネーション、ウェイターなど)を活用することで、より効率的にAWSリソースを管理できます。