AI 에이전트의 지연, 오류, 토큰 사용량, 안전성, 보안, 응답 품질을 감시하는 Terraform 알림 파일을 만듭니다. 원격 측정 데이터와 기존 정책을 먼저 확인하고 설정을 검증하며, 품질 알림에는 Vertex AI가 필요합니다.
- 에이전트 지연과 오류율 모니터링
- 토큰 사용량 급증 알림
- 안전성 신호와 권한 거부 추적
REST API 또는 Python discovery client로 Google Cloud Application Integration 워크플로를 만들고 관리합니다. 버전 목록과 JSON 내보내기, 트리거 및 환경 값 설정, 초안 게시와 호출, 프로젝트 간 버전 승격을 지원합니다.
Builds, versions, publishes, tests, and executes Google Cloud Application Integration workflows through the REST API and Python discovery client, and promotes versions across environments. Use when listing integrations, downloading or uploading integration versions as JSON, configuring API triggers or config variables, publishing drafts, invoking integrations, or automating CI/CD promotion. Do not use for initial region provisioning and IAM setup (use application-integration-basics) or diagnosing failed runs and logs (use application-integration-troubleshooting).
실행 점수 미검증
설치 방법 보기REST API 또는 Python discovery client를 통해 Google Cloud Application Integration 워크플로를 다룹니다. 기존 통합과 버전을 나열하고, 버전을 JSON으로 다운로드하거나 JSON을 업로드해 새 초안을 만들 수 있습니다. API 트리거, 입력·출력 변수, 환경별 설정값을 준비하고 초안을 게시해 통합을 호출하는 과정도 지원합니다. 다른 프로젝트로 버전을 옮길 때는 다운로드, 업로드, 게시 단계를 안내합니다.
콘솔 대신 API로 통합을 관리하거나, 설정을 JSON으로 소스 관리하거나, 개발 프로젝트에서 운영 프로젝트로 버전을 옮길 때 사용할 수 있습니다. 초기 리전 설정과 실패한 실행 조사에는 사용하지 않습니다.
Google Cloud 프로젝트, 대상 리전, 인증, 필수 API와 IAM 권한이 필요합니다. 상태 변경이나 통합 실행, 패키지 설치, gcloud 설정 변경 전에 정확한 명령과 내용을 제시하고 사용자 확인을 받습니다. 인증 정보를 설정 변수에 저장하지 마세요.
이 소개문은 공개된 SKILL.md를 바탕으로 AI(OpenAI Codex)가 작성했습니다. 정확한 사양은 아래 원문을 확인하세요.
AI가 SKILL.md의 내용에서 주의가 필요한 작업과 도입 전제를 확인했습니다. 점수는 실제로 실행한 결과(실행 검증)만으로 매깁니다.
점수에는 넣지 않았습니다. 2026년 10월 28일 기준으로 AI(OpenAI Codex)가 판정했습니다. 참고용이므로 설치 전에 원문도 확인해 주세요.
설치하기 전에 에이전트에게 전달되는 지시 내용을 확인할 수 있습니다.
Google Cloud Application Integration workflows are authored, versioned, published, and executed programmatically through the REST API (https://integrations.googleapis.com/v1/...) or the discovery-based Google API Python client (googleapiclient.discovery.build("integrations", "v1")).
There is no gcloud integrations command group, no Google-managed MCP server for Application Integration, and no documented Terraform resource for integrations or versions. Use gcloud only for authentication, enabling APIs, and IAM bindings. Use Terraform only for region provisioning (google_integrations_client), authentication profiles (google_integrations_auth_config), and Integration Connectors (google_integration_connectors_connection).
For initial project setup, region provisioning, and IAM role definitions, use the application-integration-basics skill. For diagnosing failed or stuck runs, execution logs, and quota errors, use the application-integration-troubleshooting skill.
MUST READ: Before executing any gcloud command, REST API call, or Python
discovery-client call, you MUST read
Usage Attribution. For commands executed directly
in the terminal (never in generated scripts, Terraform, ADK agents, or user
code), prefix gcloud with
CLOUDSDK_METRICS_REQUEST_ATTRIBUTION="agent-skills/1.0 (skill:application-integration-authoring)"
and add agent-skills/1.0 (skill:application-integration-authoring) to the
User-Agent header of curl requests.
integrations.list, integrations:search, versions.list, versions.get, versions:download, authConfigs.list, and executions.list.pip install) or changing global gcloud or credential state (gcloud config set ... such as auth/impersonate_service_account, gcloud auth application-default login / set-quota-project), show the exact command and wait for the user's approval.CONFIG_*) are stored and exported in plain text. Always use authentication profiles (projects.locations.authConfigs) or the Secret Manager access task for credentials.gcloud is not installed.gcloud config set project PROJECT_ID
gcloud services enable integrations.googleapis.com connectors.googleapis.com secretmanager.googleapis.com
us-central1 as a well-supported default when the user has no preference. The region is the LOCATION in every REST path; no gcloud default-region setting applies to Application Integration. The target LOCATION must be provisioned via the Cloud console or POST .../clients:provision before authoring integrations (see application-integration-basics).curl: run gcloud auth login (changes host or credential state; get the user's approval first) and pass -H "Authorization: Bearer $(gcloud auth print-access-token)".pip install "google-api-python-client>=2.100.0,<3" "google-auth>=2.20.0,<3"): run gcloud auth application-default login and gcloud auth application-default set-quota-project PROJECT_ID (or set GOOGLE_APPLICATION_CREDENTIALS for a service account) (changes host or credential state; get the user's approval first).gcloud config set auth/impersonate_service_account SA_EMAIL (requires roles/iam.serviceAccountTokenCreator) (changes host or credential state; get the user's approval first).roles/integrations.integrationEditor (covers versions:upload, which needs integrations.integrationVersions.create, and versions:publish)roles/integrations.integrationDeployer or roles/integrations.integrationEditor (roles/integrations.integrationDeployer alone can publish an existing version but cannot upload via versions:upload), plus roles/integrations.serviceAgent granted to the Application Integration service agent (service-PROJECT_NUMBER@gcp-sa-integrations.iam.gserviceaccount.com)roles/integrations.integrationInvokerrunAsServiceAccount) cannot be tested or published unless runAsServiceAccount is set (and region governance requires it for all integrations); whenever runAsServiceAccount is set, the user publishing or testing the version needs roles/iam.serviceAccountUser on it (and at runtime, the invoking caller or trigger service account needs roles/iam.serviceAccountUser on it).| Goal | Action | Endpoint / Method |
|---|---|---|
| Inspect existing integrations in a region | List integrations, then list versions | GET .../integrations then GET .../versions |
| Export an integration version to source control | Download version JSON | GET .../versions/VERSION_ID:download?fileFormat=JSON |
Create an integration or add a new DRAFT version from JSON | Upload version JSON (creates the integration if it does not exist, or adds a new DRAFT version; still needs :publish) | POST .../integrations/INTEGRATION_NAME/versions:upload |
| Create a brand-new integration and fail on a name clash | Create first DRAFT version with newIntegration=true (returns ALREADY_EXISTS if INTEGRATION_NAME already exists) | POST .../integrations/INTEGRATION_NAME/versions?newIntegration=true |
Edit an existing DRAFT version | Check lockHolder, then patch or upload | PATCH .../versions/VERSION_ID?updateMask=... |
Edit an ACTIVE (published) integration | Upload or create a new DRAFT version | POST .../integrations/INTEGRATION_NAME/versions:upload |
| Externalize environment-specific URLs or IDs | Define CONFIG_<NAME> and supply at publish | integrationConfigParameters + versions:publish |
| Store API keys, OAuth credentials, or certs | Create an authentication profile | POST .../authConfigs |
| Test an integration before production | Publish to a non-production project and invoke :execute | POST .../versions/VERSION_ID:publish then POST .../integrations/INTEGRATION_NAME:execute |
Deploy a DRAFT to serve live traffic | Publish version with configParameters | POST .../versions/VERSION_ID:publish |
| Invoke a published integration synchronously | Call :execute with api_trigger/TRIGGER_NAME | POST .../integrations/INTEGRATION_NAME:execute |
| Invoke a published integration asynchronously | Call :schedule with scheduleTime | POST .../integrations/INTEGRATION_NAME:schedule |
| Promote a version across projects (CI/CD) | Download JSON -> Upload to target -> Publish | :download -> :upload -> :publish |
See references/rest-api-cheatsheet.md for full request parameters, query filters, and IAM permissions for each method.
List integrations in LOCATION and list versions for a specific INTEGRATION_NAME:
TOKEN="$(gcloud auth print-access-token)"
# List integrations in the region
curl -sS -H "Authorization: Bearer ${TOKEN}" \
"https://integrations.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/integrations?pageSize=50"
# List versions (ordered by most recently modified)
curl -sS -H "Authorization: Bearer ${TOKEN}" \
"https://integrations.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/integrations/INTEGRATION_NAME/versions?orderBy=last_modified_time%20desc"
Download a specific version (VERSION_ID is the UUID at the end of the version's name field) as portable JSON:
curl -sS -H "Authorization: Bearer ${TOKEN}" \
"https://integrations.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/integrations/INTEGRATION_NAME/versions/VERSION_ID:download?fileFormat=JSON" \
| jq -r '.content' > integration-version.json
IntegrationVersion StructureAn IntegrationVersion JSON object contains four primary arrays and version-level settings:
triggerConfigs: Entry points that start the workflow. Each entry requires a unique triggerNumber, plus triggerType (such as API or PRIVATE_TRIGGER), optional triggerId (auto-generated from properties if omitted; for API triggers: api_trigger/TRIGGER_NAME), and startTasks pointing to the first taskId.taskConfigs: Units of work. Each entry needs task (the task type, such as EmailTask in the public upload sample, or FieldMappingTask in a discovery enum description), a unique taskId, parameters, nextTasks, and optional failurePolicy or errorCatcherId.integrationParameters: Input, output, and transient variables (key, dataType such as STRING_VALUE or JSON_VALUE, inputOutputType of IN, OUT, IN_OUT, or IN_OUT_TYPE_UNSPECIFIED, and defaultValue).integrationConfigParameters: Environment-specific config variable definitions (parameter with key `CONFIG_<NAME>` and parameter.defaultValue; a top-level value in uploaded or created draft JSON is discarded, so per-environment values go in configParameters at publish).runAsServiceAccount: Dedicated user-managed service account email. When set and no authentication profile (authConfig) is configured on the task, it is used to generate the auth token for Connector (Connectors), REST (Call REST Endpoint), and Cloud Function tasks; an authentication profile configured on the task takes precedence over runAsServiceAccount.Always use triggerConfigs, taskConfigs, and integrationParameters. Never use triggerConfigsInternal, taskConfigsInternal, or integrationParametersInternal because they are deprecated. See references/integration-version-json.md for field schemas, ValueType shapes, and a minimal IntegrationVersion JSON template.
DRAFT VersionEach integration allows up to 100 versions and 100 tasks, and INTEGRATION_NAME can be at most 64 characters. Calling versions:upload creates a new DRAFT version—creating the integration automatically if INTEGRATION_NAME does not exist yet, or adding the next DRAFT version if it already exists (for example, uploading onto version 5 creates version 6). The uploaded version is in DRAFT state and still requires versions:publish to serve traffic. Use POST .../versions?newIntegration=true (passing an IntegrationVersion JSON body) only when you explicitly want the call to fail with ALREADY_EXISTS if INTEGRATION_NAME already exists.
# Upload integration-version.json as a new DRAFT version
PAYLOAD="$(jq -n --rawfile content integration-version.json '{content: $content, fileFormat: "JSON"}')"
curl -sS --fail-with-body -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d "${PAYLOAD}" \
"https://integrations.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/integrations/INTEGRATION_NAME/versions:upload"
Capture the new VERSION_ID from .integrationVersion.name in the response (projects/PROJECT_ID/locations/LOCATION/integrations/INTEGRATION_NAME/versions/VERSION_ID).
| State | Meaning | Editable? | Can Serve Triggers? |
|---|---|---|---|
DRAFT | Version actively being edited; its edit lock is held by its author (lockHolder email) for 15 minutes from the last update | Yes (only by lockHolder) | No |
ACTIVE | Published version serving live traffic | No | Yes |
SNAPSHOT | Prior draft (when another author takes over in the console) or unpublished version (PREVIOUSLY_PUBLISHED) | No | No |
ARCHIVED | Soft-deleted via versions.delete (no undelete; listed as DELETED on the Integration versions documentation page) | No | No |
DRAFT version's edit lock is held by its author (lockHolder). Calling versions:publish or versions.delete on a DRAFT fails if the caller is not the lockHolder (versions:publish and versions.delete release any existing lock when they succeed).takeoverEditLock does not exist on projects.locations.integrations.versions in the v1 REST API (it only exists on versions.testCases). If a DRAFT is locked by another user, wait 15 minutes from updateTime for the lock to expire automatically, or click Take Over in the Cloud console (which converts the existing draft to SNAPSHOT and creates a new DRAFT).CONFIG_<NAME>): Use for non-secret environment values (backend hostnames, Pub/Sub topics, connection names). Define them in integrationConfigParameters on the draft (putting any default in parameter.defaultValue, because a top-level value on a draft is discarded) and pass their per-environment values in configParameters when calling versions:publish. Gotcha: Keys in configParameters at publish must exactly match a key in integrationConfigParameters, backticks included (for example, "`CONFIG_target_url`"); unknown keys are silently ignored, not rejected (versions:publish returns 200 and the default stays). Config variables cannot configure Integration Connectors entity operations or actions.authConfigs): Use for API keys, OAuth 2.0 credentials, JWTs, OIDC tokens, SSL/TLS certificates, and service accounts. Auth profiles are regional resources (projects/PROJECT_ID/locations/LOCATION/authConfigs/AUTH_CONFIG_ID) and are not included when you download an integration version. Create them in each target project via POST .../authConfigs or Terraform google_integrations_auth_config.versions:publish) and invoking integrations:execute there.
integrations:test: The v1 REST API includes POST .../integrations/INTEGRATION_NAME:test for testing a DRAFT, which requires TestIntegrationsRequest.clientId ("Required. This is used to identify the client on whose behalf the event will be executed."), but the public documentation does not specify what value to pass. Do not invent a clientId value; publish to a non-production project and call :execute instead. (Draft testing also cannot run Approval, Suspend, or Timer tasks, and Call REST Endpoint authentication profile changes only take effect after publishing.)versions:publish): Deploys the version as ACTIVE and releases any edit lock (fails if the version is already ACTIVE or ARCHIVED, or if it is a DRAFT whose lockHolder differs from the caller). Any previously ACTIVE version is automatically unpublished, and dependent services switch to the newly published version.
versions:unpublish): Moves the ACTIVE version to SNAPSHOT (tagged PREVIOUSLY_PUBLISHED; fails if the version is not ACTIVE) and stops triggers and dependent services.# Publish VERSION_ID and supply config variable values (keys must exactly match integrationConfigParameters keys, backticks included; unknown keys are silently ignored)
curl -sS --fail-with-body -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json" \
-d '{"configParameters": {"`CONFIG_backend_url`": "https://api.example.com"}}' \
"https://integrations.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/integrations/INTEGRATION_NAME/versions/VERSION_ID:publish"
Only an ACTIVE (published) version can be invoked via execute or schedule. For API triggers, triggerId is always api_trigger/TRIGGER_NAME (where TRIGGER_NAME is at most 64 characters). Passing - as INTEGRATION_NAME in execute runs all published integrations in that region that share the triggerId.
| Method | Mode | Max Timeout | Max API Input | Key Request Fields | Key Response Fields |
|---|---|---|---|---|---|
integrations:execute | Sync | 2 minutes | 8 MB | triggerId, inputParameters, requestId, doNotPropagateError | executionId, outputParameters, parameters |
integrations:schedule | Async | 10 minutes | Not documented | triggerId, scheduleTime (RFC 3339), inputParameters, requestId, userGeneratedExecutionId | executionInfoIds[] |
outputParameters and executionId: In ExecuteIntegrationsResponse, executionId identifies the run, and outputParameters is a JSON object of output variables (system-generated keys such as `ExecutionId` are wrapped in backticks).doNotPropagateError is true, or a task uses failure policy IGNORE or NONE with an alternate path, the HTTP call returns 200 OK even when a task failed. Always verify the execution record via executions.list?filter=execution_id="EXECUTION_ID" (checking executionDetails.state, each task's taskExecutionState, and ErrorInfo in Execution.responseParameters; when doNotPropagateError is true, errors are also returned in event parameters as PostWithTriggerIdExecutionException). Do not rely on the legacy/deprecated executionFailed field.See references/triggers-and-execution.md for all trigger types, ValueType input formatting, OpenAPI spec generation, and suspension lifting and approval resolution.
In downloaded and uploaded IntegrationVersion JSON, an EmailTask uses four customer-visible parameter keys inside taskConfigs[].parameters: "To" (stringArray of recipient addresses), "Subject" (stringValue), "BodyFormat" (stringValue, such as "PLAIN_TEXT"), and "TextBody" (stringValue). Both runnable examples below also set "runAsServiceAccount": "RUN_AS_SA" (replace RUN_AS_SA with your dedicated service account email, such as order-workflow-sa@PROJECT_ID.iam.gserviceaccount.com; projects with governance require a run-as service account to publish, and the caller needs roles/iam.serviceAccountUser on it). Executing an EmailTask sends a real email, so always confirm the recipient address (RECIPIENT_EMAIL) and each state-changing command (upload, publish, and execute) with the user before running.
curlThis example uploads a runnable IntegrationVersion JSON (versions:upload creates INTEGRATION_NAME automatically if it does not exist yet, or adds a new DRAFT version if it does), publishes the draft, and invokes :execute. The caller must hold roles/iam.serviceAccountUser on RUN_AS_SA (projects with governance require a run-as service account to publish). Because EmailTask sends real email, confirm RECIPIENT_EMAIL and get user confirmation before running the upload, publish, and execute calls.
set -euo pipefail
export PROJECT_ID="my-project"
export LOCATION="us-central1"
export INTEGRATION_NAME="order-webhook"
export TRIGGER_NAME="order_api"
TOKEN="$(gcloud auth print-access-token)"
BASE_URL="https://integrations.googleapis.com/v1/projects/${PROJECT_ID}/locations/${LOCATION}"
# 1. Write an IntegrationVersion JSON file (set RUN_AS_SA and confirm RECIPIENT_EMAIL with user first; caller needs roles/iam.serviceAccountUser on RUN_AS_SA)
cat <<'EOF' > /tmp/version.json
{
"description": "API-triggered order notification integration",
"runAsServiceAccount": "RUN_AS_SA",
"triggerConfigs": [
{
"label": "API Trigger",
"triggerType": "API",
"triggerNumber": "1",
"triggerId": "api_trigger/order_api",
"properties": {"Trigger name": "order_api"},
"startTasks": [{"taskId": "1"}]
}
],
"taskConfigs": [
{
"task": "EmailTask",
"taskId": "1",
"displayName": "Send Email",
"taskExecutionStrategy": "WHEN_ALL_SUCCEED",
"parameters": {
"To": {"key": "To", "value": {"stringArray": {"stringValues": ["RECIPIENT_EMAIL"]}}},
"Subject": {"key": "Subject", "value": {"stringValue": "Order notification for $orderId$"}},
"BodyFormat": {"key": "BodyFormat", "value": {"stringValue": "PLAIN_TEXT"}},
"TextBody": {"key": "TextBody", "value": {"stringValue": "Processing order $orderId$."}}
}
}
],
"integrationParameters": [
{
"key": "orderId",
"dataType": "STRING_VALUE",
"inputOutputType": "IN_OUT",
"defaultValue": {"stringValue": "ORD-0000"}
}
]
}
EOF
# 2. Upload as a new DRAFT version — creates INTEGRATION_NAME if it does not exist yet (confirm with user first)
UPLOAD_BODY="$(jq -n --rawfile content /tmp/version.json '{content: $content, fileFormat: "JSON"}')"
VERSION_NAME="$(curl -sS --fail-with-body -X POST \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d "${UPLOAD_BODY}" \
"${BASE_URL}/integrations/${INTEGRATION_NAME}/versions:upload" \
| jq -r '.integrationVersion.name')"
VERSION_ID="${VERSION_NAME##*/}"
[[ -n "${VERSION_ID}" && "${VERSION_ID}" != "null" ]] || { echo "upload failed: ${VERSION_NAME}" >&2; exit 1; }
# 3. Publish the DRAFT version (confirm with user first)
curl -sS --fail-with-body -X POST \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-d '{}' \
"${BASE_URL}/integrations/${INTEGRATION_NAME}/versions/${VERSION_ID}:publish"
# 4. Invoke the published version synchronously — sends a real email to RECIPIENT_EMAIL (confirm with user first)
curl -sS --fail-with-body -X POST \
-H "Authorization: Bearer ${TOKEN}" \
-H "Content-Type: application/json" \
-H "X-Server-Timeout: 120" \
-d "{
\"triggerId\": \"api_trigger/${TRIGGER_NAME}\",
\"inputParameters\": {
\"orderId\": {\"stringValue\": \"ORD-1001\"}
}
}" \
"${BASE_URL}/integrations/${INTEGRATION_NAME}:execute" \
| jq '{executionId, outputParameters}'
No official Python sample is published on docs.cloud.google.com; the following workflow is built from the v1 API discovery document (google-api-python-client). The caller must hold roles/iam.serviceAccountUser on RUN_AS_SA (projects with governance require a run-as service account to publish). Because EmailTask sends real email, confirm RECIPIENT_EMAIL and each state-changing call (upload, publish, execute) with the user before running. Install dependencies first with pip install "google-api-python-client>=2.100.0,<3" "google-auth>=2.20.0,<3" (changes host or credential state; get the user's approval first).
import json
from googleapiclient.discovery import build
PROJECT_ID = "PROJECT_ID"
LOCATION = "LOCATION"
INTEGRATION_NAME = "INTEGRATION_NAME"
TRIGGER_NAME = "TRIGGER_NAME"
RECIPIENT_EMAIL = "RECIPIENT_EMAIL"
parent = f"projects/{PROJECT_ID}/locations/{LOCATION}"
integration_path = f"{parent}/integrations/{INTEGRATION_NAME}"
service = build("integrations", "v1")
integrations_api = service.projects().locations().integrations()
versions_api = integrations_api.versions()
# 1. List existing integrations (read-only)
listed = integrations_api.list(parent=parent, pageSize=20).execute()
for item in listed.get("integrations", []):
print(item["name"], "active=", item.get("active"))
# 2. Upload a DRAFT version — creates INTEGRATION_NAME if it does not exist yet (set RUN_AS_SA and confirm RECIPIENT_EMAIL and action with user before running; caller needs roles/iam.serviceAccountUser on RUN_AS_SA)
version_dict = {
"description": "API-triggered order notification integration",
"runAsServiceAccount": "RUN_AS_SA",
"triggerConfigs": [{
"label": "API Trigger",
"triggerType": "API",
"triggerNumber": "1",
"triggerId": f"api_trigger/{TRIGGER_NAME}",
"properties": {"Trigger name": TRIGGER_NAME},
"startTasks": [{"taskId": "1"}],
}],
"taskConfigs": [{
"task": "EmailTask",
"taskId": "1",
"displayName": "Send Email",
"taskExecutionStrategy": "WHEN_ALL_SUCCEED",
"parameters": {
"To": {"key": "To", "value": {"stringArray": {"stringValues": [RECIPIENT_EMAIL]}}},
"Subject": {"key": "Subject", "value": {"stringValue": "Order notification for $orderId$"}},
"BodyFormat": {"key": "BodyFormat", "value": {"stringValue": "PLAIN_TEXT"}},
"TextBody": {"key": "TextBody", "value": {"stringValue": "Processing order $orderId$."}},
},
}],
"integrationParameters": [{
"key": "orderId",
"dataType": "STRING_VALUE",
"inputOutputType": "IN_OUT",
"defaultValue": {"stringValue": "ORD-0000"},
}],
}
upload_resp = versions_api.upload(
parent=integration_path,
body={"content": json.dumps(version_dict), "fileFormat": "JSON"},
).execute()
version_name = upload_resp["integrationVersion"]["name"]
# 3. Publish the DRAFT version (confirm with user before running)
versions_api.publish(
name=version_name,
body={"configParameters": {}},
).execute()
# 4. Invoke the published version synchronously — sends a real email to RECIPIENT_EMAIL (confirm with user before running)
exec_resp = integrations_api.execute(
name=integration_path,
body={
"triggerId": f"api_trigger/{TRIGGER_NAME}",
"inputParameters": {"orderId": {"stringValue": "ORD-1001"}},
},
).execute()
print("executionId:", exec_resp.get("executionId"))
print("outputParameters:", exec_resp.get("outputParameters"))
TO_STRING, TO_INT, and so on). Always set a fallback value or null inputs fail the task.executesScript(event) entrypoint. Max script request size is 25 MB.POST .../executions/EXECUTION_ID/suspensions/SUSPENSION_ID:resolve with body {"suspension": {"eventExecutionInfoId": "EXECUTION_ID", "integration": "INTEGRATION_NAME", "taskId": "TASK_ID", "state": "LIFTED"}} (or "REJECTED"), which is the same call the Cloud console Approve/Reject buttons make and requires integrations.suspensions.resolve. Suspend tasks are resumed via POST .../integrations/INTEGRATION_NAME/executions/EXECUTION_ID/suspensions/SUSPENSION_ID:lift (where - can replace INTEGRATION_NAME and either EXECUTION_ID or SUSPENSION_ID, provided at least one of EXECUTION_ID or SUSPENSION_ID is concrete; accepts an optional suspensionResult defaulting to Resolved), which requires integrations.suspensions.lift. Listing suspensions (suspensions.list) requires integrations.suspensions.list. All three permissions are included in roles/integrations.suspensionResolver (and roles/integrations.integrationAdmin); resuming also requires roles/iam.serviceAccountUser on the integration's run-as service account, requires user confirmation first, and runs the remainder of the execution in async mode.Call Integration, For Each Loop, For Each Parallel), child responses/output parameters are returned to the parent only in SYNC mode (ASYNC calls return no output parameters); avoid SYNC mode if the sub-integration exceeds 2 minutes or includes an Approval task.See references/tasks-and-gotchas.md for the full task catalog, limits, variable reference syntax, and retry strategies.
To promote an integration from development to staging or production:
CONFIG_<NAME> config variables.authConfigs) in the target project first (these infrastructure resources are not created by version uploads).versions:download?fileFormat=JSON), commit it to Git alongside per-environment config files, rewrite .runAsServiceAccount to the target environment's run-as service account (jq --arg sa "$RUN_AS_SA" '.runAsServiceAccount = $sa' integration.json > integration.env.json) before uploading, and run versions:upload + versions:publish from Cloud Build or your CI runner (versions:upload creates the integration automatically in the target project if it does not exist yet, producing a DRAFT that :publish activates).See references/cicd-promotion.md for the complete promotion checklist and a ready-to-use Cloud Build pipeline.
POST .../versions/VERSION_ID:unpublish (after user confirmation) to stop scheduled, Pub/Sub, or API triggers from firing.DELETE .../versions/VERSION_ID archives a single version (deleting all versions deletes the integration). DELETE .../integrations/INTEGRATION_NAME permanently deletes the integration and all its versions.https://console.cloud.google.com/connectors/connections to stop hourly node charges.gcloud CLI commands, direct curl REST calls, and Python discovery-client snippets run in the terminal.triggerConfigs, taskConfigs, integrationParameters, ValueType, and config variables.triggerId formats, :execute vs :schedule, OpenAPI generation, and lifting or resolving suspensions.아직 리뷰가 없습니다. 사용해 본 소감을 남겨 주세요.
로그인 없이 쓸 수 있습니다. 사용 후기, 질문, 작동하지 않은 환경 등을 편하게 남겨 주세요.
아직 댓글이 없습니다. 첫 댓글을 남겨 보세요.
AI 에이전트의 지연, 오류, 토큰 사용량, 안전성, 보안, 응답 품질을 감시하는 Terraform 알림 파일을 만듭니다. 원격 측정 데이터와 기존 정책을 먼저 확인하고 설정을 검증하며, 품질 알림에는 Vertex AI가 필요합니다.
Model Garden 모델을 Agent Platform 엔드포인트에 배포하도록 돕습니다. 지원 하드웨어와 시간당 예상 비용을 확인하고, 배포 진행 상황과 추론 테스트를 살핀 뒤 사용을 마치면 모델과 엔드포인트를 정리할 수 있습니다.
Agent Platform에서 온라인 모델 예측 요청을 받는 엔드포인트를 관리합니다. 목록과 설정을 확인하고 생성·수정·삭제하며, 권한 오류와 할당량 초과, 리소스 처리 중 오류도 조사합니다.
Google Cloud에서 AI 모델과 에이전트를 평가하고 테스트 데이터를 구성하며 채점 지표를 선택합니다. 모의 사용자 시나리오 생성, 실패 분석, 수정 전후 결과 비교로 프롬프트와 코드를 개선할 근거를 마련합니다.
Call Gemini and OpenMaaS models such as Llama, DeepSeek, and Qwen through Google Cloud Agent Platform. Prepare authentication and SDK code, run prompts, configure connection endpoints, and troubleshoot common request errors.
한국어 요약은 준비 중입니다. 영어 요약을 표시하고 있습니다.
Google AI Studio의 Gemini API를 Google Cloud의 Gemini Enterprise Agent Platform으로 옮기는 절차를 안내합니다. 결제, 권한, 인증 설정과 SDK 및 지원되는 에이전트 도구의 연결 변경을 다룹니다.