すべてのプロダクト
Search
ドキュメントセンター

CloudOps Orchestration Service:複数 ECS インスタンスへの Logtail の一括インストール

最終更新日:Jan 17, 2025

テンプレート名

ACS-ECS-BulkyInstallLogAgent

今すぐ実行

テンプレートの説明

複数の Elastic Compute Service (ECS) インスタンスに Logtail を一度にインストールします。

テンプレートの種類

自動化

所有者

Alibaba Cloud

入力パラメーター

パラメーター

説明

種類

必須

デフォルト値

制限

targets

Logtail をインストールする ECS インスタンス。

Json

はい

regionId

リージョン ID。

String

いいえ

{{ ACS::RegionId }}

action

実行する操作。

String

いいえ

install

overwrite

ECS インスタンスに Logtail が既にインストールされている場合、Logtail の構成を上書きするかどうかを指定します。

Boolean

いいえ

False

rateControl

レート制御設定。

Json

いいえ

{'Mode': 'Concurrency', 'MaxErrors': 0, 'Concurrency': 10}

OOSAssumeRole

CloudOps Orchestration Service (OOS) がアシュームする Resource Access Management (RAM) ロール。

String

いいえ

""

出力パラメーター

パラメーター

説明

種類

commandOutput

String

テンプレートを実行するために必要な権限ポリシー

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "ecs:DescribeInstances",
                "ecs:DescribeInvocationResults",
                "ecs:DescribeInvocations",
                "ecs:RunCommand"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

参照

詳細については、GitHub の ACS-ECS-BulkyInstallLogAgent.yml をご参照ください。

テンプレートコンテンツ

FormatVersion: OOS-2019-06-01
Description:
  en: Use this template to install sls agent on ecs
  zh-cn: the description in Chinese
  name-en: ACS-ECS-BulkyInstallLogAgent
  name-zh-cn: the description in Chinese
  categories:
    - run_command
Parameters:
  regionId:
    Type: String
    Label:
      en: RegionId
      zh-cn: the description in Chinese
    AssociationProperty: RegionId
    Default: '{{ ACS::RegionId }}'
  action:
    Type: String
    Label:
      en: Action
      zh-cn: the description in Chinese
    AllowedValues:
      - install
      - upgrade
      - uninstall
    Default: install
  overwrite:
    Description:
      en: 'If logAgent exists in the instance, choose whether to overwrite LogAgent(Default no).'
      zh-cn: the description in Chinese
    Label:
      en: Overwrite
      zh-cn: the description in Chinese
    Type: Boolean
    Default: false
  targets:
    Type: Json
    Label:
      en: TargetInstance
      zh-cn: the description in Chinese
    AssociationProperty: Targets
    AssociationPropertyMetadata:
      ResourceType: 'ALIYUN::ECS::Instance'
      RegionId: regionId
  rateControl:
    Label:
      en: RateControl
      zh-cn: the description in Chinese
    Type: Json
    AssociationProperty: RateControl
    Default:
      Mode: Concurrency
      MaxErrors: 0
      Concurrency: 10
  OOSAssumeRole:
    Label:
      en: OOSAssumeRole
      zh-cn: the description in Chinese
    Type: String
    Default: ''
RamRole: '{{ OOSAssumeRole }}'
Tasks:
  - Name: getInstance
    Description:
      en: Views the ECS instances
      zh-cn: the description in Chinese
    Action: 'ACS::SelectTargets'
    Properties:
      ResourceType: 'ALIYUN::ECS::Instance'
      RegionId: '{{ regionId }}'
      Filters:
        - '{{ targets }}'
    Outputs:
      instanceIds:
        Type: List
        ValueSelector: 'Instances.Instance[].InstanceId'
      instanceInfos:
        Type: List
        ValueSelector: '.Instances.Instance[] | {"osType":.OSType, "instanceId":.InstanceId}'
  - Name: runCommand
    Action: 'ACS::ECS::RunCommand'
    Properties:
      commandContent:
        'Fn::If':
          - 'Fn::Equals':
              - 'Fn::Jq':
                  - First
                  - '.|map(select(.instanceId == "{{ ACS::TaskLoopItem }}").osType)[]'
                  - '{{ getInstance.instanceInfos }}'
              - linux
          - |-
            set -e
            installLogAgent(){
                message=`./logtail.sh install {{ regionId }} 2>/dev/null`
                if [ $?  = 0 ]; then
                    cat /usr/local/ilogtail/app_info.json
                else
                    echo "$message"
                    exit 1
                fi
            }
            wget http://logtail-release-{{ regionId }}.oss-{{ regionId }}-internal.aliyuncs.com/linux64/logtail.sh -q -O logtail.sh;
            if [ $?  != 0 ]; then
              echo "Failed to download logtail_installer, Please check your network service."
              exit 1
            fi
            chmod 755 logtail.sh;
            if [ "{{action}}" = "install" ]; then
                wetherOverwriteAgent="{{overwrite}}"
                if [ $wetherOverwriteAgent = "true" ]; then
                    installLogAgent
                else
                    logVersionPath="/usr/local/ilogtail/app_info.json"
                    if [ -f "$logVersionPath" ]; then
                        echo 'already has LogAgent'
                        exit 0
                    else
                        installLogAgent
                    fi
                fi
            elif [ "{{action}}" = "upgrade" ]; then
                message=`./logtail.sh upgrade 2>/dev/null`
                if [ $?  = 0 ]; then
                  cat /usr/local/ilogtail/app_info.json
                else
                  echo "$message"
                  exit 1
                fi
            else
                ./logtail.sh uninstall
            fi
          - |-
            function installLogAgent
            {
                .\logtail_installer.exe install {{ regionId }}
                if (!  $?)
                 {
                   echo "Failed to install install log and to start log service Failed, please try again."
                   exit 1
                 }
                echo 'Install complete'
            }

            $action="{{ action }}"

            $pathExistOrNot = Test-Path -Path "C:\Users\Administrator\OOSPackages"
            if ($pathExistOrNot)
            {
              cd C:\Users\Administrator\OOSPackages
            } else
            {
              mkdir C:\Users\Administrator\OOSPackages
              cd C:\Users\Administrator\OOSPackages
              echo 'File created'
            }

            $client = new-object System.Net.WebClient
            $client.DownloadFile('http://logtail-release-{{ regionId }}.oss-{{ regionId }}-internal.aliyuncs.com/win/logtail_installer.zip', 'C:\Users\Administrator\OOSPackages\logtail_installer.zip')
            if (!  $?)
            {
              echo "Failed to download logtail_installer, Please check your network service."
              exit 1
            }
            Expand-Archive -Force -Path C:\Users\Administrator\OOSPackages\logtail_installer.zip -DestinationPath C:\Users\Administrator\OOSPackages
            switch($action)
            {
                "install" {
                    $wetherOverwriteAgent = "{{overwrite}}"

                    if ($wetherOverwriteAgent -eq "true")
                    {
                        installLogAgent
                    } else
                    {
                        if ([Environment]::Is64BitOperatingSystem)
                        {
                            $logAgentPath = Test-Path -Path "C:\Program Files (x86)\Alibaba\Logtail"
                            if ($logAgentPath)
                            {
                                echo 'already has LogAgent'
                                exit 0
                            } else
                            {
                                installLogAgent
                            }
                        } else
                        {
                            $logAgentPath = Test-Path -Path "C:\Program Files\Alibaba\Logtail"
                            if ($logAgentPath)
                            {
                                echo 'already has LogAgent'
                            } else
                            {
                                installLogAgent
                            }
                        }
                    }

                }
                "upgrade" {
                    .\logtail_installer.exe uninstall
                    .\logtail_installer.exe install {{ regionId }}
                    echo 'upgrade complete'
                }
                "uninstall" {
                    .\logtail_installer.exe uninstall
                    echo 'uninstall complete'
                }
            }
            $allFile = Get-ChildItem -Path "C:\Users\Administrator\OOSPackages"
            foreach($file in $allFile)
            {
              Remove-Item $file.FullName -Recurse -Force
            }
            cd ..
            del C:\Users\Administrator\OOSPackages
      instanceId: '{{ ACS::TaskLoopItem }}'
      regionId: '{{ regionId }}'
      commandType:
        'Fn::If':
          - 'Fn::Equals':
              - 'Fn::Jq':
                  - First
                  - '.|map(select(.instanceId == "{{ ACS::TaskLoopItem }}").osType)[]'
                  - '{{ getInstance.instanceInfos }}'
              - linux
          - RunShellScript
          - RunPowerShellScript
    Loop:
      Items: '{{ getInstance.instanceIds }}'
      RateControl: '{{ rateControl }}'
      Outputs:
        commandOutputs:
          AggregateType: 'Fn::ListJoin'
          AggregateField: commandOutput
    Outputs:
      commandOutput:
        Type: String
        ValueSelector: invocationOutput
Outputs:
  commandOutput:
    Type: String
    Value: '{{ runCommand.commandOutputs }}'
Metadata:
  ALIYUN::OOS::Interface:
    ParameterGroups:
      - Parameters:
          - action
          - overwrite
        Label:
          default:
            zh-cn: the description in Chinese
            en: Configure Parameters
      - Parameters:
          - regionId
          - targets
        Label:
          default:
            zh-cn: the description in Chinese
            en: Select Ecs Instances
      - Parameters:
          - rateControl
          - OOSAssumeRole
        Label:
          default:
            zh-cn: the description in Chinese
            en: Control Options