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로 템플리트해 두면 이렇게 할 수 있습니다.
  • CI/CD 쉬운
  • Function의 이식성이 높습니다
  • 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.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
    

  • openwhisk-wskdeploy/spec_actions.md at master · apache/openwhisk-wskdeploy
  • openwhisk-wskdeploy/spec_trigger.md at master · apache/openwhisk-wskdeploy
  • openwhisk-wskdeploy/spec_rule.md at master · apache/openwhisk-wskdeploy
  • openwhisk/actions-docker.md at master · apache/openwhisk

  • 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 주소가 바뀔 수 있으므로 이러한 메커니즘을 사용하여 유지 보수가 필요 없으며 자동으로 적용하면 상당히 편해질 것입니다.

    참고 링크


  • jq를 활용하여 API 응답 등에서 원하는 정보만 추출 [중급편] | Developers.IO
  • Whisk Deploy — Alarm Trigger - Apache OpenWhisk - Medium
  • 좋은 웹페이지 즐겨찾기