mcpField
S
scripting

scripting

github.com/acquiaクラウド・DevOps10126 回インストール今日更新
リポジトリ

scripting について

scriptingは、ShellスクリプトやCI/CDワークフローでAcquia CLI(acli)コマンドを自動化するスキルです。非対話実行、認証、エラー処理、再試行、ログ記録を扱い、Acquia Cloudリソースの管理を支援します。

主な機能

  1. 01非対話型のacliコマンド
  2. 02ShellとCI/CDの自動化
  3. 03APIキー認証
  4. 04エラー処理と再試行パターン
  5. 05ログ記録と通知

活用シーン

  1. 01Acquiaデプロイの定期実行
  2. 02CI/CDパイプラインでのacli実行
  3. 03複数環境のキャッシュ消去

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/acquia/acquia-skills --skill scripting

インストール後、Claude Code で/scriptingを入力して読み込まれたか確認します。

詳細

Acquia CLI によるスクリプト作成と自動化

次の場合に使用します:

  • シェルスクリプトで acli コマンドを自動化する
  • acli を CI/CD パイプラインに統合する
  • acli を非対話形式で実行する

スクリプト、CI/CD パイプライン、自動化ワークフローで acli を使用すると、Acquia Cloud のリソースをプログラムから管理できます。


非対話型コマンド

すべての acli コマンドは、オプションを指定することで非対話形式で実行できます。これはスクリプトや CI/CD に不可欠です。

基本パターン
# Interactive - prompts for missing information
acli ide:create

# Non-interactive - provides all info upfront
acli ide:create \
  --application=abc123 \
  --label="Automated IDE"
よく使うオプション
# No prompts - fails if info is missing
acli <command> --no-interaction

# Don't wait for async operations
acli <command> --no-wait

# Skip confirmations
acli <command> --yes

簡単な自動化の例

例 1:スケジュールに従ってデプロイする
#!/bin/bash
# deploy.sh - Deploy to staging nightly

BRANCH="develop"
ENVIRONMENT="staging"
ENV_ID="<environment-id>"

acli api:environments:code-switch $ENV_ID $BRANCH

# Verify Drupal status
acli remote:drush status

MEO(V3)サブスクリプション: api:environments:code-switch の行を acli api:v3:environments:create-deployment $ENV_ID true $BRANCH に置き換えます( MEO デプロイメントを参照)。同様に、acli remote:drush cr に相当する API ベースのコマンドは、acli api:v3:environments:clear-caches <environmentId> <domains> です(MEO 環境を参照)。

cron で実行します:

# crontab -e
# Deploy every night at 2am
0 2 * * * /path/to/deploy.sh >> /tmp/deploy.log 2>&1
例 2:キャッシュクリアのワークフロー
#!/bin/bash
# cache-clear.sh - Clear caches across environments

set -e  # Exit on any error

acli remote:drush cr
echo "Caches cleared!"

CI/CD の統合

GitHub Actions

main へのプッシュ時にデプロイします:

# .github/workflows/deploy.yml
name: Deploy to Acquia

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: Install acli
        run: |
          curl -fsSL https://github.com/acquia/cli/releases/latest/download/acli \
            -o /usr/local/bin/acli
          chmod +x /usr/local/bin/acli

      - name: Authenticate
        env:
          ACQUIA_KEY: ${{ secrets.ACQUIA_KEY }}
          ACQUIA_SECRET: ${{ secrets.ACQUIA_SECRET }}
        run: |
          mkdir -p ~/.acquia
          cat > ~/.acquia/credentials.json <<EOF
          {
            "acquia-cloud-api": {
              "key": "$ACQUIA_KEY",
              "secret": "$ACQUIA_SECRET"
            }
          }
          EOF

      - name: Deploy to production
        run: |
          acli api:environments:code-switch ${{ vars.ACQUIA_PROD_ENV_ID }} main
GitLab CI/CD
# .gitlab-ci.yml
deploy_production:
  stage: deploy
  image: ubuntu:latest
  before_script:
    - curl -fsSL https://github.com/acquia/cli/releases/latest/download/acli \
        -o /usr/local/bin/acli
    - chmod +x /usr/local/bin/acli
    - mkdir -p ~/.acquia
    - |
      cat > ~/.acquia/credentials.json <<EOF
      {
        "acquia-cloud-api": {
          "key": "$ACQUIA_KEY",
          "secret": "$ACQUIA_SECRET"
        }
      }
      EOF
  script:
    - acli api:environments:code-switch $ACQUIA_PROD_ENV_ID $CI_COMMIT_BRANCH
  only:
    - main

エラー処理

終了コードを確認する
#!/bin/bash

acli ide:create --application=abc123

if [ $? -eq 0 ]; then
    echo "IDE created successfully"
else
    echo "IDE creation failed"
    exit 1
fi
エラーを適切に処理する
#!/bin/bash
set -e  # Exit on first error

trap 'echo "Error occurred on line $LINENO"' ERR

acli api:environments:code-switch $ENV_ID main
echo "Deploy successful!"
再試行ロジック
#!/bin/bash

retry_count=0
max_retries=3

while [ $retry_count -lt $max_retries ]; do
    if acli remote:drush updatedb; then
        echo "Database updates completed"
        exit 0
    fi
    retry_count=$((retry_count + 1))
    if [ $retry_count -lt $max_retries ]; then
        echo "Attempt $retry_count failed. Retrying..."
        sleep 10
    fi
done

echo "Failed after $max_retries attempts"
exit 1

ログ記録と監視

出力をログに記録する
#!/bin/bash

LOGFILE="/var/log/acli-deploy.log"

{
    echo "=== Deploy started at $(date) ==="
    acli api:environments:code-switch $ENV_ID main
    echo "=== Deploy finished at $(date) ==="
} >> $LOGFILE 2>&1
通知を送信する
#!/bin/bash

SLACK_WEBHOOK="$SLACK_WEBHOOK_URL"

send_slack() {
    curl -X POST $SLACK_WEBHOOK \
        -H 'Content-Type: application/json' \
        -d "{
            \"text\": \"Acquia deployment: $1\",
            \"channel\": \"#deployments\"
        }"
}

if acli api:environments:code-switch $ENV_ID main; then
    send_slack "✓ Production deployment successful"
else
    send_slack "✗ Production deployment failed"
    exit 1
fi

応用:API キー認証

サーバー上で自動化する場合は、ブラウザー認証ではなく API キーを使用します。

API 認証情報を生成する

Acquia Cloud UI で:

  1. Settings → API Tokens に移動します
  2. 新しいトークンを生成します
  3. Key と Secret をコピーします
acli で使用する
# Method 1: Environment variables
export ACQUIA_KEY="your-key-here"
export ACQUIA_SECRET="your-secret-here"
acli api:applications:list

# Method 2: Credentials file
mkdir -p ~/.acquia
cat > ~/.acquia/credentials.json <<EOF
{
  "acquia-cloud-api": {
    "key": "your-key-here",
    "secret": "your-secret-here"
  }
}
EOF

acli api:applications:list
認証情報を安全に管理する
# Option 1: AWS Secrets Manager
aws secretsmanager get-secret-value --secret-id acquia-cli-key

# Option 2: HashiCorp Vault
vault kv get secret/acquia/cli-key

# Option 3: GitHub Secrets (for Actions)
# Set ACQUIA_KEY and ACQUIA_SECRET as repository secrets

ベストプラクティス

  1. --no-interaction を使用する — プロンプトによって処理が停止しないように、スクリプトでは必ずこれを指定します。
  2. set -e を使用する — エラーが発生したら直ちに終了し、失敗後も処理が黙って続行されるのを防ぎます。
  3. 認証情報を安全に保存する — 環境変数またはシークレットマネージャーを使用し、ハードコードは決してしないでください。
  4. app:task-wait を使用する — 非同期操作の後は、次の手順に進む前に完了を待ちます。

トラブルシューティング

CI で認証に失敗する

ACLI_NO_INTERACTION 環境変数を設定し、認証情報を明示的に指定します:

export ACLI_NO_INTERACTION=1
export ACLI_KEY=your-api-key
export ACLI_SECRET=your-api-secret
acli api:applications:list
コマンドが入力待ちで停止する

スクリプトでは必ず --no-interaction を指定します:

acli ide:create --application=abc123 --label="CI IDE" --no-interaction
終了コードが正しく伝播されない

スクリプトの先頭で set -e を使用します:

#!/bin/bash
set -e
acli auth:login --no-interaction
acli api:environments:code-switch $ENV_ID main

コメント