簡體   English   中英

Terraform 調用SSM文檔

[英]Terraform to call an SSM document

有人可以在這里幫助我嗎? 我正在嘗試創建自動化以定期停止 ec2 實例。 我知道如何使用數據源:

    data "aws_ssm_document" "ssm_doc" {
      name            = "AWS-StopEC2Instance"
      document_format = "JSON"
    }

當我嘗試創建關聯時:

    resource "aws_ssm_association" "example" {
      name = ssm_doc
      
    
      targets {
        key    = "InstanceIds"
        values = [aws_instance.ex.id]
      }
    }

當我運行它時,我收到錯誤: Error creating SSM association: ValidationException: The assume role is invalid.

誰能幫助我並告訴我如何通過角色?

根據文檔aws_ssm_association ,此資源沒有特定於iam role的配置。 所以錯誤可能在其他地方。

來自文檔故障排除 Systems Manager Automation

無效的承擔角色

運行自動化時,代入角色要么在 Runbook 中提供,要么作為 Runbook 的參數值傳遞。 如果未正確指定或配置代入角色,則可能會出現不同類型的錯誤。

您需要檢查您正在導入的ssm_doc ,它基本上只是一個cloudformation模板,因此您必須更正那里的角色。

方法 2:使用 IAM 為自動化配置角色

AWS-StopEC2Instance采用AutomationAssumeRole參數。 您必須為 SSM 提供角色以承擔執行您的代碼。 例如:


resource "aws_iam_role" "ssm" {
  path               = "/"
  assume_role_policy = <<EOL
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": ["ec2.amazonaws.com", "ssm.amazonaws.com"]
      },
      "Action": "sts:AssumeRole"
    }
  ]
}
EOL

  managed_policy_arns = ["arn:aws:iam::aws:policy/service-role/AmazonSSMAutomationRole"]

  inline_policy {
    name = "my_inline_policy"

    policy = jsonencode({
      Version = "2012-10-17"
      Statement = [
        {
          Action   = ["iam:PassRole"]
          Effect   = "Allow"
          Resource = "*"
        },
      ]
    })
  }
}

此外, aws_ssm_association.example中的targets塊適用於CommandPolicy或速率控制Automation的 SSM 文檔類型。 對於Automation的簡單執行,不需要targets

resource "aws_ssm_association" "example" {

  name = "AWS-StopEC2Instance"
  
  parameters = {
      AutomationAssumeRole = aws_iam_role.ssm.arn
      instanceIds = aws_instance.ex.id
  }  
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM