AWS CLI(Command Line Interface)は、コマンドラインシェルでコマンドを使用してAWSサービスとやり取りするためのオープンソースツールです。最小限の設定で、コマンドラインからAWSサービスを制御したり、スクリプトを通じてAWSリソースを自動化したりすることができます。AWS CLIを使用すると、AWS Management Consoleで提供されるものと同等の機能にアクセスできます。
AWS CLIには、現在2つの主要バージョンがあります:
バージョン | 特徴 | 推奨される使用場面 |
---|---|---|
AWS CLI バージョン 1 |
|
レガシーシステムやPython 2.7環境での使用 |
AWS CLI バージョン 2 |
|
新規インストールや最新機能が必要な場合(推奨) |
AWS CLIは、主要なオペレーティングシステムにインストールできます。以下は、AWS CLI バージョン2のインストール方法です。
aws --version
curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg"
sudo installer -pkg AWSCLIV2.pkg -target /
aws --version
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
aws --version
AWS CLIを使用するには、AWSアカウントの認証情報を設定する必要があります。以下は、AWS CLIの設定方法です。
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
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
export AWS_DEFAULT_REGION=ap-northeast-1
set AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
set AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
set AWS_DEFAULT_REGION=ap-northeast-1
$env:AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
$env:AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
$env:AWS_DEFAULT_REGION="ap-northeast-1"
AWS CLIの設定は、以下の2つのファイルに保存されます:
[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
[default]
region = ap-northeast-1
output = json
[profile produser]
region = us-west-2
output = text
AWS CLIのコマンド構造は、一般的に以下の形式に従います:
aws <サービス> <コマンド> <サブコマンド> [オプション] [引数]
aws s3 ls
aws ec2 describe-instances
aws ec2 describe-instances --instance-ids i-1234567890abcdef0
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形式の出力(デフォルト) |
|
text | タブ区切りのテキスト形式 |
|
table | テーブル形式(人間が読みやすい) |
|
AWS CLIでは、出力をフィルタリングするための2つの主要な方法があります:
多くのAWSサービスは、--filterパラメータを使用したサーバーサイドフィルタリングをサポートしています:
aws ec2 describe-instances \
--filters "Name=instance-type,Values=t2.micro" "Name=instance-state-name,Values=running"
--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]"
--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では、--cliコマンドを使用して自動プロンプトを有効にできます:
aws ec2 run-instances --cli-auto-prompt
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リソースの管理を自動化できます。
#!/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
#!/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
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
問題 | 解決策 |
---|---|
認証情報エラー |
|
コマンドが見つからない |
|
リージョンエラー |
|
パラメータエラー |
|
タイムアウトエラー |
|
--debugオプションを使用すると、詳細なデバッグ情報が表示されます:
aws s3 ls --debug
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リソースを管理できます。