CloudRun 및 CloudEndpoints 제공
34349 단어 terraformopenapigooglecloud
경고: Terraform v0을 사용합니다.13
클라우드 컴퓨팅이란?클라우드 런은 자동 확장이 가능한 완전 셀프 서비스 관리 인프라입니다.
cloudrun
무엇이 지형입니까?Terraform은 구름이 많이 낀 인프라 시설이다.이것은 인위적인 잘못을 없애고 시간을 단축시켰다.
TerraForm
이 가이드라인에서 클라우드 지점에 자신의 API를 배치하는 방법과 Terraform과 Cloud build에서 응용 프로그램과 API 게이트웨이 ESPv2 이미지에 클라우드 실행 서비스를 사용하는 방법을 보여 드리겠습니다.
이 자습서를 따르고 CI/CD 파이프 GettingStartedCloudEndpoints를 통해 복사했습니다.
선결 조건
CI/CD 파이프라인에서 시작하여 제 환경은 버전 제어(GitHub)에는TerraForm이 있고 GitHub과 Google 클라우드 플랫폼에는 클라우드 구축 트리거 프로그램이 있습니다.
나는 또 한 편의 문장을 써야 한다.고급 또는 고급 종사자의 경우 here로 이동하십시오.
terraform과 곡가 클라우드 플랫폼을 설정하면 환경에 가장 적합한 것을 결정하지만, 안전성을 고려한 terraform과 GCP의 최선의 실천을 강력히 권장합니다.클라우드 운영 보호 서비스HERE 역시 TerraForm 구성을 배포하기 위해 권한이 중요하고 필요합니다.나는 다시 사용할 수 있는 인프라 시설을 코드로 하여TerraForm 건조를 유지하는 것을 좋아한다. 이렇게 하면 모듈을 다시 사용할 수 있다.이 중 또 다른 관건적인 부분은 템플릿 버전입니다. 버젼="2.1.2"로 설정했습니다.
GitHub repo에 클라우드 구축 트리거 프로그램이 있습니다. 개발, 임시 저장, 생산에 사용됩니다. 이것은 "VScode"를 사용한 변경 사항을 만들어서 GitHub에 제출합니다.Cloud Build 트리거는 dockerfile 또는 Cloudbuild를 커밋하고 실행하는 분기 이름을 통해 알립니다.아마르.
Cloudbuild.yaml 설정은 구축 시간을 7200초로 설정합니다. 단지 클라우드 구축이TerraForm 설정의 배치를 완성할 충분한 시간을 확보하기 위해서입니다.이 자습서HERE에서는 TerraForm과 GCP Cloud Build를 사용하는 기본 원리에 대해 간결하고 맞춤형 절차를 설명했습니다.
이 자습서에 사용된 버전
~Google provider 3.35.0
~TerraForm v.0.13.0
일단 모든 것이 설정되면, 우리는TerraForm GCP 자원을 배치하기 시작합시다
우리 시작하자.
먼저 dev 폴더 구조를 만듭니다.일은 이렇다, 뒤쪽.tf가 원격 상태를 클라우드 메모리 통에 저장하고 있습니다.위의 강좌인'코드 형식으로 인프라 시설을 관리'에서 원격 상태를 설정하는 절차를 소개했다.매인.tf는 Terraform root dir config이며 모듈과 Google provider를 포함합니다.산출tf 파일은 클라우드 실행 모듈에서 출력 URL을 전달합니다.버전tf는 모든 지형의 동기화를 유지하는 데 매우 중요하다.
├── 자술하다.의학 박사
├── cloudbuild.아마르
├── gcloud 구축 이미지
├── 컨디션
│ └── 덕부
│ ├── 백엔드.tf
│ ├── 매인.tf
│ ├── 산출tf
│ └── 버전tf
│ ├── 등단
│ ├── 찌르다
├── 모듈
│ └── 서비스
│ ├── 운윤
│ │ ├── cloudrun.tf
│ │ ├── 산출tf
│ │ └── 변수tf
│ ├── 구름 끝점
│ │ ├── 끝점tf
│ │ ├── openapi_spec.yml
│ │ └── 변수tf
루트 디렉토리에 있습니다.클라우드 메이커가 있습니다.yaml과 gcloud 구축 그림도 자술합니다.md는 다른 팀원들이 시작할 수 있도록 환매 협의와 조작 방법을 설명한다.
우리는 클라우드 운행과 클라우드 단점의 모듈/서비스/지형 자원 배치를 가지고 있다.이 강좌에서, 나는 Hello World와 Hello GO 응용 프로그램에 사용되는 간단한 클라우드 노드를 사용했다.구성의 보안을 확인해야 할 수도 있습니다. 필요한 경우 CORS를 사용하고 클라우드 실행 서비스에 대한 IAM 권한을 설정하십시오.
클라우드 운행 모듈configs로 넘어가면 클라우드 운행 서비스부터 시작합니다.기본 cloud run with IAM 정책 'no auth' 를 사용하고 이름, 위치, docker 이미지에 변수를 만들 것입니다.
# ------------------------------------------------------------------------------
# GCP cloud run application
# ------------------------------------------------------------------------------
resource "google_cloud_run_service" "default" {
name = var.name
location = var.location
template {
spec {
containers {
image = var.dockerimg
}
}
}
traffic {
percent = 100
latest_revision = true
}
autogenerate_revision_name = true
}
data "google_iam_policy" "noauth" {
binding {
role = "roles/run.invoker"
members = [
"allUsers",
]
}
}
resource "google_cloud_run_service_iam_policy" "noauth" {
location = google_cloud_run_service.default.location
project = google_cloud_run_service.default.project
service = google_cloud_run_service.default.name
policy_data = data.google_iam_policy.noauth.policy_data
}
# ------------------------------------------------------------------------------
# variables for Cloud Run
# ------------------------------------------------------------------------------
variable "name" {
description = "variable name for cloud run"
type = string
}
variable "location" {
description = "setting location of service"
default = "us-central1"
}
variable "project" {
description = " setting project name"
type = string
}
variable "dockerimg" {
description = "docker img to be used"
type = string
}
# ------------------------------------------------------------------------------
# outputs for Cloud Run
# ------------------------------------------------------------------------------
output url {
value = google_cloud_run_service.default.status[0].url
}
output urlesp {
value = "${trimprefix(google_cloud_run_service.default.status[0].url, "https://")}"
}
다음에 우리는 구름 단점 모듈을 설정할 것이다.데이터 템플릿 파일을 사용하여 Openapi spec.yaml을 클라우드 포인트 설정에 가져왔습니다. 클라우드 포인트 모듈dir에서 사용했습니다.데이터 오픈api에 변수를 만들었습니다.yaml 구성TerraForm 루트 구성의 변수를 클라우드 엔드 포인트 모듈로 전달합니다.# # ------------------------------------------------------------------------------
# # Cloud endpoints
# # ------------------------------------------------------------------------------
data "template_file" "openapi_spec" {
template = "${file("${path.module}/openapi_spec.yml")}"
vars = {
CloudRunES = var.CloudRunESurl ,
HelloAPI = var.ClRnSrvapp
}
}
resource "google_endpoints_service" "api-service" {
service_name = var.CloudRunES2url
project = var.project
openapi_config = data.template_file.openapi_spec.rendered
}
swagger: '2.0'
info:
title: Cloud Endpoints + Cloud Run
description: Sample API on Cloud Endpoints with a Cloud Run backend
version: 1.0.0
host: ${CloudRunES}
schemes:
- https
produces:
- application/json
x-google-backend:
address:${HelloAPI}
protocol: h2
paths:
/hello:
get:
summary: Greet a user
operationId: hello
responses:
'200':
description: A successful response
schema:
type: string
variable "project" {
description = "name of project"
type = string
}
variable "CloudRunESurl" {
type = string
}
variable "ClRnSrvapp" {
type = string
}
자, 이제 모듈 서비스가 설정되었습니다. Staging 폴더로 돌아가서Terraform 루트 설정 (main.tf) 을 설정할 수 있습니다.클라우드 실행 ESPv2 서비스는 클라우드 실행 GO 응용 프로그램과 함께 만들어집니다.
자세한 내용은 여기를 클릭하십시오doc.
# # ------------------------------------------------------------------------------
# # Terraform provider
# # --------------------------------------------------------------------------------
provider google {
project = "Project_ID"
region = "var.region"
}
provider "template" {
version = "2.1.2"
}
# ------------------------------------------------------------------------------
# cloud run and cloud endpoints
# ------------------------------------------------------------------------------
module "HelloAPI" {
source = "../../modules/services/CloudRun"
name = "hellotest"
location = "us-central1"
project = "Project_ID"
dockerimg = "gcr.io/${Project_ID}/cloud-run-hello:v2"
}
module "CloudApiESP" {
source = "../../modules/services/CloudRun"
name = "cloudrunesp"
location = "us-central1"
project = "Project_ID"
dockerimg = "gcr.io/${Project_ID}/endpoints-runtime-serverless:cloudapiesp-qutnc7nuq-uc.a.run.app-2020-08-017r0"
}
# ------------------------------------------------------------------------------
# variables for Cloud endpoints
# ------------------------------------------------------------------------------
module "cloudEndpoints" {
source = "../../modules/services/cloudEndpoints"
project = "Project_ID"
CloudRunESurl = "${module.CloudApiESP.urlesp}"
ClRnSrvapp = "${module.HelloAPI.url}"
}
위의 구성은 모듈 서비스 클라우드 런을 호출합니다. 이 모듈에서는 이름, 위치, 항목을 만들고 docker 이미지를 입력하며 Google 컨테이너 레지스트리에서 가져옵니다.Cloud Run은 GCR의 이미지만 실행합니다.다음은 클라우드 endpoints 모듈에서 클라우드 endpoints를 만들고 있습니다. 우리가 하고 있는 유일한 설정은 env 변수를 전송하는 것입니다.이것은 출력 URL을 출력으로 클라우드 런 모듈에서main config로 전달하고 클라우드 endpoints 모듈 env로 전달하는 것을 의미합니다.발스?이것은 환경 변수를 주 설정에 전달하고 다른 모듈 서비스에 전달하는 유일한 방법이다. 마지막으로, 지속적인 배치에 사용되는cloud build yaml 설정을 만들 것입니다.이렇게 하는 목적은cloud build에서 실행 절차를 실행하여alpine busy box를 만들고 Terraform을 설치하며,cloud build에서 cd를 루트 폴더와 모듈 설정에 넣고 설정하고 배치하는 것을 허용하는 것입니다.TF LOG=TRACE를 입력했는데 Cloud build을 통해 Build LOG가 백그라운드에 TerraForm의 실행 상황을 표시합니다.
Cloudbuild.아마르
# Copyright 2019 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
timeout: 7200s
steps:
# - name: gcr.io/cloud-builders/gcloud
# entrypoint: 'bash'
# args:
# - '-c'
# - |-
# chmod +x gcloud_build_image
# ./gcloud_build_image -s ${cloudrun-esp}-${cloudrun-hash}-uc.a.run.app -c ${config-id} -p ${project-id}
- id: 'branch name'
name: 'alpine'
entrypoint: 'sh'
args:
- '-c'
- |
echo "***********************"
echo "$BRANCH_NAME"
echo "***********************"
#[start tf-init]
- id: 'tf init'
name: 'hashicorp/terraform:0.13.0'
entrypoint: 'sh'
args:
- '-c'
- |
if [ -d "environments/$BRANCH_NAME/" ]; then
cd environments/$BRANCH_NAME
terraform init
else
for dir in environments/*/
do
cd ${dir}
env=${dir%*/}
env=${env*/}
echo ""
echo "*************** TERRAFORM INIT ******************"
echo "******* At environment: ${env} ********"
echo "*************************************************"
terraform init || exit 1
cd ../../
done
fi
# [START tf-plan]
- id: 'tf plan'
name: 'hashicorp/terraform:0.13.0'
entrypoint: 'sh'
args:
- '-c'
- |
if [ -d "environments/$BRANCH_NAME/" ]; then
cd environments/$BRANCH_NAME
terraform plan
else
for dir in environments/*/
do
cd ${dir}
env=${dir%*/}
env=${env*/}
echo ""
echo "*************** TERRAFOM PLAN ******************"
echo "******* At environment: ${env} ********"
echo "*************************************************"
terraform plan || exit 1
cd ../../
cat crash.log
done
fi
# [END tf-plan]
#[START tf-apply]
- id: 'tf apply'
name: 'hashicorp/terraform:0.13.0'
entrypoint: 'sh'
args:
- '-c'
- |
if [ -d "environments/$BRANCH_NAME/" ]; then
cd environments/$BRANCH_NAME
export TF_LOG=TRACE
terraform apply -auto-approve
else
echo "***************************** SKIPPING APPLYING *******************************"
echo "Branch '$BRANCH_NAME' does not represent an oficial environment."
echo "*******************************************************************************"
fi
#[START tf-destroy]
# - id: 'tf destroy'
# name: 'hashicorp/terraform:0.13.0'
# entrypoint: 'sh'
# args:
# - '-c'
# - |
# if [ -d "environments/$BRANCH_NAME/" ]; then
# cd environments/$BRANCH_NAME
# export TF_LOG=TRACE
# terraform destroy -auto-approve
# else
# echo "***************************** SKIPPING APPLYING *******************************"
# echo "Branch '$BRANCH_NAME' does not represent an oficial environment."
# echo "*******************************************************************************"
# fi
#[end tf-destroy]
모든 구성이 완료되면 GitHub 지점에 배포를 제출할 수 있습니다.우리는 두 개의 클라우드 운행 서비스와 한 개의 클라우드 단점이 있을 것이다. 다음은 본 강좌 밑에 제공된 gcloud build image 스크립트GcloudBuildImage를 사용하여 클라우드에서 ESPv2를 실행하고 다시 배치해야 합니다.
# - name: gcr.io/cloud-builders/gcloud
# entrypoint: 'bash'
# args:
# - '-c'
# - |-
# chmod +x gcloud_build_image
# ./gcloud_build_image -s ${cloudrun-esp}-${cloudrun-hash}-uc.a.run.app -c ${config-id} -p ${project-id}
Google 컨테이너 레지스트리 이미지 이름을 복사하여 클라우드 실행 ESPv2 클라우드 실행 서비스에 이름을 입력하여 재배치해야 합니다.ESPv2 이미지 이름을 복사하여 TerrForm main의 Cloud Run ESPv2 모듈의 dockimg=ESPv2 이미지 이름에 붙여 넣는 것이 좋습니다.tf. 클라우드 엔드 URL은 ESPv2 URL/hello를 실행하는 클라우드의 한 형태여야 합니다.
i, e https://${cloudapiespurl}-CloudRun 산열.a. 빨리 뛰어요.안녕하세요
다음은 Cloud Run GO 애플리케이션의 코드를 변경하여 Cloud Run 서비스를 재구성하는 동시에 지속적으로 통합할 수 있도록 합니다.나는 독립된 GitHub 환매 협의를 가지고 있다.내 클라우드 실행 프로그램에 사용합니다.
별도의 클라우드 컴퓨팅 애플리케이션 GitHub Repo 에서나의 몸매는 매우 좋다.GitHub repo에 사용할 클라우드 구축 트리거를 구성한 yaml입니다.그래서 내가 제출할 때마다 제출할 때마다 지속적인 통합을 실행할 수 있다.
steps:
-name: 'gcr.io/cloud-builders/docker'
args: [ 'build', '-t', 'gcr.io/project_id/cloudrun-hello', '.']
-name: gcr.io/cloudbuilders/docker'
args: [ 'push', 'gcr.io/project_id/cloudrun-hello']
-name: 'gcr.io/cloud-builders/gcloud'
args:
[
"run",
"deploy",
"hellotest",
" - image",
"gcr.io/project_id/cloudrun-hello",
" - region",
"us-central1",
" - platform",
"managed",
" - allow-unauthenticated",
]
또한 새 태그를 사용하여 Cloud Run hello 응용 프로그램을 구축한 다음 TerraForm 구성에서 Cloud Run을 업데이트하여 새 태그 배치를 사용할 수 있습니다.Cloud Run은 애플리케이션 업데이트를 알지 못하며 GCR에서 최신 이미지를 자동으로 추출하지 않습니다.위의 gcloud 클라우드 구축 설정에서 docker 용기 이미지 구축을 실행할 수 있는 새 태그를 사용할 수 있습니다즉
args: [ 'build', '-t', 'gcr.io/project_id/cloudrun-hello:v2', '.']
docker push 명령과 gcloud deploy 명령을 실행하는 것이 아닙니다. 오버헤드와 복잡성을 제거합니다.
그리고 모듈 HelloAPI로 돌아가서 docker 이미지를 위의cloudbild 단계 설정에 설정된 버전으로 변경합니다.
피드백을 알려주세요.
Reference
이 문제에 관하여(CloudRun 및 CloudEndpoints 제공), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/pauld/terraform-iac-on-google-cloud-platform-provisioning-cloudrun-and-cloudendpoints-2f2f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)