amazon-web-services - 将 CloudFormation 自定义 SNS 资源转换为 AWS CLI
问题描述
我正在尝试将供应商提供的 CloudFormation Stack 转换为 Terraform。有一个AWS::CloudFormation::CustomResource
用于发送 SNS 通知的方法:
...
"RegistrationNotification": {
"Type": "AWS::CloudFormation::CustomResource",
"Version": "1.0",
"Properties": {
"ServiceToken": {"Ref" : "SnsTopicRegistration"},
"Version": "1.0",
"AccountID": {
"Ref": "AWS::AccountId"
},
"CloudTrailCreated": {
"Ref": "EnableNewCloudTrail"
},
"IamRoleARN": {
"Fn::GetAtt": [
"iamRole",
"Arn"
]
}
}
}
...
我的计划是为aws sns publish
. 但是,CustomResource 属性是作为消息属性发送还是在消息正文中发送?
到目前为止,这是我尝试过的,但我不相信它有效。
message.txt:
{
"AccountID":"111111111111",
"CloudTrailCreated":"false",
"IAMRoleArn":"arn:aws:iam::111111111111:role/TestRole"
}
aws sns publish --target-arn "arn:aws:sns:us-west-2:123456789012:test-topic" --message file://message.txt
解决方案
在设置我自己的SNS->SQS管道并覆盖供应商的 SNS 目标后,我能够看到 CloudFormation 生成的完整消息:
message.txt:
{
"RequestType":"Create",
"ServiceToken":"arn:aws:sns:us-east-1:999999999999:registration",
"ResponseURL":"https://custom-resource-response-useast1.s3-us-east-1.amazonaws.com/arn%3Aaws%3Acloudformation%3Aus-east-1%3A111111111111%3Astack/Vendor_App/f16ba060-f981-11e8%7CRegistrationNotification%7C754d1dbc-2cc9-4b5f-855a?AWSAccessKeyId=AKIAIBLSGNTMEXAMPLE&Expires=1544126938&Signature=UohvGFPBHWrCz%2BMxgVKHF1L%2FNe4%3D",
"StackId":"arn:aws:cloudformation:us-east-1:111111111111:stack/Vendor_App/f16ba060-f981-11e8-9ecc",
"RequestId":"754d1dbc-2cc9-4b5f-855a",
"LogicalResourceId":"RegistrationNotification",
"ResourceType":"AWS::CloudFormation::CustomResource",
"ResourceProperties":{
"ServiceToken":"arn:aws:sns:us-east-1:999999999999:cs-cloudconnect-manager-registration",
"AccountID":"111111111111",
"Version":"1.0",
"IamRoleARN":"arn:aws:iam::111111111111:role/TestRole",
"CloudTrailCreated":"false"
}
}
AWS CloudFormation自定义资源请求对象文档有助于了解哪些字段是必填字段。
最终,我使用本地执行资源的计划失败了,我求助于从 Terraform 调用 CloudFormation 堆栈:
resource "aws_cloudformation_stack" "vendor-stack" {
name = "Vendor-App-Stack"
capabilities = [ "CAPABILITY_NAMED_IAM" ]
parameters {
RoleName="TestRole"
EnableNewCloudTrail="false"
}
template_url = "https://s3.amazonaws.com/vendor-prod-templates/aws_cloudformation_v1.0.json"
}
推荐阅读
- html - 引导日期选择器 startDate 和 endDate
- c# - 从XML文件节点检索根节点多个节点的数据到c#
- sql - Cosmos DB:使用分区键按时间间隔查询文档
- excel - VBA 另存为保存在文档文件夹中
- office-js - 如何使用 office.js 在 Outlook 约会中获取时区名称
- node.js - 如何在更新时从 DynamoDB 中删除多个属性
- vba - 在 PowerPoint 中通过 VBA 更改特定表格字体
- c# - 如何在 EF Core 3.1 中执行 GroupBy
- node.js - 如何在打字稿中逐行编写nodejs ReadFile
- docker - Hyperledger Fabric - 在 fabcar 上查询汽车返回错误:14 不可用:连接失败