Skip to content

Commit 849b4e5

Browse files
authored
Merge pull request #60 from koichiro/feature/extract-create-event-trigger
Separate Eventarc trigger and deployment into scripts
2 parents 2f96859 + 65fb403 commit 849b4e5

6 files changed

Lines changed: 84 additions & 78 deletions

File tree

README.md

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,23 +74,33 @@ bundle exec rake test
7474
```
7575

7676
### 4. Deployment
77-
Deploy using the provided `deploy.sh` or through a CI/CD pipeline like Cloud Build (see `cloudbuild.yaml`).
77+
Deploy the Cloud Run service with `deploy.sh` or through Cloud Build (`cloudbuild.yaml`). Create the Eventarc trigger separately with `scripts/create_trigger.sh`.
7878

7979
```bash
80-
chmod +x deploy.sh
80+
chmod +x deploy.sh scripts/create_trigger.sh
8181

8282
SERVICE_NAME=airbnb-payouts-import \
83-
TRIGGER_NAME=airbnb-payouts-import-gcs-finalized \
8483
REGION=asia-northeast1 \
8584
PROJECT_ID=your-project-id \
86-
TRIGGER_BUCKET=your-bucket \
8785
SERVICE_ACCOUNT_EMAIL=etl-runner@your-project-id.iam.gserviceaccount.com \
8886
BQ_DATASET_ID=airbnb_management \
8987
BQ_TABLE_ID=earnings_cleaned \
9088
SLACK_WEBHOOK_URL=https://hooks.slack.com/services/... \
9189
./deploy.sh
9290
```
9391

92+
Create or update the Eventarc trigger separately:
93+
94+
```bash
95+
SERVICE_NAME=airbnb-payouts-import \
96+
TRIGGER_NAME=airbnb-payouts-import-gcs-finalized \
97+
REGION=asia-northeast1 \
98+
PROJECT_ID=your-project-id \
99+
TRIGGER_BUCKET=your-bucket \
100+
SERVICE_ACCOUNT_EMAIL=etl-runner@your-project-id.iam.gserviceaccount.com \
101+
./scripts/create_trigger.sh
102+
```
103+
94104
## 📊 Usage
95105

96106
1. Export your **Transaction History** CSV from the Airbnb hosting dashboard.

cloudbuild.yaml

Lines changed: 0 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -11,37 +11,6 @@ steps:
1111
- --source=.
1212
- --no-allow-unauthenticated
1313
- --update-env-vars=GCP_PROJECT_ID=${PROJECT_ID},BQ_DATASET_ID=${_BQ_DATASET_ID},BQ_TABLE_ID=${_BQ_TABLE_ID},SLACK_WEBHOOK_URL=${_SLACK_WEBHOOK_URL}
14-
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
15-
entrypoint: bash
16-
args:
17-
- -c
18-
- |
19-
if gcloud eventarc triggers describe "${_TRIGGER_NAME}" --location="${_REGION}" >/dev/null 2>&1; then
20-
gcloud eventarc triggers delete "${_TRIGGER_NAME}" --location="${_REGION}" --quiet
21-
fi
22-
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
23-
args:
24-
- gcloud
25-
- eventarc
26-
- triggers
27-
- create
28-
- ${_TRIGGER_NAME}
29-
- --location=${_REGION}
30-
- --destination-run-service=${_SERVICE_NAME}
31-
- --destination-run-region=${_REGION}
32-
- --event-filters=type=google.cloud.storage.object.v1.finalized
33-
- --event-filters=bucket=${_TRIGGER_BUCKET}
34-
- --service-account=${_SERVICE_ACCOUNT_EMAIL}
35-
- name: 'gcr.io/google.com/cloudsdktool/cloud-sdk'
36-
entrypoint: bash
37-
args:
38-
- -c
39-
- |
40-
_SUB=$(gcloud eventarc triggers describe "${_TRIGGER_NAME}" --location="${_REGION}" --format="value(transport.pubsub.subscription)" || echo "")
41-
if [ ! -z "$${_SUB}" ]; then
42-
echo "Updating subscription $${_SUB} ack-deadline to 600s"
43-
gcloud pubsub subscriptions update "$${_SUB}" --ack-deadline=600
44-
fi
4514

4615
options:
4716
logging: CLOUD_LOGGING_ONLY
@@ -51,7 +20,5 @@ substitutions:
5120
_BQ_DATASET_ID: "REQUIRED_SET_IN_TRIGGER_UI"
5221
_BQ_TABLE_ID: "REQUIRED_SET_IN_TRIGGER_UI"
5322
_SERVICE_NAME: "airbnb-payouts-importer"
54-
_TRIGGER_NAME: "airbnb-payouts-importer-trigger"
55-
_TRIGGER_BUCKET: "REQUIRED_SET_IN_TRIGGER_UI"
5623
_SERVICE_ACCOUNT_EMAIL: "REQUIRED_SET_IN_TRIGGER_UI"
5724
_SLACK_WEBHOOK_URL: ""

deploy.sh

100644100755
Lines changed: 2 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -2,43 +2,6 @@
22

33
set -euo pipefail
44

5-
SERVICE_NAME="${SERVICE_NAME:-airbnb-payouts-import}"
6-
TRIGGER_NAME="${TRIGGER_NAME:-${SERVICE_NAME}-gcs-finalized}"
7-
REGION="${REGION:-asia-northeast1}"
8-
TRIGGER_BUCKET="${TRIGGER_BUCKET:-YOUR_BUCKET_NAME}"
9-
PROJECT_ID="${PROJECT_ID:-YOUR_PROJECT_ID}"
10-
SERVICE_ACCOUNT_EMAIL="${SERVICE_ACCOUNT_EMAIL:-YOUR_SERVICE_ACCOUNT_EMAIL}"
11-
BQ_DATASET_ID="${BQ_DATASET_ID:-airbnb_management}"
12-
BQ_TABLE_ID="${BQ_TABLE_ID:-earnings_cleaned}"
13-
SLACK_WEBHOOK_URL="${SLACK_WEBHOOK_URL:-}"
5+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
146

15-
echo "Deploying Cloud Run service ${SERVICE_NAME} to ${REGION}..."
16-
17-
gcloud run deploy "${SERVICE_NAME}" \
18-
--project "${PROJECT_ID}" \
19-
--region "${REGION}" \
20-
--source . \
21-
--memory 512Mi \
22-
--service-account "${SERVICE_ACCOUNT_EMAIL}" \
23-
--no-allow-unauthenticated \
24-
--set-env-vars "GCP_PROJECT_ID=${PROJECT_ID},BQ_DATASET_ID=${BQ_DATASET_ID},BQ_TABLE_ID=${BQ_TABLE_ID},SLACK_WEBHOOK_URL=${SLACK_WEBHOOK_URL}"
25-
26-
echo "Creating or updating Eventarc trigger ${TRIGGER_NAME}..."
27-
28-
if gcloud eventarc triggers describe "${TRIGGER_NAME}" --project "${PROJECT_ID}" --location "${REGION}" >/dev/null 2>&1; then
29-
gcloud eventarc triggers delete "${TRIGGER_NAME}" \
30-
--project "${PROJECT_ID}" \
31-
--location "${REGION}" \
32-
--quiet
33-
fi
34-
35-
gcloud eventarc triggers create "${TRIGGER_NAME}" \
36-
--project "${PROJECT_ID}" \
37-
--location "${REGION}" \
38-
--destination-run-service "${SERVICE_NAME}" \
39-
--destination-run-region "${REGION}" \
40-
--event-filters "type=google.cloud.storage.object.v1.finalized" \
41-
--event-filters "bucket=${TRIGGER_BUCKET}" \
42-
--service-account "${SERVICE_ACCOUNT_EMAIL}"
43-
44-
echo "Deployment complete."
7+
exec "${SCRIPT_DIR}/scripts/deploy.sh" "$@"

plan/specification.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,10 @@ Cloud Run サービスアカウント:
161161

162162
## Deployment Shape
163163

164-
デプロイは `deploy.sh``cloudbuild.yaml` を基準にする。
164+
デプロイは `deploy.sh` / `scripts/deploy.sh` `cloudbuild.yaml` を基準にする。
165165

166166
- `gcloud run deploy --source .`
167-
- Eventarc trigger 作成
167+
- Eventarc trigger 作成は `scripts/create_trigger.sh` で別実行
168168
- Cloud Run 環境変数注入
169169
- 必要に応じて Slack webhook を設定
170170

scripts/create_trigger.sh

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
#!/bin/bash
2+
3+
set -euo pipefail
4+
5+
SERVICE_NAME="${SERVICE_NAME:-airbnb-payouts-import}"
6+
TRIGGER_NAME="${TRIGGER_NAME:-${SERVICE_NAME}-gcs-finalized}"
7+
REGION="${REGION:-asia-northeast1}"
8+
TRIGGER_BUCKET="${TRIGGER_BUCKET:-YOUR_BUCKET_NAME}"
9+
PROJECT_ID="${PROJECT_ID:-YOUR_PROJECT_ID}"
10+
SERVICE_ACCOUNT_EMAIL="${SERVICE_ACCOUNT_EMAIL:-YOUR_SERVICE_ACCOUNT_EMAIL}"
11+
12+
echo "Creating or updating Eventarc trigger ${TRIGGER_NAME}..."
13+
14+
if gcloud eventarc triggers describe "${TRIGGER_NAME}" --project "${PROJECT_ID}" --location "${REGION}" >/dev/null 2>&1; then
15+
gcloud eventarc triggers delete "${TRIGGER_NAME}" \
16+
--project "${PROJECT_ID}" \
17+
--location "${REGION}" \
18+
--quiet
19+
fi
20+
21+
gcloud eventarc triggers create "${TRIGGER_NAME}" \
22+
--project "${PROJECT_ID}" \
23+
--location "${REGION}" \
24+
--destination-run-service "${SERVICE_NAME}" \
25+
--destination-run-region "${REGION}" \
26+
--event-filters "type=google.cloud.storage.object.v1.finalized" \
27+
--event-filters "bucket=${TRIGGER_BUCKET}" \
28+
--service-account "${SERVICE_ACCOUNT_EMAIL}"
29+
30+
SUBSCRIPTION="$(
31+
gcloud eventarc triggers describe "${TRIGGER_NAME}" \
32+
--project "${PROJECT_ID}" \
33+
--location "${REGION}" \
34+
--format="value(transport.pubsub.subscription)" || echo ""
35+
)"
36+
37+
if [ -n "${SUBSCRIPTION}" ]; then
38+
echo "Updating subscription ${SUBSCRIPTION} ack-deadline to 600s"
39+
gcloud pubsub subscriptions update "${SUBSCRIPTION}" --ack-deadline=600
40+
fi
41+
42+
echo "Eventarc trigger setup complete."

scripts/deploy.sh

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/bin/bash
2+
3+
set -euo pipefail
4+
5+
SERVICE_NAME="${SERVICE_NAME:-airbnb-payouts-import}"
6+
REGION="${REGION:-asia-northeast1}"
7+
PROJECT_ID="${PROJECT_ID:-YOUR_PROJECT_ID}"
8+
SERVICE_ACCOUNT_EMAIL="${SERVICE_ACCOUNT_EMAIL:-YOUR_SERVICE_ACCOUNT_EMAIL}"
9+
BQ_DATASET_ID="${BQ_DATASET_ID:-airbnb_management}"
10+
BQ_TABLE_ID="${BQ_TABLE_ID:-earnings_cleaned}"
11+
SLACK_WEBHOOK_URL="${SLACK_WEBHOOK_URL:-}"
12+
13+
echo "Deploying Cloud Run service ${SERVICE_NAME} to ${REGION}..."
14+
15+
gcloud run deploy "${SERVICE_NAME}" \
16+
--project "${PROJECT_ID}" \
17+
--region "${REGION}" \
18+
--source . \
19+
--memory 512Mi \
20+
--service-account "${SERVICE_ACCOUNT_EMAIL}" \
21+
--no-allow-unauthenticated \
22+
--set-env-vars "GCP_PROJECT_ID=${PROJECT_ID},BQ_DATASET_ID=${BQ_DATASET_ID},BQ_TABLE_ID=${BQ_TABLE_ID},SLACK_WEBHOOK_URL=${SLACK_WEBHOOK_URL}"
23+
24+
echo "Cloud Run deployment complete."

0 commit comments

Comments
 (0)