簡體   English   中英

如何使用 Terraform 創建 AWS SSM 文檔 Package

[英]How to create an AWS SSM Document Package using Terraform

使用 Terraform,我正在嘗試為 Chrome 創建一個 AWS SSM 文檔 Package,以便我可以將它安裝在我擁有的各種 EC2 實例上。 我通過 terraform 定義這些步驟:

  1. 上傳包含 Chrome 安裝程序的 zip 以及安裝和卸載 powershell 腳本。
  2. 將 ZIP 添加到 SSM package。

但是,當我執行terraform apply時,我收到以下錯誤...

更新 SSM 文檔時出錯:InvalidParameterValueException:輸入請求中未提供 AttachmentSource。 狀態碼:400,請求 ID:8d89da70-64de-4edb-95cd-b5f52207794c

我的main.tf的內容如下:

# 1. Add package zip to s3
resource "aws_s3_bucket_object" "windows_chrome_executable" {
  bucket = "mybucket"
  key    = "ssm_document_packages/GoogleChromeStandaloneEnterprise64.msi.zip"
  source = "./software-packages/GoogleChromeStandaloneEnterprise64.msi.zip"

  etag = md5("./software-packages/GoogleChromeStandaloneEnterprise64.msi.zip")
}

# 2. Create AWS SSM Document Package using zip.
resource "aws_ssm_document" "ssm_document_package_windows_chrome" {
  name          = "windows_chrome"
  document_type = "Package"

  attachments_source {
    key = "SourceUrl"
    values = ["/path/to/mybucket"]
  }

  content = <<DOC
  {
    "schemaVersion": "2.0",
    "version": "1.0.0",
    "packages": {
        "windows": {
            "_any": {
                "x86_64": {
                    "file": "GoogleChromeStandaloneEnterprise64.msi.zip"
                }
            }
        }
    },
    "files": {
        "GoogleChromeStandaloneEnterprise64.msi.zip": {
            "checksums": {
                "sha256": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
            }
        }
    }
  }
DOC
}

如果我將文件從 zip 更改為 vanilla msi,我不會收到錯誤消息,但是,當我在 AWS 控制台中導航到 package 時,它會告訴我 install.ps1 和 uninstall.ps1 文件丟失(因為顯然他們不包括在內)。

有沒有人遇到過上述錯誤,您知道如何解決嗎? 或者是否有人參考了如何執行此操作的詳細示例?

謝謝你。

我遇到了同樣的問題,為了解決這個問題,我在源 url 值參數中添加了一個斜杠:

attachments_source {
  key = "SourceUrl"
  values = ["/path/to/mybucket/"]
}

我最好的猜測是將 package 規范中的文件名附加到附件源值中提供的值,因此它需要尾部斜杠來構建實際文件的有效路徑。

這是在 s3 中為附件設置的方式:

attachments_source {
    key    = "S3FileUrl" 
    values = ["s3://packer-bucket/packer_1.7.0_linux_amd64.zip"]
    name   = "packer_1.7.0_linux_amd64.zip"
}

我意識到在上面的示例中,terraform 無法識別兩個資源之間的依賴關系,即需要在 aws_ssm_document 之前創建 s3 object。 因此,我在 aws_ssm_document 中添加了以下顯式依賴項:

  depends_on = [
    aws_s3_bucket_object.windows_chrome_executable
  ]

暫無
暫無

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

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