首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >aws-cdk aws-cli cloudformation在arn中生成额外字符

aws-cdk aws-cli cloudformation在arn中生成额外字符
EN

Stack Overflow用户
提问于 2020-01-28 21:14:59
回答 1查看 806关注 0票数 2

我正在使用aws创建cloudformation模板,实际上只是SNS和SQS。我的问题是生成的主题和队列的名称不是我在yaml文件中看到的。

下面是CDK的TypeScript:

代码语言:javascript
复制
export class TheQThingStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    const queue = new sqs.Queue(this, 'ExampleQueue');
    const topic = new sns.Topic(this, 'ExampleTopic');
    topic.addSubscription(new subs.SqsSubscription(queue));
  }
}

生成的yaml:

代码语言:javascript
复制
Resources:
  ExampleQueue4CEF454C:
    Type: AWS::SQS::Queue
    Metadata:
      aws:cdk:path: dev/ExampleQueue/Resource
  ExampleQueuePolicy3CE69BA4:
    Type: AWS::SQS::QueuePolicy
    Properties:
      PolicyDocument:
        Statement:
          - Action: sqs:SendMessage
            Condition:
              ArnEquals:
                aws:SourceArn:
                  Ref: ExampleTopic65117661
            Effect: Allow
            Principal:
              Service: sns.amazonaws.com
            Resource:
              Fn::GetAtt:
                - ExampleQueue4CEF454C
                - Arn
        Version: "2012-10-17"
      Queues:
        - Ref: ExampleQueue4CEF454C
    Metadata:
      aws:cdk:path: dev/ExampleQueue/Policy/Resource
  ExampleQueuedevExampleTopic2BB620969F483AE8:
    Type: AWS::SNS::Subscription
    Properties:
      Protocol: sqs
      TopicArn:
        Ref: ExampleTopic65117661
      Endpoint:
        Fn::GetAtt:
          - ExampleQueue4CEF454C
          - Arn
    Metadata:
      aws:cdk:path: dev/ExampleQueue/devExampleTopic2BB62096/Resource
  ExampleTopic65117661:
    Type: AWS::SNS::Topic
    Metadata:
      aws:cdk:path: dev/ExampleTopic/Resource
  CDKMetadata:
    Type: AWS::CDK::Metadata
    Properties:
      Modules: aws-cdk=1.22.0,@aws-cdk/aws-cloudwatch=1.22.0,@aws-cdk/aws-iam=1.22.0,@aws-cdk/aws-kms=1.22.0,@aws-cdk/aws-sns=1.22.0,@aws-cdk/aws-sns-subscriptions=1.22.0,@aws-cdk/aws-sqs=1.22.0,@aws-cdk/core=1.22.0,@aws-cdk/cx-api=1.22.0,@aws-cdk/region-info=1.22.0,jsii-runtime=node.js/v12.11.1

如果我运行cdk deployaws cloudformation create-stack dev --template-body file://the-template.yaml,这些名字就会被弄坏。

代码语言:javascript
复制
$ aws sqs list-queues                                                                                            {
    "QueueUrls": [
        "https://region.queue.amazonaws.com/SECRET/dev-ExampleQueue4CEF454C-J3YMCE8ER8LW"
    ]
}
代码语言:javascript
复制
$ aws sns list-topics                                                                                         
{
    "Topics": [
        {
            "TopicArn": "arn:aws:sns:region:SECRET:dev-ExampleTopic65117661-1HEC7UGNZNT9U"
        }
    ]
}

我知道名字后面的数字是路径的散列。dev-ExampleTopic65117661 -> 65117661是哈希。

1HEC7UGNZNT9U是从哪里来的?!云格式是生成它的吗?我在密码里哪儿都找不到?这个号码是由AWS在提交后创建的吗?为什么?

如果我这样做了:

代码语言:javascript
复制
$ aws sqs create-queue --queue-name my-queue
{
    "QueueUrls": [
        "https://region.queue.amazonaws.com/SECRET/my_queue"
    ]
}

我不知道名字末尾的额外数字。怎么回事?一定是云层形成的一部分。

答案:

我接受了下面的答案,下面是一个代码示例:

代码语言:javascript
复制
export class TheQThingStack extends cdk.Stack {
  constructor(scope: cdk.App, id: string, props?: cdk.StackProps) {
    super(scope, id, props);
    const queue = new sqs.Queue(this, 'ExampleQueue', { queueName: `${id}-ExampleQueue` });
    const topic = new sns.Topic(this, 'ExampleTopic', { topicName: `${id}-ExampleTopic` });
    topic.addSubscription(new subs.SqsSubscription(queue));
  }
}

我以为ExampleQueueExampleTopic是名字。它们是IDs。如果您传递一个name,它将覆盖所有其他内容。如果您不传递一个name,它将从您的IDstackId和散列中构造一个logicalId。所以要用名字!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-28 21:22:02

如果您没有为某物指定名称,CloudFormation将根据堆栈的名称和资源的名称生成名称。他们将增加一些额外的结束,以确保它是独特的。

https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-name.html

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59957128

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档