IBM Cloud Functions Action/Trigger/Rule을 yaml 파일로 배포
소개
※ 일단 「 IBM Cloud Schematics (Terraform)의 External Resource를 사용하여 CIS Whitelisted IP를 Security Group에 적용 」의 계속입니다.
공식 문서의 「 Deploying entities with a manifest file 」의 내용입니다.
IBM Cloud Functions를 yaml로 템플리트해 두면 이렇게 할 수 있습니다.
ibmcloud fn deploy
단발로 구성 할 수 있습니다 구성 이미지 다이어그램
이번에는 Functions에서 매시간 IBM Cloud Schematics (Terraform) Apply를 킥하는 기능을 구현합니다.
사전 준비
IBM Cloud Schematics 작업 공간 작성
IBM Cloud Schematics (Terraform)의 External Resource를 사용하여 CIS Whitelisted IP를 Security Group에 적용을 참조하여 IBM Cloud Schematics Workspace를 준비하십시오.
GitHub에서 다운로드
GitHub에 있는 파일을 다운로드합니다.
git clone https://github.com/khayama/fn-schematics-apply.git
cd fn-schematics-apply
이번 Functions 배포용 yaml에서는 다음과 같이 정의합니다.khayama/ibmcloud-cli
의 Docker 이미지를 1 시간마다 기동해, ibmcloud terraform apply
를 실행하는 Function 입니다.
Functions 실행 파라미터는, 환경 변수의 값을 취득해 포함하는 형태로 정의하고 있습니다.
schematics-apply-everyhour.ymlpackages:
schematics_package:
version: 1.0
license: Apache-2.0
actions:
schematics-apply:
version: 1.0
description: schematics apply with IBMCLOUD_API_KEY, WORKSPACE_ID
docker: khayama/ibmcloud-cli
function: schematics-apply.sh
inputs:
IBMCLOUD_API_KEY: $IBMCLOUD_API_KEY
WORKSPACE_ID: $WORKSPACE_ID
triggers:
everyhour:
feed: /whisk.system/alarms/alarm
inputs:
cron: "0 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * *"
rules:
schematics-apply-everyhour:
description: Action is triggered every hour
action: schematics-apply
trigger: everyhour
IBM Cloud Schematics 작업 공간 작성
IBM Cloud Schematics (Terraform)의 External Resource를 사용하여 CIS Whitelisted IP를 Security Group에 적용을 참조하여 IBM Cloud Schematics Workspace를 준비하십시오.
GitHub에서 다운로드
GitHub에 있는 파일을 다운로드합니다.
git clone https://github.com/khayama/fn-schematics-apply.git
cd fn-schematics-apply
이번 Functions 배포용 yaml에서는 다음과 같이 정의합니다.
khayama/ibmcloud-cli
의 Docker 이미지를 1 시간마다 기동해, ibmcloud terraform apply
를 실행하는 Function 입니다.Functions 실행 파라미터는, 환경 변수의 값을 취득해 포함하는 형태로 정의하고 있습니다.
schematics-apply-everyhour.yml
packages:
schematics_package:
version: 1.0
license: Apache-2.0
actions:
schematics-apply:
version: 1.0
description: schematics apply with IBMCLOUD_API_KEY, WORKSPACE_ID
docker: khayama/ibmcloud-cli
function: schematics-apply.sh
inputs:
IBMCLOUD_API_KEY: $IBMCLOUD_API_KEY
WORKSPACE_ID: $WORKSPACE_ID
triggers:
everyhour:
feed: /whisk.system/alarms/alarm
inputs:
cron: "0 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23 * * *"
rules:
schematics-apply-everyhour:
description: Action is triggered every hour
action: schematics-apply
trigger: everyhour
ibmcloud 명령 준비
명령에 사용할 변수를 정의합니다.
export REGION="jp-tok"
export RESOURCE_GROUP="Default"
export WORKSPACE_NAME="khayama-classic-sg-allow-cis"
ibmcloud
명령으로 로그인하여 플러그인을 설치합니다.ibmcloud login
ibmcloud login -a cloud.ibm.com
ibmcloud target -r $REGION -g $RESOURCE_GROUP
ibmcloud plugin install cloud-functions
ibmcloud plugin install schematics
Functions 배포
Functions namespace 만들기
namespace
를 만들고 속성을 설정합니다.
ibmcloud fn namespace create khayama-functions
ibmcloud fn namespace target khayama-functions
Functions 용 API Key 발급 및 취득
Functions용 API Key를 발행하여 json
파일로 저장합니다.
API Key는 환경 변수에 정의되어 Functions 실행 매개 변수에서 사용할 수 있습니다.
ibmcloud iam api-key-create khayama-fn -d "for cloud functions access" --file khayama-fn-api-key.json
export IBMCLOUD_API_KEY=`cat khayama-fn-api-key.json | jq -r '.apikey'`
그런 다음 IBM Cloud Schematics 작업 공간 ID도 환경 변수에 정의하여 Functions 실행 매개변수에서 사용할 수 있도록 합니다.
export WORKSPACE_ID=`ibmcloud terraform workspace list --json | jq -r .workspaces | jq -r '.[] | select (.name=="'$WORKSPACE_NAME'") | .id'`
yaml 파일을 지정하여 배포
이제 Functions Action/Trigger/Rule을 한 번에 배포할 수 있습니다.
ibmcloud fn deploy --manifest schematics-apply-everyhour.yml
--> Success: Deployment completed successfully.
작성되었는지 확인하는 명령입니다.
ibmcloud fn package list
ibmcloud fn action list
ibmcloud fn trigger list
ibmcloud fn rule list
방금 만든 Functions를 실행하여 결과를 확인합니다.
ibmcloud fn action invoke schematics_package/schematics-apply --result
{
"message": "Applied, Your Activity ID is 6bc7d63f5794bf71f1106e9896b75aed."
}
또한 잠시 기다리면 매 시간마다 실행되고 있음을 확인할 수있었습니다.
작성한 Functions의 Action/Trigger/Rule을 한번에 삭제하려면 이 명령을 실행합니다.
ibmcloud fn undeploy --manifest schematics-apply-everyhour.yml
--> Success: Undeployment completed successfully.
사이고에게
https://api.cis.cloud.ibm.com/v1/ips
에 있는 IP 주소 정보에 업데이트가 있어도 1시간 이내에 Security Group에 적용되는 구조가 만들어졌습니다.
클라우드를 사용하면 IP 주소가 바뀔 수 있으므로 이러한 메커니즘을 사용하여 유지 보수가 필요 없으며 자동으로 적용하면 상당히 편해질 것입니다.
참고 링크
ibmcloud fn namespace create khayama-functions
ibmcloud fn namespace target khayama-functions
ibmcloud iam api-key-create khayama-fn -d "for cloud functions access" --file khayama-fn-api-key.json
export IBMCLOUD_API_KEY=`cat khayama-fn-api-key.json | jq -r '.apikey'`
export WORKSPACE_ID=`ibmcloud terraform workspace list --json | jq -r .workspaces | jq -r '.[] | select (.name=="'$WORKSPACE_NAME'") | .id'`
ibmcloud fn deploy --manifest schematics-apply-everyhour.yml
--> Success: Deployment completed successfully.
ibmcloud fn package list
ibmcloud fn action list
ibmcloud fn trigger list
ibmcloud fn rule list
ibmcloud fn action invoke schematics_package/schematics-apply --result
{
"message": "Applied, Your Activity ID is 6bc7d63f5794bf71f1106e9896b75aed."
}
ibmcloud fn undeploy --manifest schematics-apply-everyhour.yml
--> Success: Undeployment completed successfully.
https://api.cis.cloud.ibm.com/v1/ips
에 있는 IP 주소 정보에 업데이트가 있어도 1시간 이내에 Security Group에 적용되는 구조가 만들어졌습니다.클라우드를 사용하면 IP 주소가 바뀔 수 있으므로 이러한 메커니즘을 사용하여 유지 보수가 필요 없으며 자동으로 적용하면 상당히 편해질 것입니다.
참고 링크
Reference
이 문제에 관하여(IBM Cloud Functions Action/Trigger/Rule을 yaml 파일로 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/khayama/items/dd81cb137d44dd1e5332텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)