aws / aws-cdk

The AWS Cloud Development Kit is a framework for defining cloud infrastructure in code
https://aws.amazon.com/cdk
Apache License 2.0
11.57k stars 3.88k forks source link

SQS - Unknown Attribute FifoQueue when setting fifo to false in Queue Props #8550

Open HassanMahmud opened 4 years ago

HassanMahmud commented 4 years ago

Setting fifo to false in QueueProps when creating an SQS queue causes the deploy to fail.

Reproduction Steps

This is the code used to create the queue. It is part of a reusable component, I have made a workaround of only setting the fifo prop if it is set to true and everything works as expected.

return new sqs.Queue(stack, name, {
      encryption: encrypted ? sqs.QueueEncryption.KMS_MANAGED : sqs.QueueEncryption.UNENCRYPTED,
      fifo,
      queueName: name,
      retentionPeriod,
      visibilityTimeout
    });

Error Log

This error shows up under CloudFormation events as the reason why creating the queue failed. Unknown Attribute FifoQueue. (Service: AmazonSQS; Status Code: 400; Error Code: InvalidAttributeName; Request ID: )

Environment

Other

I found a similar issue report here: AWS PHP SDK Github issue


This is :bug: Bug Report

MrArnoldPalmer commented 4 years ago

Hey there. Looks like this is a known issue with cloudformation. They have an issue in their roadmap for it.

We can potentially perform some logic inside of the construct to pass undefined to the L1 when the user passes false to cover this from our side. I can't imagine that causing any conflicts in the future. @eladb opinions on diverging from CFN here to prevent this error? Should be non-breaking as far as I can tell.

That is exactly what you're workaround is doing but one level higher. Anyone else encountering this can do that as well in the meantime.

suankan commented 4 years ago

I've just bumped into this issue as well.

It would make a lot of sense to reflect this in the docs. Currently docs for interface QueueProps reads: fifo? | boolean. Would be better to make it some enum like true or undefined.

bitsofinfo commented 3 years ago

experience same

emekdahl commented 3 years ago

bump - also ran into this issue

ParallelPlatypus commented 3 years ago

bump - same issue, in python 3.7 using:

 self._queue=sqs.Queue(
            scope, 
            QUEUE_ID_PREFIX + name, 
            fifo=True if FIFO_ENABLED else None,
            removal_policy=REMOVAL_POLICY
        )

fixed this for me.

JordanRickman commented 3 years ago

same, Python 3.9

z00dev commented 3 years ago

Had the same issue, python 3.9, still unclear that it needs None

noam-alchemy commented 2 years ago

Seeing this as well in typescript.

emmavray commented 2 years ago

Seeing this as well. The documentation is literally incorrect in claiming that FifoQueue is boolean.

jmurzy commented 2 years ago

Same issue when contentBasedDeduplication=false.

wilhen01 commented 2 years ago

Just encountered this in CDK v2 using Typescript. Agree with comments elsewhere in the thread - update docs and/or make this an enum of true | undefined. Minor issue but easily fixed.

gwin003 commented 2 years ago

Also ran into this in CDK v2 Typescript. Not exactly the same issue since my FifoQueue is currently always false, but I just removed the property altogether and it solved my issue.

JussiLem commented 1 year ago

Hello. Saw the same issue here and yeah removing the property helps, but still confusing

github-actions[bot] commented 1 year ago

This issue has received a significant amount of attention so we are automatically upgrading its priority. A member of the community will see the re-prioritization and provide an update on the issue.

peterwoodworth commented 1 year ago

It appears this issue has moved to Coming Soon on the CloudFormation roadmap. We should continue to wait for CloudFormation to push this as it appears the wait will not be much longer

cyber-gh commented 1 year ago

Workaround in Typescript CDK

const additionalProperties = props.fifo
            ? {
                  fifo: true,
              }
            : {};

queue = new aws_sqs.Queue(this, `SomeQueue`, {
            queueName: name,
            ...additionalProperties
})
mappingvermont commented 8 months ago

Any movement on this?

matt-challe commented 5 months ago

Bump, same issue. Fixed using @ParallelPlatypus's method (thank you!) fifo=True if fifo_enabled==True else None

lennard0011 commented 4 months ago

Bump, had to remove the property fifo as it was set to false. Can we get an ETA when this is resolved in CDK?

oappicgi commented 3 months ago

This is still an issue.

imo it should not accept undefined at all, but I guess now that people are required to use it it should be marked as deprecated and only accept true/false after few versions.

I've just bumped into this issue as well.

It would make a lot of sense to reflect this in the docs. Currently docs for interface QueueProps reads: fifo? | boolean. Would be better to make it some enum like true or undefined.

or even better: make it work like other constructs by allowing only boolean values and adjust documentation accordingly.

in the meantime I added function that i can call to hide the inconsistency.

function fixCDKBooleanLogic(isValueTrue: boolean): boolean | undefined { if (isValueTrue) { return true; } else { return undefined; } }

and calling it from sqs construct, where props.fifotype is boolean value. new sqs.Queue(this, fine-sqs-queue, { fifo: fixCDKBooleanLogic(props.fifotype), ... }