【问题标题】:How to create an AWS SSM Document Package using Terraform如何使用 Terraform 创建 AWS SSM 文档包
【发布时间】:2020-07-20 20:06:18
【问题描述】:

使用 Terraform,我正在尝试为 Chrome 创建一个 AWS SSM 文档包,以便我可以将它安装在我拥有的各种 EC2 实例上。我通过 terraform 定义了这些步骤:

  1. 上传包含 Chrome 安装程序以及安装和卸载 powershell 脚本的 zip。
  2. 将该 ZIP 添加到 SSM 包中。

但是,当我执行 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 控制台中的包时,它会告诉我 install.ps1 和 uninstall.ps1 文件丢失(因为显然它们不包括在内)。

有没有人遇到过上述错误,您知道如何解决吗?或者有没有人参考如何做到这一点的详细示例?

谢谢。

【问题讨论】:

    标签: amazon-web-services terraform ssm


    【解决方案1】:

    我遇到了同样的问题,为了解决这个问题,我在源 url 值参数中添加了一个斜杠:

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

    我最好的猜测是它将包规范中的文件名附加到附件源值中提供的值,因此它需要尾部斜杠来构建实际文件的有效路径。

    【讨论】:

    【解决方案2】:

    这是在 s3 中为附件设置的方式:

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

    【讨论】:

      【解决方案3】:

      我意识到在上面的示例中,terraform 无法识别两个资源之间的依赖关系,即需要在 aws_ssm_document 之前创建 s3 对象。因此,我在 aws_ssm_document 中添加了以下显式依赖项:

        depends_on = [
          aws_s3_bucket_object.windows_chrome_executable
        ]
      

      【讨论】:

        猜你喜欢
        • 2021-12-01
        • 2021-05-20
        • 2021-05-22
        • 2022-11-02
        • 2018-04-26
        • 1970-01-01
        • 2020-11-10
        • 2020-10-27
        • 2020-05-12
        相关资源
        最近更新 更多