こんにちは、最近歯医者に行くたびに虫歯が見つかる♯です。
歯医者は定期的に行きましょう…。
AWSを使ったシステムの保守プロジェクトがいわゆる一つの区切りを迎え、
色々情報を整理していたらAWS CLIのコマンドメモがたくさん出てきたので、
コマンドチートシートシリーズ第3回はAWS CLIです。
実際の作業で使っていたコマンドなのですごくニッチですが、誰かのお役に立ったらうれしいです。
aws ec2 describe-instances --output json
そのアカウント・リージョンで起動しているEC2インスタンスの情報がjson形式で全部出てきます。
特定のインスタンスだけ見たい場合はフィルタリングしましょう。
aws ec2 describe-instances --output json --filter "Name=tag:Name,Values=web"\
上記のオプションをつけると、インスタンス名が「web」のものだけを表示できます。
さらに情報を絞り込みたい場合は、queryオプションを使います。
aws ec2 describe-instances --output json --filter "Name=tag:Name,Values=web"\ --query 'Reservations[].Instances[].[InstanceId]'
このqueryオプションは JMESPath を使っています。
コマンド実行しているサーバにjqコマンドが入っていれば、jqでもフィルタリングができます。
aws ec2 describe-instances --output json --filter "Name=tag:Name,Values=web" |jq -r '.Reservations[].Instances[].InstanceId'
力尽きたので以降はざっくり情報だけです。
詳細はAWS CLI Command Referenceを確認してください。
インスタンスの起動もCLIを使えばコマンド一発で実行できます。
aws ec2 run-instances --image-id <AMI ID>\ --instance-type <インスタンスタイプ>\ --key-name <キーペア名>\ --security-group-ids <セキュリティグループID>\ --subnet-id <サブネットID>\ --iam-instance-profile "Name=<IAMロール名>"\ --tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=<インスタンス名>}]'\ 'ResourceType=volume,Tags=[{Key=Name,Value=<インスタンス名>}]'
他にもオプションがありますが、上記が必要最低限なのではないかと思います。
aws ec2 create-security-group --description "allow SSH from bitstar" --group-name "fromBitstar" --vpc-id <VPC ID>
上のコマンドでセキュリティグループを作ったらルールを追加しましょう。
セキュリティグループIDは作成時のコマンド実行結果から拾います。
aws ec2 authorize-security-group-ingress --group-id <セキュリティグループID>\ --ip-permissions '[{"FromPort": 80, "ToPort": 80, "IpProtocol": "tcp", "IpRanges": [{"CidrIp": "1.2.3.4/32", "Description": "bitstar"}]}]'\
IpRangesはカンマ区切りで複数指定できます。
s3コマンドはオブジェクトの操作、S3自体の操作はs3apiを使うようです。
aws s3api create-bucket --bucket "hogehogefugafuga" --create-bucket-configuration LocationConstraint=ap-northeast-1
aws rds describe-db-instances |jq -r '.DBInstances[].DBInstanceArn'
aws rds list-tags-for-resource --resource-name <ARN>
aws --profile s-hata rds add-tags-to-resource\ --tags Key=env,Value=production Key=service,Value=web\ --resource-name <ARN>
aws --profile s-hata rds modify-db-instance\ --db-instance-identifier <RDSインスタンス名>\ --db-instance-class <インスタンスクラス>\ --apply-immediately
aws cloudfront get-distribution --id <CloudFrontのID> | jq -r ".Distribution | { DistributionConfig: .DistributionConfig } | .DistributionConfig.CallerReference = `date '+%s'`" > cloudfront.json
aws cloudfront create-distribution --cli-input-json file://cloudfront.json
なんでこんなことをするかって?
本番環境用に作ったディストリビューションと全く同じものをステージング環境用に作りたくなったりするからです。
aws autoscaling describe-auto-scaling-instances --query 'AutoScalingInstances[].InstanceId'
aws autoscaling describe-auto-scaling-instances\ --query 'AutoScalingInstances[?AutoScalingGroupName==`<AutoScalingグループ名>`].[InstanceId,LaunchConfigurationName]'\ --output text
ヘルスステータスをunhealthyに変更すると、インスタンスの入替えが発生します。
aws autoscaling set-instance-health --instance-id <インスタンスID> --health-status Unhealthy
aws autoscaling put-lifecycle-hook\ --lifecycle-hook-name <ライフサイクルフック名>\ --auto-scaling-group-name <AutoScalingグループ名>\ --notification-target-arn <SNSのARN>\ --role-arn <IAMロールのARN>
aws autoscaling describe-lifecycle-hooks\ --auto-scaling-group-name <AutoScalingグループ名>\ --lifecycle-hook-names <ライフサイクルフック名>
aws autoscaling update-auto-scaling-group\ --auto-scaling-group-name <AutoScalingグループ名>\ --desired-capacity <台数> --min-size <台数> --max-size <台数>
aws autoscaling describe-auto-scaling-groups --query "AutoScalingGroups[].[AutoScalingGroupName,LaunchConfigurationName]"
これだけあれば1つくらい誰かの役に立つコマンドがあるでしょう…。
最後に昨年のクリスマスに撮ったクラリネット族楽器大集合写真を載せて終わります。
またお会いしましょう。
♯