日々のリソース管理に必須のAWS CLIコマンドトップ10

日々のS3、EC2、IAMの確認、転送、インスタンス操作、権限レビューに便利なAWS CLIチートシートです。

日常リソース管理に必須のAWS CLIコマンド トップ10

AWS CLIは、日々の運用上の質問に答える最も迅速な方法です。どのEC2インスタンスが稼働しているか、S3プレフィックスで何が変更されたか、どのポリシーがユーザーにアタッチされているかなど。コンソールも便利ですが、CLIはランブックやスクリプトに貼り付け可能な再利用可能なコマンドを提供します。

このAWS CLIチートシートは、日常的なチェックやトラブルシューティングで使用する可能性が高い、実用的なS3、EC2、IAMコマンドに焦点を当てています。

前提条件

始める前に、システムにAWS CLIがインストールされ、設定されていることを確認してください。まだの場合は、公式のAWSドキュメントに従ってインストールし、認証情報(アクセスキーID、シークレットアクセスキー、デフォルトリージョン)を設定してください。

# AWS CLIのバージョンを確認
aws --version

# AWS CLIをまだ設定していない場合は設定
aws configure

Amazon S3のための必須AWS CLIコマンド

これらのコマンドを使用して、バケットの検査、オブジェクトの移動、転送前の変更のプレビューを行います。

1. aws s3 ls - S3バケットとオブジェクトの一覧表示

このコマンドは、S3バケットまたは特定のバケット内のオブジェクトを一覧表示します。ストレージ環境を把握するための最初のステップとしてよく使用されます。

目的: S3バケットまたはバケットの内容を表示します。

例:

# アカウント内のすべてのS3バケットを一覧表示
aws s3 ls

# 特定のバケット内のオブジェクトを一覧表示
aws s3 ls s3://your-bucket-name/

# オブジェクトを再帰的に一覧表示(人間が読みやすいサイズと日付で)
aws s3 ls s3://your-bucket-name/ --recursive --human-readable --summarize

ヒント:

  • --recursiveを使用して、プレフィックス下のすべてのオブジェクトを一覧表示します。S3には実際のフォルダはなく、プレフィックスがありますが、CLIはフォルダのように表示します。--summarizeは合計数とサイズを提供します。
  • バケット内のパスを指定することもできます: aws s3 ls s3://your-bucket-name/prefix/

2. aws s3 cp - S3との間でファイルをコピー

cpコマンドは、ローカルファイルシステムとS3の間、またはS3バケット間でのファイル転送に基本的なコマンドです。

目的: ローカルファイルをS3に、S3オブジェクトをローカルに、またはS3バケット間でオブジェクトをコピーします。

例:

# ローカルファイルをS3バケットにコピー
aws s3 cp local-file.txt s3://your-bucket-name/folder/remote-file.txt

# S3からローカルマシンにオブジェクトをコピー
aws s3 cp s3://your-bucket-name/folder/remote-file.txt local-copy.txt

# あるS3バケットから別のS3バケットにオブジェクトをコピー
aws s3 cp s3://source-bucket/file.txt s3://destination-bucket/new-file.txt

# ローカルディレクトリをS3に再帰的にコピー
aws s3 cp --recursive local-folder/ s3://your-bucket-name/remote-folder/

ヒント:

  • --recursiveはディレクトリ全体をコピーする際に重要です。
  • --exclude--includeを使用して、再帰コピー中のファイルをフィルタリングできます。

3. aws s3 sync - ローカルディレクトリとS3を同期

syncは強力なコマンドで、ディレクトリの内容をS3プレフィックスと同期させたり、その逆を行います。新規または変更されたファイルのみをコピーするため、バックアップやデプロイに非常に効率的です。

目的: ローカルディレクトリとS3バケット/プレフィックスを効率的に同期します。

例:

# ローカルディレクトリをS3バケットと同期
aws s3 sync local-directory/ s3://your-bucket-name/remote-path/

# S3バケットをローカルディレクトリと同期
aws s3 sync s3://your-bucket-name/remote-path/ local-directory/

# 実際に実行せずに変更をプレビューするドライラン
aws s3 sync local-directory/ s3://your-bucket-name/remote-path/ --dryrun

ベストプラクティス: 特に重要なデータの場合、sync操作を実行する前に、常に--dryrunを使用して変更をプレビューしてください。

4. aws s3 rm - S3オブジェクトとバケットの削除

このコマンドは、S3バケットからオブジェクトを削除したり、空のバケットを削除するために使用します。

目的: S3からオブジェクトまたは空のバケットを削除します。

例:

# バケットから単一のオブジェクトを削除
aws s3 rm s3://your-bucket-name/path/to/object.txt

# フォルダ(プレフィックス)内のすべてのオブジェクトを再帰的に削除
aws s3 rm s3://your-bucket-name/folder/ --recursive

# 空のバケットを削除
aws s3 rb s3://your-bucket-name/

# バケットとそのすべての内容を強制的に削除(非常に注意して使用)
aws s3 rb s3://your-bucket-name/ --force

警告: aws s3 rb --forceは破壊的です。バケットを削除する前にオブジェクトを削除しますが、バージョニングされたバケットでは、削除前に低レベルのS3 APIコマンドでバージョンのクリーンアップが必要な場合があります。

Amazon EC2(Elastic Compute Cloud)のための必須AWS CLIコマンド

EC2はAWSクラウドでスケーラブルなコンピューティング能力を提供します。これらのコマンドは仮想サーバーの管理に役立ちます。

5. aws ec2 describe-instances - EC2インスタンスの詳細を取得

これは、EC2インスタンスに関する情報(状態、パブリック/プライベートIP、タグなど)を収集するための主要なコマンドです。

目的: 1つ以上のEC2インスタンスに関する詳細情報を取得します。

例:

# 現在のリージョンのすべてのEC2インスタンスを記述
aws ec2 describe-instances

# 特定のタグを持つインスタンスを記述(例: Environment=Production)
aws ec2 describe-instances \
    --filters "Name=tag:Environment,Values=Production"

# インスタンスIDでインスタンスを記述
aws ec2 describe-instances --instance-ids i-0abcdef1234567890

# JMESPathを使用して特定の情報をフィルタリングして記述(例: PublicIpAddress)
aws ec2 describe-instances \
    --query "Reservations[*].Instances[*].{InstanceId:InstanceId,PublicIp:PublicIpAddress,State:State.Name}" \
    --output table

ヒント:

  • --filtersは、インスタンスの状態、タグ、インスタンスタイプなどに基づいて結果を絞り込むのに強力です。
  • --queryを使用すると、特定のデータフィールドを抽出し、出力を再フォーマットできます(例: JMESPath式を使用)。

6. aws ec2 start-instances - 停止したEC2インスタンスを起動

このコマンドは、停止した1つ以上のEC2インスタンスを起動するために使用します。インスタンスは通常、プライベートIPv4アドレスを保持しますが、パブリックIPv4アドレスはElastic IPアドレスを使用しない限り変更される可能性があります。

目的: 停止したEC2インスタンスの起動プロセスを開始します。

例:

# 単一のEC2インスタンスを起動
aws ec2 start-instances --instance-ids i-0abcdef1234567890

# 複数のEC2インスタンスを起動
aws ec2 start-instances --instance-ids i-0abcdef1234567890 i-0fedcba9876543210

7. aws ec2 stop-instances - 実行中のEC2インスタンスを停止

このコマンドは、実行中のEC2インスタンスを停止します。ほとんどのEBS-backedインスタンスでは、インスタンスが停止している間はインスタンス時間の課金が停止しますが、アタッチされたEBSボリューム、Elastic IPアドレス、スナップショット、および一部の関連リソースには引き続き料金が発生する可能性があります。

目的: 実行中のEC2インスタンスを停止します。

例:

# 単一のEC2インスタンスを停止
aws ec2 stop-instances --instance-ids i-0abcdef1234567890

# 複数のEC2インスタンスを停止
aws ec2 stop-instances --instance-ids i-0abcdef1234567890 i-0fedcba9876543210

# インスタンスを強制停止(本番システムでは注意して使用)
aws ec2 stop-instances --instance-ids i-0abcdef1234567890 --force

警告: インスタンスを強制停止すると、アプリケーションが正常にシャットダウンされない場合、データ損失やファイルシステムの破損が発生する可能性があります。

8. aws ec2 terminate-instances - EC2インスタンスを終了

インスタンスを終了すると、インスタンスが完全に削除されます。アタッチされたEBSボリュームは、DeleteOnTermination設定が有効になっている場合にのみ削除されます。

目的: EC2インスタンスを完全に削除します。

例:

# 単一のEC2インスタンスを終了
aws ec2 terminate-instances --instance-ids i-0abcdef1234567890

# 複数のEC2インスタンスを終了
aws ec2 terminate-instances --instance-ids i-0abcdef1234567890 i-0fedcba9876543210

警告: 終了は永続的で元に戻せない操作です。インスタンスを終了する前に、重要なデータのバックアップまたはスナップショットがあることを確認してください。

IAM(Identity and Access Management)のための必須AWS CLIコマンド

IAMを使用すると、AWSサービスとリソースへのアクセスを安全に制御できます。これらのコマンドは、ユーザーとその権限の管理に役立ちます。

9. aws iam list-users - IAMユーザーの一覧表示

このコマンドは、AWSアカウント内のすべてのIAMユーザーのリストを、ARN、作成日、ユーザーIDとともに提供します。

目的: AWSアカウントに設定されているすべてのIAMユーザーを表示します。

例:

# すべてのIAMユーザーを一覧表示
aws iam list-users

# JMESPathを使用して特定のフィールドを抽出してユーザーを一覧表示
aws iam list-users --query "Users[*].{UserName:UserName,CreateDate:CreateDate,Arn:Arn}" --output table

ベストプラクティス: IAMユーザーリストを定期的に確認し、必要なユーザーのみが存在し、古い未使用のアカウントが削除されていることを確認してください。

10. aws iam list-attached-user-policies - IAMユーザーにアタッチされたポリシーの一覧表示

IAMユーザーが持つ権限を理解することは、セキュリティとアクセス問題のトラブルシューティングにとって重要です。このコマンドは、特定のユーザーに直接アタッチされた管理ポリシーを一覧表示します。

目的: IAMユーザーにアタッチされた管理ポリシーを表示します。

例:

# 特定のIAMユーザーにアタッチされたすべての管理ポリシーを一覧表示
aws iam list-attached-user-policies --user-name YourIAMUserName

# 特定のIAMユーザーにアタッチされたインラインポリシーを一覧表示
aws iam list-user-policies --user-name YourIAMUserName

ヒント:

  • IAMユーザーは、アタッチされた管理ポリシー、インラインポリシー、およびグループメンバーシップから権限を受け取ることができることに注意してください。ロールは別のIAM IDであり、ユーザーがロールを引き受けることを許可されていない限り、ユーザーはロールの権限を継承しません。
  • 特定のポリシーの詳細を取得するには、aws iam get-policy --policy-arn arn:aws:iam::aws:policy/AmazonS3FullAccessを使用し、次にaws iam get-policy-versionを使用します。

まとめ

aws s3 lsaws ec2 describe-instancesaws iam list-usersなどの読み取り専用コマンドから始めてください。アカウント、リージョン、プロファイル、ターゲットリソースIDを確認した後でのみ、syncstop-instancesterminate-instancesなどの書き込みアクションを追加してください。