Pulumi에서 Google Cloud Functions에 TypeScript 함수를 배포하는 방법

Pulumi는 인프라 구성을 TypeScript와 같은 프로그래밍 언어로 정의할 수 있으며 AWS 및 Google Cloud Platform에 배포를 자동화할 수 있는 도구입니다. 이 게시물에서는 Google Cloud Functions에 TypeScript 함수를 배포할 때 Pulumi를 사용하는 방법을 보여줍니다.

Pulumi는 인프라와 앱을 통합할 수 있는 것이 특징



Terraform과 같은 인프라 구성 관리 도구에서 Google Cloud Functions에 함수를 배포하는 경우 인프라 구성 정의와 Functions와 같은 애플리케이션 코드는 별도의 파일이 되는 것이 일반적입니다.

Pulumi는 색다르게 변하고 인프라 구성과 함수를 하나의 파일에 쓸 수 있는 것이 특징입니다. 인프라 구성을 TypeScript로 정의하고 Cloud Functions를 TypeScript로 구현하면 인프라와 앱을 통합한 원활한 코드로 만들 수 있습니다.

Pulumi에서 Cloud Functions를 손쉽게 배포



Pulumi에서 Cloud Functions를 배포하는 가장 쉬운 방법은 인프라 구성 정의에 함수 구현을 혼합하여 작성하는 패턴입니다. 그 패턴에서는 다음과 같은 코드가됩니다.

index.ts
import * as gcp from "@pulumi/gcp";

// Cloud Functions APIを有効化する
const cloudFunctionsService = new gcp.projects.Service(
  "cloudFunctionsService",
  {
    disableDependentServices: true,
    service: "cloudfunctions.googleapis.com",
  }
);

// デプロイする関数のアプリケーションコード
const helloWorld: gcp.cloudfunctions.HttpCallback = (req, res) => {
  res.send("Hello World!");
};

// デプロイする関数のインフラ構成定義
const helloWorldFunction = new gcp.cloudfunctions.HttpCallbackFunction(
  "helloWorldFunction",
  {
    runtime: "nodejs12",
    callback: helloWorld,
  },
  { dependsOn: cloudFunctionsService }
);

// デプロイ後に表示する情報
export const functionUrl = helloWorldFunction.httpsTriggerUrl;

발췌하고 설명하면, 다음 helloWorld 라는 변수에 대입한 부분이 어플리케이션 코드, 즉 함수의 구현이 됩니다:
const helloWorld: gcp.cloudfunctions.HttpCallback = (req, res) => {
  res.send("Hello World!");
};

그런 다음 helloWorldFunction는 인프라의 구성 정의입니다.
const helloWorldFunction = new gcp.cloudfunctions.HttpCallbackFunction(
  "helloWorldFunction",
  {
    runtime: "nodejs12",
    callback: helloWorld,
  },
  {/*...*/}
);

여기서 주목하고 싶은 것은, 위에서 정의한 어플리케이션 코드의 helloWorld를 그대로 대입할 수 있는 곳입니다. 이것이 Pulumi의 가장 큰 특징으로 인프라와 앱을 통합할 수 있는 곳입니다.

이 구성에서 pulumi up하고 배포하면 함수 URL이 발급되므로 즉시 함수를 사용할 수 있습니다.
$ curl https://asia-northeast1-${PROJECT}.cloudfunctions.net/helloWorldFunction-af3d854
Hello World!

요약



Pulumi를 사용하면 TypeScript에서 인프라 구성을 정의하면서 Cloud Functions 구현도 포함하는 방식으로 배포할 수 있습니다. 인프라와 앱을 일체화할 수 있으므로 보다 원활한 운용을 할 수 있게 되는 것이 특징입니다. Terraform과 비교하면 인프라 구성 관리를 위해 다른 언어를 기억할 필요가 없습니다.

또한 TypeScript 생태계의 혜택을 누릴 수 있는 이점도 있습니다. IDE에서는 코드 완성이 효과가 있으며, 배포 전에는 타입에 의한 정적 체크를 할 수 있거나, 앱 개발과 비슷한 개발 체험을 얻을 수 있습니다.

Pulumi는 TypeScript 프로그래머가 인프라를 다루는 장면에 궁합이 좋은 도구가 될 것이라고 생각합니다.

끝까지 읽어 주셔서 감사합니다. Twitter에서는, Qiita에 쓰지 않는 기술 재료 등도 트윗하고 있으므로, 좋으면 팔로우해 주시면 기쁩니다 Twitter@suin

좋은 웹페이지 즐겨찾기