コンテンツにスキップ

よく使うコマンド

Terraform

terraform init                              # provider をダウンロード(初回、provider / module を変更したあと)
terraform init "-backend-config=backend.hcl"  # remote state(PS 5.1 では引用符が必要)
terraform fmt                               # フォーマット
terraform validate                          # 構文チェック
terraform plan                              # プレビュー
terraform plan "-out=x.tfplan"              # プレビューして保存
terraform show x.tfplan                     # 保存した plan を表示
terraform apply x.tfplan                    # 保存した plan どおりに実行(確認した内容と完全に一致)
terraform destroy                           # すべて削除
terraform plan -destroy                     # 削除されるリソースをプレビュー

terraform state list                        # state 内のリソース
terraform state show <アドレス>             # 特定リソースの詳細な属性
terraform state pull                        # remote state の内容を出力
terraform output                            # output の値
terraform output -raw <名前>                # sensitive な値も表示できる

terraform -chdir=02-compute plan            # cd せずに別のディレクトリに対して実行
terraform plan "-generate-config-out=generated.tf"  # import 時にコードを自動生成

静的解析

tflint --recursive --config "$PWD\.tflint.hcl"
$env:PYTHONUTF8 = '1'
python -m checkov.main -d . --framework terraform --compact

Cloud Shell

# OKE の kubeconfig(プライベート・エンドポイント)
oci ce cluster create-kubeconfig --cluster-id <OCID> --file $HOME/.kube/config \
  --region ap-osaka-1 --token-version 2.0.0 --kube-endpoint PRIVATE_ENDPOINT

# 要塞(Bastion)のセッション
oci bastion session create-managed-ssh --bastion-id <OCID> --target-resource-id <VM OCID> \
  --target-os-username opc --ssh-public-key-file ~/.ssh/bastion_key.pub --session-ttl 3600 \
  --wait-for-state SUCCEEDED --query 'data.resources[0].identifier' --raw-output

# VM でシークレットを読む(インスタンス・プリンシパル。長さだけを確認し、パスワードは表示しない)
oci secrets secret-bundle get --auth instance_principal --secret-id <Secret OCID> \n  --query 'data."secret-bundle-content".content' --raw-output | base64 -d | wc -c

# Ansible
ansible-playbook site.yml --check --diff    # プレビュー
ansible-playbook site.yml                   # 実行

kubectl

kubectl get nodes -o wide
kubectl get pods -o wide
kubectl get svc <名前> -w                   # EXTERNAL-IP が出るまで待つ
kubectl apply -f x.yaml
kubectl delete -f x.yaml                    # destroy の前に必ず実行(K8s が作った LB を削除)
kubectl scale deployment <名前> --replicas=4
kubectl drain <ノード> --ignore-daemonsets --delete-emptydir-data
kubectl uncordon <ノード>
kubectl rollout restart deployment <名前>

費用

python tools/cost.py             # 直近 7 日、service / SKU ごとに集計
python tools/cost.py --days 30

AWS

aws sso login --profile tflab-aws                    # SSO でサインイン(期限切れ時。ブラウザで「許可」)
aws sts get-caller-identity --profile tflab-aws      # 今の ID を確認
terraform init "-backend-config=backend.hcl"         # S3 backend(PS 5.1 では引用符が必要)

# サイト(AWS 版):DevOps を通さず、ローカル PC から直接アップロード
python tools/upload_site_s3.py --bucket <bucket> --distribution-id <id>   # 値:terraform -chdir=10-aws-site/site output upload_command
# OCI DevOps 用の Access Key のローテーション(90 日ごとを推奨)
python tools/rotate_aws_deploy_key.py --secret-id $(terraform -chdir=07-site output -raw aws_creds_secret_id)

# Route 53 Domains の API は us-east-1 だけ
aws route53domains check-domain-availability --domain-name example.com --region us-east-1 --profile tflab-aws
# 利用中のネットワークで独自ドメインが開けないとき:CloudFront のドメイン + Host ヘッダーで確認
curl -sI https://<xxxx>.cloudfront.net/ -H "Host: www.<ドメイン>"

このサイト

.venv\Scripts\mkdocs serve       # ローカル PC でプレビュー http://127.0.0.1:8000
.venv\Scripts\mkdocs build       # site/ に生成
python tools/check_ja_code.py    # 日本語版に埋め込むコードのコピー(i18n/ja/)が元ファイルと一致しているか確認(コード変更後に実行)

# 公開:OCI DevOps に push → 自動でチェック → ビルド → アップロード(build_spec.yaml)
git push                         # remote = oci、branch = main
# DevOps を通さず、ローカル PC から直接公開
python tools/upload_site.py --dry-run   # アップロード / 削除するファイルを表示するだけ
python tools/upload_site.py             # MD5 で変更されたファイルだけを送る