실행하기

Cloud Functions의 Action과 Trigger를 실행하기 위해서는 아래의 방법을 사용할 수 있습니다.

주의 : Beta에서 제공하고 있던 실행 URL은 3개월의 유예를 가지고 2019년 8월경 일괄 삭제될 예정입니다. 종료시점까지 기존 사용하던 방법으로 사용 가능하지만, 안정적인 사용을 위해서는 아래 API Gateway와 연결해서 사용하는 방법으로 진행해 주시기 바랍니다.

기본 정보

원격지에서 action을 실행하기 위해서는 API Gateway 상품을 이용하여 API 실행 URL을 만들어야 합니다.

  • 현재 외부연결 주소를 만들 수 있는 객체는 각 개별 Action과 none Type의 Basic Trigger입니다.
  • API Gateway 상품에 가입되지 않은 상태라면 상품 내 서비스 이용등록 후 외부 연결 주소 만들기를 사용할 수 있습니다.
  • 위의 방법 이외에 CLI와 OpenAPI를 이용하여 실행할 수 있는 방법을 제공하려고 준비 중입니다.

외부 연결 주소 만들기 표기의 예

compute-15-601

외부 연결 주소 만들기로 진입하면 사용자 필요에 따라 기존 API Gateway에 만들어놓은 Product를 선택하거나 새로 생성하여 URL을 만들고 Action/Trigger와 연결할 수 있습니다.

compute-15-603

API Gateway URL을 생성하기 위해서는 아래의 단계를 순차적으로 진행합니다.

  1. Product 선택/생성

  2. API 선택/생성

  3. Resource 생성

    이전 과정에서 선택된 Product > API 위치에 랜덤한 이름으로 Resource를 생성한다.

  4. Stage 선택/생성

  5. 선택한 Stage에 배포

( API Gateway에 대한 상세한 설명은 API Gateway 상품의 설명과 가이드를 참조하세요.)

URL 정보

각 Action과 Trigger는 호출할 수 있는 URL 정보를 포함하고 있습니다.

Web 속성이 True인 Action은 GET, POST, PUT, DELETE, OPTION 등 REST 요청 형태를 모두 지원하며, 일반 Action과 Trigger는 POST 요청으로 실행할 수 있습니다.

안내: 현재 API Gateway를 이용한 Action/Trigger 연결에는 basic Auth 값이 필요치 않습니다. 비공개 호출이 필요하여 인증을 추가하고 싶으실 경우, API Gateway 상품 내 인증 값을 추가하여 사용하실 수 있습니다. (API Gateway -API 호출하기 참조)

외부 연결 주소 만들기에 노출되는 API Key와 추가 정보는 향후 OpenAPI와 CLI를 사용하는 데 이용됩니다.

Action URL 예

compute-15-602

Trigger URL 예

compute-15-603

실행

Curl을 이용해서 terminal에서 실행

요청 URL 뒤의 result 값은 true일 경우 결과만 간추려 보여주며, false일 경우 실행과 관련된 여러 메타데이터를 제공합니다.

일반 Action과 Trigger 실행

일반 Action이나 Trigger는 아래 4가지 값을 입력해 실행할 수 있습니다.

  • ActionURL
  • 전달할 파라미터(JSON 형태)
$curl -X POST -d "{전달할 파라미터}"  -H "Content-Type: application/json" "{ActionURL}?blocking=true&result=true"

일반 Action은 HTTP POST로만 실행 가능합니다. REST 형태로 제공하기 위해서는 Web 속성의 Action을 만들어야 합니다.

Web 속성의 Action 실행

웹 속성의 Action은 HTTP POST만 아니라, REST 형태로 제공하는 모든 형태의 요청의 처리가 가능합니다.

$curl -X GET -d "{전달할 파라미터}"  -H "Content-Type: application/json"  "{ActionURL}?blocking=true&result=true"

Sample 값을 이용한 예

값이 아래와 같을 때 요청 예는 다음과 같습니다.

항목 값 (예시)
ActionURL "https://zzz"
전달할 파라미터 {"info":"qqq"}

일반 Action, Trigger

$curl -X POST -d "{/"info/":/"qqq/"}"  -H "Content-Type: application/json" -H "https://zzz?blocking=true&result=true"

Web 속성 Action

$curl -X GET -d "{/"info/":/"qqq/"}"  -H "Content-Type: application/json" "https://zzz?blocking=true&result=true"

Node JS를 이용해서 실행하기

일반 Action, Trigger

// npm install axios

const axios = require('axios');
 var config = {
  headers: {
    'Content-Type': 'application/json',
  }
};

axios.post(
    '{ActionURL}?blocking=true&result=true'
    , {}
    , config)
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.log(error);
  });

Web 속성 Action

// npm install axios

const axios = require('axios');
 var config = {
  headers: {
    'Content-Type': 'application/json',
  }
};

axios.get('{ActionURL}?blocking=true&result=true', config)
  .then(response => {
    console.log(response.data);
  })
  .catch(error => {
    console.log(error);
  });

Spring Code를 이용해서 실행하기

일반 Action, Trigger

Map<String, String> params = new HashMap<>();

HttpHeaders header = new HttpHeaders();
header.add(HttpHeaders.CONTENT_TYPE, "application/json");
HttpEntity<Map> requestEntity = new HttpEntity<>(params, header);
ResponseEntity<Map> response = restTemplate
    .exchange("{ActionURL}?blocking=true&result=true"
    , HttpMethod.POST, requestEntity, Map.class);

Web 속성 Action

HttpHeaders header = new HttpHeaders();
header.add(HttpHeaders.CONTENT_TYPE, "application/json");
HttpEntity<Map> requestEntity = new HttpEntity<>(header);
ResponseEntity<Map> response = restTemplate.exchange("{ActionURL}?blocking=true&result=true", HttpMethod.GET, requestEntity, Map.class);

Go 코드를 이용해서 실행하기

일반 Action & Trigger

package main
import (
    "fmt"
    "io/ioutil"
    "net/http"
    "bytes"
)

func main() {
    var params = []byte(`{}`)
    req, err := http.NewRequest("POST", "{ActionURL}?blocking=true&result=true", bytes.NewBuffer(params))
    if err != nil {
        panic(err)
    }

  req.Header.Add("Content-Type", "application/json")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    bytes, _ := ioutil.ReadAll(resp.Body)
    str := string(bytes)
    fmt.Println(str)
}

Web 속성 Action

package main
import (
    "fmt"
    "io/ioutil"
    "net/http"
)

func main() {
    req, err := http.NewRequest("GET", "{ActionURL}?blocking=true&result=true", nil)
    if err != nil {
        panic(err)
    }

    req.Header.Add("Content-Type", "application/json")

    client := &http.Client{}
    resp, err := client.Do(req)
    if err != nil {
        panic(err)
    }
    defer resp.Body.Close()

    bytes, _ := ioutil.ReadAll(resp.Body)
    str := string(bytes)
    fmt.Println(str)
}

연관 정보 바로가기

아래 가이드에서 연관 정보를 확인할 수 있습니다.

""에 대한 건이 검색되었습니다.

    ""에 대한 검색 결과가 없습니다.

    처리중...