[英]How to create an 'AWS::SSM::Document' with DocumentType of Package using CloudFormation
此 AWS CloudFormation 文檔建議可以管理 DocumentType 為“Package”的“AWS::SSM::Document”資源。 然而,實現這一目標所需的“內容”仍然是個謎。
是否可以通過 CloudFormation 創建一個“包”類型的文檔,如果可以,這個有效的 CLI 命令相當於一個 CloudFormation 模板(最好使用 YAML 格式)?
ssm create-document --name my-package --content "file://manifest.json" --attachments Key="SourceUrl",Values="s3://my-s3-bucket" --document-type Package
嘗試失敗。 使用的內容是使用 CLI 選項時提供的 manifest.json 的內聯版本。 使用 CloudFormation 時似乎沒有指定 AttachmentSource 的選項:
AWSTemplateFormatVersion: 2010-09-09
Resources:
Document:
Type: AWS::SSM::Document
Properties:
Name: 'my-package'
Content: !Sub |
{
"schemaVersion": "2.0",
"version": "Auto-Generated-1579701261956",
"packages": {
"windows": {
"_any": {
"x86_64": {
"file": "my-file.zip"
}
}
}
},
"files": {
"my-file.zip": {
"checksums": {
"sha256": "sha...."
}
}
}
}
DocumentType: Package
CloudFormation 錯誤
AttachmentSource not provided in the input request. (Service: AmazonSSM; Status Code: 400; Error Code: InvalidParameterValueException;
是的,這是可能的! 我已經使用DocumentType: Package
成功創建了一個資源,並且在堆棧成功后,該包顯示在 Distributor Packages 下的 SSM 控制台中。
您的 YAML 已准備就緒,但您還需要包含現在可用的Attachments
屬性。
這是一個工作示例:
AWSTemplateFormatVersion: "2010-09-09"
Description: Sample to create a Package type Document
Parameters:
S3BucketName:
Type: "String"
Default: "my-sample-bucket-for-package-files"
Description: "The name of the S3 bucket."
Resources:
CrowdStrikePackage:
Type: AWS::SSM::Document
Properties:
Attachments:
- Key: "SourceUrl"
Values:
- !Sub "s3://${S3BucketName}"
Content:
!Sub |
{
"schemaVersion": "2.0",
"version": "1.0",
"packages": {
"windows": {
"_any": {
"_any": {
"file": "YourZipFileName.zip"
}
}
}
},
"files": {
"YourZipFileName.zip": {
"checksums": {
"sha256": "7981B430E8E7C45FA1404FE6FDAB8C3A21BBCF60E8860E5668395FC427CE7070"
}
}
}
}
DocumentFormat: "JSON"
DocumentType: "Package"
Name: "YourPackageNameGoesHere"
TargetType: "/AWS::EC2::Instance"
注意:對於Attachments
屬性,在使用DocumentType: Package
時必須使用SourceUrl
鍵。 創建過程將在此 S3 存儲桶 URL 后附加一個“/”,並將其與您在清單中列出的每個文件名連接起來,該文件名是創建包時的Content
屬性。
似乎沒有直接的方法可以通過 CloudFormation (CFN) 創建帶有附件的 SSM 文檔。 您可以使用一種變通方法,例如使用支持的 Lambda CFN,您將使用 Lambda 調用 API SDK 來創建 SSM 文檔,然后使用 CFN 中的自定義資源來調用該 Lambda。
關於如何實施此解決方案有一些注意事項,如下所示:
sam deploy
而不是 CFN create stack
。data
json 中來從 lambda 獲取新創建資源的信息到 CFN,CFN 可以將其與 !GetAtt CustomResrc.Attribute 一起使用,您可以在此處找到更多詳細信息。此解決方案有一些缺點:
PS:如果您不必嚴格在CFN上工作,那么您可以嘗試使用Terraform:https ://www.terraform.io/docs/providers/aws/r/ssm_document.html
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.