如何使用 Terraform 创建 AWS SSM 文档包
How to create an AWS SSM Document Package using Terraform
我正在尝试使用 Terraform 为 Chrome 创建一个 AWS SSM 文档包,这样我就可以将它安装在我拥有的各种 EC2 实例上。我通过 terraform 定义这些步骤:
- 上传包含 Chrome 安装程序以及安装和卸载 powershell 脚本的 zip。
- 将该 ZIP 添加到 SSM 包中。
但是,当我执行 terraform apply 时,我收到以下错误...
Error updating SSM document: InvalidParameterValueException:
AttachmentSource not provided in the input request.
status code: 400, request 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 控制台中的包时,它告诉我安装。ps1 和uninstall.ps1 文件丢失(因为显然它们不包括在内)。
有没有人遇到过上述错误,你知道如何解决吗?或者有人参考了如何执行此操作的详细示例吗?
谢谢。
我 运行 遇到了同样的问题,为了解决它,我在源 url 值参数中添加了一个尾部斜线:
attachments_source {
key = "SourceUrl"
values = ["/path/to/mybucket/"]
}
我最好的猜测是它将包规范中的文件名附加到附件源值中提供的值,因此它需要尾部斜杠来构建实际文件的有效路径。
这是为 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 对象。因此,我在 aws_ssm_document:
中添加了以下显式依赖项
depends_on = [
aws_s3_bucket_object.windows_chrome_executable
]
我正在尝试使用 Terraform 为 Chrome 创建一个 AWS SSM 文档包,这样我就可以将它安装在我拥有的各种 EC2 实例上。我通过 terraform 定义这些步骤:
- 上传包含 Chrome 安装程序以及安装和卸载 powershell 脚本的 zip。
- 将该 ZIP 添加到 SSM 包中。
但是,当我执行 terraform apply 时,我收到以下错误...
Error updating SSM document: InvalidParameterValueException: AttachmentSource not provided in the input request. status code: 400, request 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 控制台中的包时,它告诉我安装。ps1 和uninstall.ps1 文件丢失(因为显然它们不包括在内)。
有没有人遇到过上述错误,你知道如何解决吗?或者有人参考了如何执行此操作的详细示例吗?
谢谢。
我 运行 遇到了同样的问题,为了解决它,我在源 url 值参数中添加了一个尾部斜线:
attachments_source {
key = "SourceUrl"
values = ["/path/to/mybucket/"]
}
我最好的猜测是它将包规范中的文件名附加到附件源值中提供的值,因此它需要尾部斜杠来构建实际文件的有效路径。
这是为 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 对象。因此,我在 aws_ssm_document:
中添加了以下显式依赖项 depends_on = [
aws_s3_bucket_object.windows_chrome_executable
]