Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

How to add tags with sam deploy #7050

Closed
ajithkumar999 opened this issue May 10, 2024 · 12 comments
Closed

How to add tags with sam deploy #7050

ajithkumar999 opened this issue May 10, 2024 · 12 comments
Labels
area/deploy sam deploy command blocked/close-if-inactive Blocked for >14 days with no response, will be closed if still inactive after 7 days type/question

Comments

@ajithkumar999
Copy link

Hello,
we are using SAM to deploy our cloud formation template, we are passing --tags along with the SAM deploy command to add tags for all the resources present in the template in one go.
I noticed a few tags were missing on the API gateway resource level, I want to reassign the tags through SAM deploy only, I added a new tag in the SAM deploy command, but it added only that particular tag. it didn’t add the old tags.
my sam deploy command:
sam deploy \ --template-file template.yml \ --stack-name $ENV_NAME-$APP_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region $AWS_REGION \ --role-arn $CFN_ROLE_ARN \ --parameter-overrides Env=$ENV_NAME BuildArtifactName=$GO_PIPELINE_LABEL Application=$APP_NAME LogLevel=$log_level \ --s3-bucket <bucket_name> \ --s3-prefix $APP_NAME \ --no-fail-on-empty-changeset \ --tags \ env=$ENV_NAME \ dept=abc \ squad=abc \ product=abc \ audience=abc \ client_code=abc \ sensitive_data=true \ Application=$APP_NAME \ team=abc --> added newly
but only a few tags were present currently, I want to re-add all these tags back to the resource

@ajithkumar999 ajithkumar999 added the stage/needs-triage Automatically applied to new issues and PRs, indicating they haven't been looked at. label May 10, 2024
@hawflau
Copy link
Contributor

hawflau commented May 11, 2024

Hi @ajithkumar999 thanks for raising the issue.

Did you include all your existing tags and new tags in the --tags flag?
In my experiment, when I only added new tags and didn't keep any existing tags under --tags, the deployed result is existing tags got removed. If I keep existing tags under --tags and add new tags, the deployed resource contains both existing tags and new tags.

Aside, I'd suggest you to use samconfig to keep your tags. You can define tags as a list instead of a concatenated string and also be able to your existing tags in the config file

example:

[default.deploy.parameters]
capabilities = "CAPABILITY_IAM"
confirm_changeset = true
resolve_s3 = true
tags = [
    "aaa=ddd",
    "bbb=ccc",
]

@hawflau hawflau added type/question area/deploy sam deploy command blocked/close-if-inactive Blocked for >14 days with no response, will be closed if still inactive after 7 days and removed stage/needs-triage Automatically applied to new issues and PRs, indicating they haven't been looked at. labels May 11, 2024
@ajithkumar999
Copy link
Author

Hi @hawflau, thanks for looking into this issue
Here my concern is somehow my old tags were missing from the resources, I want to add them back again to the resources, if I add a new tag in the --tags param, it only adds the new tag to the resource, it's not adding the old tags
Please check the below image, only 3 tags were present for the resource, but my sam deploy command has 9 tags init, the team tag which I added newly, how can I add my old tags to the resource?

Screenshot 2024-05-13 at 11 51 49 AM Thanks

@mndeveci
Copy link
Contributor

@ajithkumar999

I've tried to reproduce the issue you mentioned. I've created stack with a=1 and b=2 tags. And then I've added c=3 and d=4 tags. After the second deployment I can see all the tags which I've added there. Can you provide more details of your issue?

image

@ajithkumar999
Copy link
Author

Hello @mndeveci
Thanks for looking into this
let's say the stack has lambda and API gateway resources with these tags a=1 b=2 c=3 and d=4.
I've manually deleted the tags c=3 and d=4 in the API gateway resource, and lambda has all the required tags.
If I try to re-deploy the stack with the same tags using SAM it's not adding back, if I've modified the tag in the SAM deploy command like d=5 then it will add it back but lambda tags also will get affected.
How can I add the deleted tags back to the resources without affecting the other resources in the stack with the sam deploy command?

@lucashuy
Copy link
Contributor

Hi, just want to reiterate to make sure I'm not getting anything wrong; if I had had deployed tags a=1, b=2, and I go and delete a=1 from a resource in my stack, I want SAM CLI to be able to deploy the same tags again if I run the exact same sam deploy command with the same tag argument?

This currently isn't possible since the difference in tags is compared in Cloudformation, not the underlying deployed resources. Since the tags were never modified in the Cloudformation stack, Cloudformation reports that there is nothing to do. The behaviour you see when you update a tag (eg. d=5 in your comment) will update the rest of the resources as expected as the tag comparison is made against the stack, which will have a different d tag.

You could utilize the AWS CLI or the AWS SDK in the language of your choice to update tags for individual resources, but getting Cloudformation to "reapply" tags won't be possible.

@lucashuy
Copy link
Contributor

Closing issue as Cloudformation doesn't actually check tags in the underlying resources when updating. Feel free to create a new issue for anything else you might discover.

@lucashuy lucashuy closed this as not planned Won't fix, can't repro, duplicate, stale May 24, 2024
Copy link
Contributor

⚠️COMMENT VISIBILITY WARNING⚠️

Comments on closed issues are hard for our team to see.
If you need more assistance, please either tag a team member or open a new issue that references this one.
If you wish to keep having a conversation with other community members under this issue feel free to do so.

@ajithkumar999
Copy link
Author

Hi @lucashuy,
can you please reopen this issue

if I had deployed tags a=1, b=2, and I go and delete a=1 from a resource in my stack, I want SAM CLI to be able to deploy the same tags again if I run the exact same sam deploy command with the same tag argument?

Sorry, I should have been more specific in my previous reply. Here’s the exact scenario of what I am facing.
(Note: deployment is through sam deploy, and tags are managed through the --tags flag.)

Day 1: Deploy stack with tags a=1, b=2.
Expectation: all supported resources in the stack have a=1 and b=2 tags.
Result: as expected.

Day 2: Manually delete b=2 from one of the resources in the stack, say a lambda function.
Expectations: all resources continue to have a=1 and b=2 tags. The lambda function for which we deleted tags only has a=1 tag.
Result: as expected.

Day 3: add c=3 alongside a=1 and b=2 in the --tags flag for sam deploy. Expectations: all supported resources in the stack have a=1, b=2, and c=3 tags including the lambda function for which we earlier deleted the tag.
Result: all resources have a=1, b=2, and c=3 tags. The lambda function only has a=1 and c=3 tag, and b=2 is missing. Because the tag argument is now modified, and there’s a diff, it should update the tags.

@lucashuy
Copy link
Contributor

lucashuy commented May 28, 2024

This would still be Cloudformation specific behaviour that you'd unfortunately come across. Cloudformation won't reapply any tags since it won't do any comparisons against the underlying resources in a stack.

While its true that Lambda does not have b=2, Cloudformation doesn't care since the stack resource still has b=2.

@ajithkumar999
Copy link
Author

Hi @lucashuy,

So just to confirm, cloudformation only requests new tag additions for underlying resources. That is, since c=3 was added, stack resource now has a diff and will assign just c=3 to the stack and all resources, and not send the complete list of tags (a=1, b=2 and c=3) to all resources?

@ajithkumar999
Copy link
Author

Hello @lucashuy
is there any update on this? #7050 (comment)

@lucashuy
Copy link
Contributor

lucashuy commented Jun 11, 2024

Hi, sorry about the delay and back and forth. It looks like the behaviour is that if anything is to change on the stack's tags, all the tags are going to be applied to each of the resources in the stack. So in the previous example that you've noted with the new c=3, all the tags are going to be reapplied to each resource.

Checking with a sample app shows that all tags are reapplied on any difference, whether that be a new tag or updated tag.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area/deploy sam deploy command blocked/close-if-inactive Blocked for >14 days with no response, will be closed if still inactive after 7 days type/question
Projects
None yet
Development

No branches or pull requests

4 participants