よく使うコマンド
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 で変更されたファイルだけを送る