Преобразование пользовательского ресурса SNS CloudFormation в интерфейс командной строки AWS - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь преобразовать поставляемый поставщиком 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"
      ]
    }
  }
}
...

Мой план состоит в том, чтобы иметь ресурс local-exec для 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

1 Ответ

0 голосов
/ 07 декабря 2018

После настройки моего собственного конвейера 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"
  }
}

AWSCloudFormation Пользовательские объекты запроса ресурсов документация помогла понять, какие поля являются обязательными.

В конечном счете, мой план использования ресурса local-exec развалился, и я прибег к вызову стека CloudFormation из Terraform.:

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"
}
...