-
Notifications
You must be signed in to change notification settings - Fork 14
feat: add e2e-cleanup command and integration in CLI and server (#6780) #6780
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
feat: add e2e-cleanup command and integration in CLI and server (#6780) #6780
Conversation
WalkthroughAdds a new scheduled E2E cleanup worker and CLI command that finds and removes Playwright test data older than a configurable threshold, a new BullMQ queue/job, Prisma cascade delete schema changes, related migration, tests, docs, and minor build/environment config updates. Changes
Sequence Diagram(s)mermaid Estimated code review effort🎯 3 (Moderate) | ⏱️ ~25 minutes Possibly related PRs
Suggested reviewers
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: Repository UI Review profile: CHILL Plan: Pro Disabled knowledge base sources:
📒 Files selected for processing (2)
🚧 Files skipped from review as they are similar to previous changes (1)
🧰 Additional context used📓 Path-based instructions (2)**/*.{ts,tsx,js,jsx}📄 CodeRabbit inference engine (.cursor/rules/base.mdc)
Files:
**/*.{ts,tsx}📄 CodeRabbit inference engine (.cursor/rules/base.mdc)
Files:
🧠 Learnings (2)📓 Common learnings📚 Learning: 2025-11-11T23:22:02.196ZApplied to files:
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
🔇 Additional comments (1)
✏️ Tip: You can disable this entire section by setting Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🧹 Nitpick comments (1)
apis/api-journeys-modern/src/workers/e2eCleanup/README.md (1)
1-167: Fix minor markdown formatting issues.The documentation is comprehensive and well-written! However, there are some formatting issues to address:
- Remove trailing colons from headings (markdown best practice)
- Add language specification to code blocks
Apply these formatting fixes:
-### Journey Patterns (case-insensitive): +### Journey Patterns (case-insensitive) -### Team Patterns (case-insensitive): +### Team Patterns (case-insensitive) -### Email Patterns: +### Email Patterns -### For Journeys: +### For Journeys -### For Teams: +### For Teams -### For Invitations: +### For InvitationsFor the code blocks at lines 107-119 and 123-131, add language specification:
-``` +```text Running in DRY RUN mode - no data will be deleted-``` +```text Will clean up test data older than 24 hours🧰 Tools
🪛 LanguageTool
[uncategorized] ~67-~67: Loose punctuation mark.
Context: ...s 12 ``` ### CLI Options ---dry-run: Preview mode - shows what would be dele...(UNLIKELY_OPENING_PUNCTUATION)
🪛 markdownlint-cli2 (0.17.2)
21-21: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
31-31: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
40-40: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
74-74: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
83-83: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
90-90: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
107-107: Fenced code blocks should have a language specified
null(MD040, fenced-code-language)
123-123: Fenced code blocks should have a language specified
null(MD040, fenced-code-language)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (9)
apis/api-journeys-modern/project.json(1 hunks)apis/api-journeys-modern/src/workers/cli.ts(2 hunks)apis/api-journeys-modern/src/workers/e2eCleanup/README.md(1 hunks)apis/api-journeys-modern/src/workers/e2eCleanup/config.ts(1 hunks)apis/api-journeys-modern/src/workers/e2eCleanup/index.ts(1 hunks)apis/api-journeys-modern/src/workers/e2eCleanup/service/index.ts(1 hunks)apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.ts(1 hunks)apis/api-journeys-modern/src/workers/e2eCleanup/service/service.ts(1 hunks)apis/api-journeys-modern/src/workers/server.ts(1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (3)
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.ts (1)
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.ts (1)
service(24-342)
apis/api-journeys-modern/src/workers/cli.ts (1)
apis/api-journeys-modern/src/workers/e2eCleanup/config.ts (2)
queueName(1-1)jobName(2-2)
apis/api-journeys-modern/src/workers/e2eCleanup/config.ts (1)
apis/api-journeys-modern/src/workers/e2eCleanup/index.ts (2)
queueName(2-2)jobName(2-2)
🪛 LanguageTool
apis/api-journeys-modern/src/workers/e2eCleanup/README.md
[uncategorized] ~67-~67: Loose punctuation mark.
Context: ...s 12 ``` ### CLI Options - --dry-run: Preview mode - shows what would be dele...
(UNLIKELY_OPENING_PUNCTUATION)
🪛 markdownlint-cli2 (0.17.2)
apis/api-journeys-modern/src/workers/e2eCleanup/README.md
21-21: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
31-31: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
40-40: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
74-74: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
83-83: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
90-90: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
107-107: Fenced code blocks should have a language specified
null
(MD040, fenced-code-language)
123-123: Fenced code blocks should have a language specified
null
(MD040, fenced-code-language)
⏰ Context from checks skipped due to timeout of 90000ms (2)
- GitHub Check: danger (22)
- GitHub Check: Analyze (javascript)
🔇 Additional comments (9)
apis/api-journeys-modern/src/workers/e2eCleanup/config.ts (1)
1-2: Configuration naming is clear and consistent.
ThequeueNameandjobNameconstants follow the established pattern and will provide unified identifiers across the E2E cleanup workflow.apis/api-journeys-modern/src/workers/e2eCleanup/service/index.ts (1)
1-1: Barrel export is correct.
Re-exportingservicefrom./serviceprovides a clean import surface for upstream modules.apis/api-journeys-modern/src/workers/e2eCleanup/index.ts (1)
1-2: Centralized exports look good.
Consolidatingservice,jobName, andqueueNameexports in this index simplifies dynamic imports in the CLI and server modules.apis/api-journeys-modern/src/workers/server.ts (1)
78-83: Register the E2E Cleanup Worker alongside existing workers.
The dynamic import andrun(...)invocation mirror the pattern used for other workers and will integrate the new cleanup job into the server lifecycle as intended.apis/api-journeys-modern/src/workers/cli.ts (2)
23-32: LGTM! Clean implementation following existing patterns.The new case branch for
e2e-cleanupis well-structured and follows the established pattern from theshortlink-updatercase, including proper dynamic imports and queue initialization.
46-69: Excellent command-line option handling with proper validation.The implementation includes:
- Clear user feedback for dry-run mode
- Robust validation for the hours parameter (parseInt, isNaN check, positive value check)
- Informative console messages using chalk for better visibility
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.ts (1)
1-309: Excellent test coverage for the e2e cleanup service!The test suite is comprehensive and well-structured:
- Tests all major scenarios including successful cleanup, dry run mode, default values, and error handling
- Properly mocks all Prisma operations
- Includes both positive assertions (what should happen) and negative assertions (what shouldn't happen in dry run)
- Test data uses realistic patterns matching actual e2e test data
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.ts (2)
34-52: Consider the breadth of pattern matching.The implementation looks solid! The generic patterns like 'E2E', 'Automation', and 'Test Team' could potentially match non-test data. However, this risk is well-mitigated by:
- Time-based filtering (olderThanHours)
- Dry run mode for verification before actual deletion
- Case-insensitive partial matching reduces false positives
Consider monitoring the dry run outputs initially to ensure patterns don't match unintended data.
219-342: Excellent implementation of cascading deletions with proper error handling!The deletion logic is well-designed:
- Respects foreign key constraints by deleting in the correct order
- Handles team-owned journeys separately to ensure complete cleanup
- Comprehensive error handling with logging and proper error propagation
- Clear separation between journey, team, and invitation cleanup
…llo client integration - Added Apollo Client setup for user email queries. - Implemented filtering of test journeys based on title patterns and user roles. - Introduced caching for user email lookups to optimize performance. - Updated logging to provide detailed statistics during dry runs and suppress info logs during actual cleanup.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
🧹 Nitpick comments (2)
apis/api-journeys-modern/src/workers/e2eCleanup/README.md (1)
136-136: Add language specifiers to code blocks for better syntax highlighting.The example output blocks should specify a language for proper rendering.
-``` +```consoleApply this change to both code blocks at lines 136 and 162.
Also applies to: 162-162
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)
136-136: Fenced code blocks should have a language specified
null(MD040, fenced-code-language)
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.ts (1)
88-92: Remove unnecessary non-null assertion.TypeScript should correctly infer that the value exists after the
.has()check.// Check cache first if (playwrightUserCache.has(userId)) { - return playwrightUserCache.get(userId)! + return playwrightUserCache.get(userId) as boolean }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
apis/api-journeys-modern/src/workers/e2eCleanup/README.md(1 hunks)apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.ts(1 hunks)apis/api-journeys-modern/src/workers/e2eCleanup/service/service.ts(1 hunks)
🧰 Additional context used
🪛 LanguageTool
apis/api-journeys-modern/src/workers/e2eCleanup/README.md
[uncategorized] ~94-~94: Loose punctuation mark.
Context: ...s 12 ``` ### CLI Options - --dry-run: Preview mode - shows what would be dele...
(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~235-~235: Loose punctuation mark.
Context: ... environment variables: - GATEWAY_URL: URL for the GraphQL gateway - `INTEROP_...
(UNLIKELY_OPENING_PUNCTUATION)
🪛 markdownlint-cli2 (0.17.2)
apis/api-journeys-modern/src/workers/e2eCleanup/README.md
24-24: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
40-40: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
49-49: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
101-101: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
110-110: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
117-117: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
136-136: Fenced code blocks should have a language specified
null
(MD040, fenced-code-language)
162-162: Fenced code blocks should have a language specified
null
(MD040, fenced-code-language)
217-217: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
224-224: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
⏰ Context from checks skipped due to timeout of 90000ms (1)
- GitHub Check: Analyze (javascript)
🔇 Additional comments (6)
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.ts (4)
38-169: Well-structured test case for journey cleanup logic!The test comprehensively covers both title pattern matching and playwright user filtering, with appropriate mock data and assertions.
170-257: Excellent coverage of dry run mode!The test properly verifies that no destructive operations occur during dry run and that detailed logging is performed.
259-320: Good test for caching efficiency!The test effectively validates that the user email caching mechanism prevents redundant API calls.
321-511: Comprehensive test coverage for edge cases and error scenarios!The remaining test cases effectively cover error handling, default parameters, team cleanup cascades, and logging behavior. The tests ensure the service is resilient to failures.
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.ts (2)
130-207: Well-implemented journey filtering logic!The dual filtering approach (by title patterns and user emails) with detailed statistics tracking is excellent.
456-461: Appropriate error handling implementation!The error logging and re-throwing pattern is correct for a job queue worker.
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.ts
Outdated
Show resolved
Hide resolved
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.ts
Outdated
Show resolved
Hide resolved
…ed data integrity - Wrapped all cleanup operations in a single database transaction to ensure atomicity. - Enhanced logging to reflect the number of deleted journeys, teams, and invitations. - Removed generic fallback patterns from journey and team identification to streamline detection. - Updated tests to validate transaction behavior and error handling during cleanup operations.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (1)
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.ts (1)
22-22:⚠️ Potential issueINTEROP_TOKEN fallback issue remains unaddressed.
The fallback to an empty string for
INTEROP_TOKENcan still lead to authentication failures, as mentioned in the previous review. This issue should be resolved.Apply this fix to ensure the service fails fast with a clear error message:
- 'interop-token': process.env.INTEROP_TOKEN ?? '', + 'interop-token': process.env.INTEROP_TOKEN || (() => { throw new Error('INTEROP_TOKEN environment variable is required') })(),
🧹 Nitpick comments (2)
apis/api-journeys-modern/src/workers/e2eCleanup/README.md (2)
25-25: Fix markdown heading formatting.Remove trailing colons from headings to comply with markdown standards.
Apply these changes to fix the heading formatting:
-### Journey Detection (OR logic): +### Journey Detection (OR logic) -### Team Patterns (case-insensitive): +### Team Patterns (case-insensitive) -### Email Patterns (invitations): +### Email Patterns (invitations) -### For Journeys: +### For Journeys -### For Teams: +### For Teams -### For Invitations: +### For Invitations -### Dry Run Mode: +### Dry Run Mode -### Production Mode: +### Production ModeAlso applies to: 37-37, 42-42, 94-94, 103-103, 110-110, 218-218, 225-225
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)
25-25: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
136-158: Add language specification to code blocks.Specify the language for code blocks to improve syntax highlighting and readability.
Apply these changes:
-``` +```text Running in DRY RUN mode - no data will be deleted Will clean up test data older than 24 hours ...-
+text
Starting e2e cleanup: olderThanHours=24, dryRun=false
Deleted test journeys: deletedJourneys=3
...Also applies to: 162-169
🧰 Tools
🪛 markdownlint-cli2 (0.17.2)
136-136: Fenced code blocks should have a language specified
null(MD040, fenced-code-language)
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (3)
apis/api-journeys-modern/src/workers/e2eCleanup/README.md(1 hunks)apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.ts(1 hunks)apis/api-journeys-modern/src/workers/e2eCleanup/service/service.ts(1 hunks)
🧰 Additional context used
🪛 GitHub Check: test (22, 1/3)
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.ts
[failure] 685-685: E2E Cleanup Service › service › should identify journeys with exact testData.json patterns
expect(jest.fn()).toHaveBeenCalledWith(...expected)
- Expected
- Received
@@ -2,9 +2,10 @@
"where": Object {
"id": Object {
"in": Array [
"team-1",
"team-2",
-
},
"team-3", ], },
},
Number of calls: 1
at src/workers/e2eCleanup/service/service.spec.ts:685:38
at fulfilled (../../node_modules/tslib/tslib.js:167:62)
🪛 LanguageTool
apis/api-journeys-modern/src/workers/e2eCleanup/README.md
[uncategorized] ~87-~87: Loose punctuation mark.
Context: ...s 12 ``` ### CLI Options - --dry-run: Preview mode - shows what would be dele...
(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~236-~236: Loose punctuation mark.
Context: ... environment variables: - GATEWAY_URL: URL for the GraphQL gateway - `INTEROP_...
(UNLIKELY_OPENING_PUNCTUATION)
🪛 markdownlint-cli2 (0.17.2)
apis/api-journeys-modern/src/workers/e2eCleanup/README.md
25-25: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
37-37: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
42-42: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
94-94: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
103-103: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
110-110: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
136-136: Fenced code blocks should have a language specified
null
(MD040, fenced-code-language)
162-162: Fenced code blocks should have a language specified
null
(MD040, fenced-code-language)
218-218: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
225-225: Trailing punctuation in heading
Punctuation: ':'
(MD026, no-trailing-punctuation)
⏰ Context from checks skipped due to timeout of 90000ms (2)
- GitHub Check: visual-test (22)
- GitHub Check: Analyze (javascript)
🔇 Additional comments (4)
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.ts (2)
323-446: Excellent implementation of transaction-based cleanup.The transaction implementation properly addresses the previous review concern about atomicity. The deletion order correctly respects foreign key constraints, and all operations are wrapped in a single transaction for consistency.
71-101: Well-implemented user email caching strategy.The caching implementation efficiently reduces API calls by storing both positive and negative lookup results. The error handling gracefully degrades when user lookups fail without stopping the entire cleanup process.
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.ts (1)
25-700: Comprehensive test coverage with excellent mocking strategy.The test suite provides thorough coverage of the cleanup logic including:
- Pattern matching for journeys and teams
- User email caching behavior
- Error handling scenarios
- Transaction rollback testing
- Dry run vs actual cleanup modes
The mocking approach correctly isolates the service logic from external dependencies.
🧰 Tools
🪛 GitHub Check: test (22, 1/3)
[failure] 685-685: E2E Cleanup Service › service › should identify journeys with exact testData.json patterns
expect(jest.fn()).toHaveBeenCalledWith(...expected)
- Expected
- Received
@@ -2,9 +2,10 @@
"where": Object {
"id": Object {
"in": Array [
"team-1",
"team-2",
},"team-3", ], },
},Number of calls: 1
at src/workers/e2eCleanup/service/service.spec.ts:685:38 at fulfilled (../../node_modules/tslib/tslib.js:167:62)apis/api-journeys-modern/src/workers/e2eCleanup/README.md (1)
1-250: Excellent comprehensive documentation.The README provides thorough documentation covering:
- Clear overview and features
- Detailed detection patterns with examples
- Performance optimizations and caching strategy
- Usage instructions and CLI options
- Safety features and error handling
- Integration guidance
This will be very helpful for developers working with the E2E cleanup functionality.
🧰 Tools
🪛 LanguageTool
[uncategorized] ~87-~87: Loose punctuation mark.
Context: ...s 12 ``` ### CLI Options ---dry-run: Preview mode - shows what would be dele...(UNLIKELY_OPENING_PUNCTUATION)
[uncategorized] ~236-~236: Loose punctuation mark.
Context: ... environment variables: -GATEWAY_URL: URL for the GraphQL gateway - `INTEROP_...(UNLIKELY_OPENING_PUNCTUATION)
🪛 markdownlint-cli2 (0.17.2)
25-25: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
37-37: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
42-42: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
94-94: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
103-103: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
110-110: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
136-136: Fenced code blocks should have a language specified
null(MD040, fenced-code-language)
162-162: Fenced code blocks should have a language specified
null(MD040, fenced-code-language)
218-218: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
225-225: Trailing punctuation in heading
Punctuation: ':'(MD026, no-trailing-punctuation)
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.ts
Outdated
Show resolved
Hide resolved
- Changed team title from 'Regular Team' to 'Production Group'. - Updated mock data for teams to include specific names for better test clarity.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (1)
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.ts(1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (1)
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.ts (3)
apis/api-journeys-modern/src/workers/e2eCleanup/index.ts (1)
service(1-1)apis/api-journeys-modern/src/workers/e2eCleanup/service/index.ts (1)
service(1-1)apis/api-journeys-modern/src/workers/e2eCleanup/service/service.ts (1)
service(55-482)
⏰ Context from checks skipped due to timeout of 90000ms (4)
- GitHub Check: affected (22)
- GitHub Check: test (22, 2/3)
- GitHub Check: visual-test (22)
- GitHub Check: Analyze (javascript)
🔇 Additional comments (8)
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.ts (8)
1-24: LGTM: Well-structured imports and mocking setup.The imports are clean and the Apollo Client and gql.tada mocks are properly configured for testing. The mock implementation correctly intercepts the relevant methods.
25-55: LGTM: Comprehensive test setup with proper mocking.The beforeEach setup properly clears mocks and creates comprehensive mock objects for the logger and transaction client. The transaction mock implementation correctly simulates the callback-based behavior.
58-193: LGTM: Comprehensive test coverage for main cleanup functionality.This test properly validates the core cleanup logic including:
- Journey filtering by title patterns and playwright users
- Transaction-based deletion
- Proper Apollo Client mocking for user email lookups
- Correct assertion of deletion calls and logging
The test data setup and expectations align well with the service behavior.
194-282: LGTM: Good dry run validation with detailed logging verification.This test effectively validates that:
- No actual deletions occur during dry run mode
- Detailed filtering statistics are logged only in dry run
- Transaction is not called in dry run mode
The logging assertions are comprehensive and ensure proper behavior differentiation between dry run and actual cleanup.
284-344: LGTM: Excellent test for user email lookup caching optimization.This test validates an important performance optimization by ensuring that duplicate user IDs only trigger a single Apollo query. The test setup with the same user owning multiple journeys is realistic and the assertion confirms the caching behavior works correctly.
346-398: LGTM: Robust error handling test for external service failures.This test properly validates graceful handling of Apollo Client errors, ensuring that:
- User lookup failures are logged as warnings
- Processing continues despite individual user lookup failures
- The overall cleanup process completes successfully
This is important for resilience against external service issues.
487-540: LGTM: Good validation of conditional logging behavior.This test ensures that filtering statistics are only logged during dry runs and not during actual cleanup operations, which helps keep the logs clean during normal operations while providing detailed information when needed for analysis.
542-585: LGTM: Important test for transaction error handling and rollback.This test validates that transaction failures are properly handled with:
- Error logging with context
- Error propagation to caller
- Proper transaction attempt tracking
This ensures data consistency in case of database operation failures.
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.ts
Outdated
Show resolved
Hide resolved
…llison/prj-2784-playwright-cleanup-worker
…ervice - Changed the command for Playwright cleanup to include 'e2e-cleanup' as an argument. - Updated the import path for E2E cleanup configuration in the CLI. - Modified README to reflect the new command structure for triggering cleanup jobs. - Refactored E2E cleanup service to utilize Prisma for user queries, removing Apollo Client setup and related code.
…split-prisma-into-libs
|
Ran Plan for dir: Show OutputNote: Objects have changed outside of Terraform
Terraform detected the following changes made outside of Terraform since the
last "terraform apply" which may have affected this plan:
# module.prod.module.postgresql.aws_rds_cluster.default has changed
~ resource "aws_rds_cluster" "default" {
~ engine_version = "13.18" -> "13.20"
~ engine_version_actual = "13.18" -> "13.20"
id = "jfp-core-prod"
tags = {}
# (58 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.stage.module.postgresql.aws_rds_cluster.default has changed
~ resource "aws_rds_cluster" "default" {
~ engine_version = "13.18" -> "13.20"
~ engine_version_actual = "13.18" -> "13.20"
id = "jfp-core-stage"
tags = {}
# (58 unchanged attributes hidden)
# (1 unchanged block hidden)
}
Unless you have made equivalent changes to your configuration, or ignored the
relevant attributes using ignore_changes, the following plan may include
actions to undo or respond to these changes.
─────────────────────────────────────────────────────────────────────────────
Terraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
~ update in-place
+/- create replacement and then destroy
<= read (data resources)
Terraform will perform the following actions:
# module.prod.module.eks.data.aws_ami.eks-worker will be read during apply
# (depends on a resource or a module with changes pending)
<= data "aws_ami" "eks-worker" {
+ architecture = (known after apply)
+ arn = (known after apply)
+ block_device_mappings = (known after apply)
+ boot_mode = (known after apply)
+ creation_date = (known after apply)
+ deprecation_time = (known after apply)
+ description = (known after apply)
+ ena_support = (known after apply)
+ hypervisor = (known after apply)
+ id = (known after apply)
+ image_id = (known after apply)
+ image_location = (known after apply)
+ image_owner_alias = (known after apply)
+ image_type = (known after apply)
+ imds_support = (known after apply)
+ kernel_id = (known after apply)
+ last_launched_time = (known after apply)
+ most_recent = true
+ name = (known after apply)
+ owner_id = (known after apply)
+ owners = [
+ "602401143452",
]
+ platform = (known after apply)
+ platform_details = (known after apply)
+ product_codes = (known after apply)
+ public = (known after apply)
+ ramdisk_id = (known after apply)
+ region = (known after apply)
+ root_device_name = (known after apply)
+ root_device_type = (known after apply)
+ root_snapshot_id = (known after apply)
+ sriov_net_support = (known after apply)
+ state = (known after apply)
+ state_reason = (known after apply)
+ tags = (known after apply)
+ tpm_support = (known after apply)
+ usage_operation = (known after apply)
+ virtualization_type = (known after apply)
+ filter {
+ name = "name"
+ values = [
+ "amazon-eks-node-1.32-v*",
]
}
}
# module.prod.module.eks.aws_eks_cluster.this will be updated in-place
~ resource "aws_eks_cluster" "this" {
id = "jfp-eks-prod"
name = "jfp-eks-prod"
tags = {
"alpha.eksctl.io/cluster-oidc-enabled" = "true"
}
~ version = "1.31" -> "1.32"
# (13 unchanged attributes hidden)
# (4 unchanged blocks hidden)
}
# module.prod.module.postgresql.aws_rds_cluster.default will be updated in-place
~ resource "aws_rds_cluster" "default" {
+ enable_local_write_forwarding = false
~ engine_version = "13.20" -> "13.18"
id = "jfp-core-prod"
tags = {}
# (59 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.prod.module.postgresql.aws_rds_cluster_instance.default will be updated in-place
~ resource "aws_rds_cluster_instance" "default" {
~ engine_version = "13.20" -> "13.18"
+ force_destroy = false
id = "tf-20240604195536182300000003"
tags = {}
# (32 unchanged attributes hidden)
}
# module.stage.module.eks.aws_eks_node_group.az_2a_ondemand will be updated in-place
~ resource "aws_eks_node_group" "az_2a_ondemand" {
id = "jfp-eks-stage:jfp-eks-node-group-2a-stage"
tags = {}
# (17 unchanged attributes hidden)
~ scaling_config {
~ desired_size = 3 -> 2
~ max_size = 5 -> 4
~ min_size = 3 -> 2
}
# (2 unchanged blocks hidden)
}
# module.stage.module.postgresql.aws_rds_cluster.default will be updated in-place
~ resource "aws_rds_cluster" "default" {
+ enable_local_write_forwarding = false
~ engine_version = "13.20" -> "13.18"
id = "jfp-core-stage"
tags = {}
# (59 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.stage.module.postgresql.aws_rds_cluster_instance.default will be updated in-place
~ resource "aws_rds_cluster_instance" "default" {
~ engine_version = "13.20" -> "13.18"
+ force_destroy = false
id = "tf-20240618004835876400000003"
tags = {}
# (32 unchanged attributes hidden)
}
# module.prod.module.api-journeys-modern.module.ecs-task.aws_ecs_service.ecs_service will be updated in-place
~ resource "aws_ecs_service" "ecs_service" {
id = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-prod/api-journeys-modern-prod-service"
name = "api-journeys-modern-prod-service"
tags = {}
~ task_definition = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-prod:17" -> (known after apply)
# (18 unchanged attributes hidden)
# (4 unchanged blocks hidden)
}
# module.prod.module.api-journeys-modern.module.ecs-task.aws_ecs_task_definition.ecs_task_definition must be replaced
+/- resource "aws_ecs_task_definition" "ecs_task_definition" {
~ arn = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-prod:17" -> (known after apply)
~ arn_without_revision = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-prod" -> (known after apply)
~ container_definitions = jsonencode(
[
- {
- cpu = 1024
- environment = [
- {
- name = "NODE_ENV"
- value = "production"
},
- {
- name = "SERVICE_ENV"
- value = "prod"
},
- {
- name = "SERVICE_NAME"
- value = "api-journeys-modern"
},
]
- essential = true
- image = "410965620680.dkr.ecr.us-east-2.amazonaws.com/jfp-api-journeys-modern-prod:latest"
- logConfiguration = {
- logDriver = "awsfirelens"
- options = {
- Host = "http-intake.logs.datadoghq.com"
- Name = "datadog"
- TLS = "on"
- compress = "gzip"
- dd_service = "api-journeys-modern"
- dd_source = "graphql-yoga"
- dd_tags = "env:prod"
- provider = "ecs"
- retry_limit = "2"
}
- secretOptions = [
- {
- name = "apikey"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
}
- memory = 2048
- mountPoints = []
- name = "jfp-api-journeys-modern-prod-app"
- portMappings = [
- {
- containerPort = 4004
- hostPort = 4004
- protocol = "tcp"
},
]
- secrets = [
- {
- name = "AWS_ACCESS_KEY_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/AWS_ACCESS_KEY_ID"
},
- {
- name = "AWS_SECRET_ACCESS_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/AWS_SECRET_ACCESS_KEY"
},
- {
- name = "CLOUDFLARE_UPLOAD_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/CLOUDFLARE_UPLOAD_KEY"
},
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
- {
- name = "FACEBOOK_APP_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/FACEBOOK_APP_ID"
},
- {
- name = "FACEBOOK_APP_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/FACEBOOK_APP_SECRET"
},
- {
- name = "FIREBASE_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/FIREBASE_API_KEY"
},
- {
- name = "GATEWAY_HMAC_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GATEWAY_HMAC_SECRET"
},
- {
- name = "GATEWAY_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GATEWAY_URL"
},
- {
- name = "GIT_BRANCH"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GIT_BRANCH"
},
- {
- name = "GOOGLE_APPLICATION_JSON"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GOOGLE_APPLICATION_JSON"
},
- {
- name = "GOOGLE_CLIENT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GOOGLE_CLIENT_ID"
},
- {
- name = "GOOGLE_CLIENT_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GOOGLE_CLIENT_SECRET"
},
- {
- name = "GOOGLE_GENERATIVE_AI_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GOOGLE_GENERATIVE_AI_API_KEY"
},
- {
- name = "GROWTH_SPACES_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GROWTH_SPACES_URL"
},
- {
- name = "INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET"
},
- {
- name = "INTEROP_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/INTEROP_TOKEN"
},
- {
- name = "JOURNEYS_ADMIN_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/JOURNEYS_ADMIN_URL"
},
- {
- name = "JOURNEYS_REVALIDATE_ACCESS_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/JOURNEYS_REVALIDATE_ACCESS_TOKEN"
},
- {
- name = "JOURNEYS_SHORTLINK_DOMAIN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/JOURNEYS_SHORTLINK_DOMAIN"
},
- {
- name = "JOURNEYS_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/JOURNEYS_URL"
},
- {
- name = "MAILCHIMP_AUDIENCE_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/MAILCHIMP_AUDIENCE_ID"
},
- {
- name = "MAILCHIMP_MARKETING_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/MAILCHIMP_MARKETING_API_KEY"
},
- {
- name = "MAILCHIMP_MARKETING_API_SERVER_PREFIX"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/MAILCHIMP_MARKETING_API_SERVER_PREFIX"
},
- {
- name = "NAT_ADDRESSES"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/NAT_ADDRESSES"
},
- {
- name = "OPEN_AI_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/OPEN_AI_API_KEY"
},
- {
- name = "PG_DATABASE_URL_JOURNEYS"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PG_DATABASE_URL_JOURNEYS"
},
- {
- name = "PLAUSIBLE_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAUSIBLE_API_KEY"
},
- {
- name = "PLAUSIBLE_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAUSIBLE_URL"
},
- {
- name = "PLAYWRIGHT_USER_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID"
},
- {
- name = "PLAYWRIGHT_USER_ID_2"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_2"
},
- {
- name = "PLAYWRIGHT_USER_ID_3"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_3"
},
- {
- name = "PLAYWRIGHT_USER_ID_4"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_4"
},
- {
- name = "PLAYWRIGHT_USER_ID_5"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_5"
},
- {
- name = "PLAYWRIGHT_USER_ID_6"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_6"
},
- {
- name = "POWER_BI_CLIENT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_CLIENT_ID"
},
- {
- name = "POWER_BI_CLIENT_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_CLIENT_SECRET"
},
- {
- name = "POWER_BI_JOURNEYS_MULTIPLE_FULL_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_JOURNEYS_MULTIPLE_FULL_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_MULTIPLE_SUMMARY_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_JOURNEYS_MULTIPLE_SUMMARY_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_SINGLE_FULL_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_JOURNEYS_SINGLE_FULL_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_SINGLE_SUMMARY_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_JOURNEYS_SINGLE_SUMMARY_REPORT_ID"
},
- {
- name = "POWER_BI_TENANT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_TENANT_ID"
},
- {
- name = "POWER_BI_WORKSPACE_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_WORKSPACE_ID"
},
- {
- name = "REDIS_PORT"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/REDIS_PORT"
},
- {
- name = "REDIS_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/REDIS_URL"
},
- {
- name = "SMTP_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/SMTP_URL"
},
- {
- name = "VERCEL_JOURNEYS_PROJECT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/VERCEL_JOURNEYS_PROJECT_ID"
},
- {
- name = "VERCEL_TEAM_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/VERCEL_TEAM_ID"
},
- {
- name = "VERCEL_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/VERCEL_TOKEN"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = [
- {
- name = "DD_APM_ENABLED"
- value = "true"
},
- {
- name = "DD_APM_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_DOGSTATSD_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_LOGS_INJECTION"
- value = "true"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT"
- value = "0.0.0.0:4317"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT"
- value = "0.0.0.0:4318"
},
- {
- name = "DD_PROCESS_AGENT_ENABLED"
- value = "true"
},
- {
- name = "DD_PROFILING_ENABLED"
- value = "true"
},
- {
- name = "DD_RUNTIME_METRICS_ENABLED"
- value = "true"
},
- {
- name = "DD_TAGS"
- value = "env:prod app:api-journeys-modern"
},
- {
- name = "DD_TRACE_ANALYTICS_ENABLED"
- value = "true"
},
- {
- name = "ECS_FARGATE"
- value = "true"
},
]
- essential = true
- image = "public.ecr.aws/datadog/agent:latest"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "api-journeys-modern-prod-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 128
- mountPoints = []
- name = "jfp-api-journeys-modern-prod-datadog-agent"
- portMappings = [
- {
- containerPort = 4317
- hostPort = 4317
- protocol = "tcp"
},
- {
- containerPort = 4318
- hostPort = 4318
- protocol = "tcp"
},
- {
- containerPort = 8125
- hostPort = 8125
- protocol = "udp"
},
]
- secrets = [
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = []
- essential = true
- firelensConfiguration = {
- options = {
- config-file-type = "file"
- config-file-value = "/fluent-bit/configs/parse-json.conf"
- enable-ecs-log-metadata = "true"
}
- type = "fluentbit"
}
- image = "amazon/aws-for-fluent-bit:stable"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "api-journeys-modern-prod-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 100
- mountPoints = []
- name = "jfp-api-journeys-modern-prod-log-router"
- portMappings = []
- systemControls = []
- user = "0"
- volumesFrom = []
},
]
) -> (known after apply) # forces replacement
~ enable_fault_injection = false -> (known after apply)
~ id = "jfp-api-journeys-modern-prod" -> (known after apply)
~ revision = 17 -> (known after apply)
- tags = {} -> null
~ tags_all = {} -> (known after apply)
# (12 unchanged attributes hidden)
}
# module.prod.module.api-journeys-modern.module.ecs-task.aws_ssm_parameter.parameters["PG_DATABASE_URL_USERS"] will be created
+ resource "aws_ssm_parameter" "parameters" {
+ arn = (known after apply)
+ data_type = (known after apply)
+ has_value_wo = (known after apply)
+ id = (known after apply)
+ insecure_value = (known after apply)
+ key_id = (known after apply)
+ name = "/ecs/api-journeys/prod/PG_DATABASE_URL_USERS"
+ overwrite = true
+ region = "us-east-2"
+ tags = {
+ "name" = "PG_DATABASE_URL_USERS"
}
+ tags_all = {
+ "name" = "PG_DATABASE_URL_USERS"
}
+ tier = (known after apply)
+ type = "SecureString"
+ value = (sensitive value)
+ value_wo = (write-only attribute)
+ version = (known after apply)
}
# module.prod.module.arclight.module.ecs-task.aws_ecs_service.ecs_service will be updated in-place
~ resource "aws_ecs_service" "ecs_service" {
~ desired_count = 4 -> 1
id = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-prod/arclight-prod-service"
name = "arclight-prod-service"
tags = {}
# (18 unchanged attributes hidden)
# (4 unchanged blocks hidden)
}
# module.stage.module.api-journeys-modern.module.ecs-task.aws_ecs_service.ecs_service will be updated in-place
~ resource "aws_ecs_service" "ecs_service" {
id = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-stage/api-journeys-modern-stage-service"
name = "api-journeys-modern-stage-service"
tags = {}
~ task_definition = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-stage:17" -> (known after apply)
# (18 unchanged attributes hidden)
# (4 unchanged blocks hidden)
}
# module.stage.module.api-journeys-modern.module.ecs-task.aws_ecs_task_definition.ecs_task_definition must be replaced
+/- resource "aws_ecs_task_definition" "ecs_task_definition" {
~ arn = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-stage:17" -> (known after apply)
~ arn_without_revision = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-stage" -> (known after apply)
~ container_definitions = jsonencode(
[
- {
- cpu = 1024
- environment = [
- {
- name = "NODE_ENV"
- value = "production"
},
- {
- name = "SERVICE_ENV"
- value = "stage"
},
- {
- name = "SERVICE_NAME"
- value = "api-journeys-modern"
},
]
- essential = true
- image = "410965620680.dkr.ecr.us-east-2.amazonaws.com/jfp-api-journeys-modern-stage:latest"
- logConfiguration = {
- logDriver = "awsfirelens"
- options = {
- Host = "http-intake.logs.datadoghq.com"
- Name = "datadog"
- TLS = "on"
- compress = "gzip"
- dd_service = "api-journeys-modern"
- dd_source = "graphql-yoga"
- dd_tags = "env:stage"
- provider = "ecs"
- retry_limit = "2"
}
- secretOptions = [
- {
- name = "apikey"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
}
- memory = 2048
- mountPoints = []
- name = "jfp-api-journeys-modern-stage-app"
- portMappings = [
- {
- containerPort = 4004
- hostPort = 4004
- protocol = "tcp"
},
]
- secrets = [
- {
- name = "AWS_ACCESS_KEY_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/AWS_ACCESS_KEY_ID"
},
- {
- name = "AWS_SECRET_ACCESS_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/AWS_SECRET_ACCESS_KEY"
},
- {
- name = "CLOUDFLARE_UPLOAD_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/CLOUDFLARE_UPLOAD_KEY"
},
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
- {
- name = "FACEBOOK_APP_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/FACEBOOK_APP_ID"
},
- {
- name = "FACEBOOK_APP_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/FACEBOOK_APP_SECRET"
},
- {
- name = "FIREBASE_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/FIREBASE_API_KEY"
},
- {
- name = "GATEWAY_HMAC_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GATEWAY_HMAC_SECRET"
},
- {
- name = "GATEWAY_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GATEWAY_URL"
},
- {
- name = "GIT_BRANCH"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GIT_BRANCH"
},
- {
- name = "GOOGLE_APPLICATION_JSON"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GOOGLE_APPLICATION_JSON"
},
- {
- name = "GOOGLE_CLIENT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GOOGLE_CLIENT_ID"
},
- {
- name = "GOOGLE_CLIENT_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GOOGLE_CLIENT_SECRET"
},
- {
- name = "GOOGLE_GENERATIVE_AI_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GOOGLE_GENERATIVE_AI_API_KEY"
},
- {
- name = "GROWTH_SPACES_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GROWTH_SPACES_URL"
},
- {
- name = "INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET"
},
- {
- name = "INTEROP_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/INTEROP_TOKEN"
},
- {
- name = "JOURNEYS_ADMIN_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/JOURNEYS_ADMIN_URL"
},
- {
- name = "JOURNEYS_REVALIDATE_ACCESS_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/JOURNEYS_REVALIDATE_ACCESS_TOKEN"
},
- {
- name = "JOURNEYS_SHORTLINK_DOMAIN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/JOURNEYS_SHORTLINK_DOMAIN"
},
- {
- name = "JOURNEYS_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/JOURNEYS_URL"
},
- {
- name = "MAILCHIMP_AUDIENCE_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/MAILCHIMP_AUDIENCE_ID"
},
- {
- name = "MAILCHIMP_MARKETING_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/MAILCHIMP_MARKETING_API_KEY"
},
- {
- name = "MAILCHIMP_MARKETING_API_SERVER_PREFIX"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/MAILCHIMP_MARKETING_API_SERVER_PREFIX"
},
- {
- name = "NAT_ADDRESSES"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/NAT_ADDRESSES"
},
- {
- name = "OPEN_AI_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/OPEN_AI_API_KEY"
},
- {
- name = "PG_DATABASE_URL_JOURNEYS"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PG_DATABASE_URL_JOURNEYS"
},
- {
- name = "PLAUSIBLE_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAUSIBLE_API_KEY"
},
- {
- name = "PLAUSIBLE_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAUSIBLE_URL"
},
- {
- name = "PLAYWRIGHT_USER_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID"
},
- {
- name = "PLAYWRIGHT_USER_ID_2"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_2"
},
- {
- name = "PLAYWRIGHT_USER_ID_3"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_3"
},
- {
- name = "PLAYWRIGHT_USER_ID_4"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_4"
},
- {
- name = "PLAYWRIGHT_USER_ID_5"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_5"
},
- {
- name = "PLAYWRIGHT_USER_ID_6"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_6"
},
- {
- name = "POWER_BI_CLIENT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_CLIENT_ID"
},
- {
- name = "POWER_BI_CLIENT_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_CLIENT_SECRET"
},
- {
- name = "POWER_BI_JOURNEYS_MULTIPLE_FULL_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_JOURNEYS_MULTIPLE_FULL_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_MULTIPLE_SUMMARY_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_JOURNEYS_MULTIPLE_SUMMARY_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_SINGLE_FULL_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_JOURNEYS_SINGLE_FULL_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_SINGLE_SUMMARY_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_JOURNEYS_SINGLE_SUMMARY_REPORT_ID"
},
- {
- name = "POWER_BI_TENANT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_TENANT_ID"
},
- {
- name = "POWER_BI_WORKSPACE_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_WORKSPACE_ID"
},
- {
- name = "REDIS_PORT"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/REDIS_PORT"
},
- {
- name = "REDIS_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/REDIS_URL"
},
- {
- name = "SMTP_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/SMTP_URL"
},
- {
- name = "VERCEL_JOURNEYS_PROJECT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/VERCEL_JOURNEYS_PROJECT_ID"
},
- {
- name = "VERCEL_TEAM_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/VERCEL_TEAM_ID"
},
- {
- name = "VERCEL_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/VERCEL_TOKEN"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = [
- {
- name = "DD_APM_ENABLED"
- value = "true"
},
- {
- name = "DD_APM_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_DOGSTATSD_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_LOGS_INJECTION"
- value = "true"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT"
- value = "0.0.0.0:4317"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT"
- value = "0.0.0.0:4318"
},
- {
- name = "DD_PROCESS_AGENT_ENABLED"
- value = "true"
},
- {
- name = "DD_PROFILING_ENABLED"
- value = "true"
},
- {
- name = "DD_RUNTIME_METRICS_ENABLED"
- value = "true"
},
- {
- name = "DD_TAGS"
- value = "env:stage app:api-journeys-modern"
},
- {
- name = "DD_TRACE_ANALYTICS_ENABLED"
- value = "true"
},
- {
- name = "ECS_FARGATE"
- value = "true"
},
]
- essential = true
- image = "public.ecr.aws/datadog/agent:latest"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "api-journeys-modern-stage-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 128
- mountPoints = []
- name = "jfp-api-journeys-modern-stage-datadog-agent"
- portMappings = [
- {
- containerPort = 4317
- hostPort = 4317
- protocol = "tcp"
},
- {
- containerPort = 4318
- hostPort = 4318
- protocol = "tcp"
},
- {
- containerPort = 8125
- hostPort = 8125
- protocol = "udp"
},
]
- secrets = [
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = []
- essential = true
- firelensConfiguration = {
- options = {
- config-file-type = "file"
- config-file-value = "/fluent-bit/configs/parse-json.conf"
- enable-ecs-log-metadata = "true"
}
- type = "fluentbit"
}
- image = "amazon/aws-for-fluent-bit:stable"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "api-journeys-modern-stage-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 100
- mountPoints = []
- name = "jfp-api-journeys-modern-stage-log-router"
- portMappings = []
- systemControls = []
- user = "0"
- volumesFrom = []
},
]
) -> (known after apply) # forces replacement
~ enable_fault_injection = false -> (known after apply)
~ id = "jfp-api-journeys-modern-stage" -> (known after apply)
~ revision = 17 -> (known after apply)
- tags = {} -> null
~ tags_all = {} -> (known after apply)
# (12 unchanged attributes hidden)
}
# module.stage.module.api-journeys-modern.module.ecs-task.aws_ssm_parameter.parameters["PG_DATABASE_URL_USERS"] will be created
+ resource "aws_ssm_parameter" "parameters" {
+ arn = (known after apply)
+ data_type = (known after apply)
+ has_value_wo = (known after apply)
+ id = (known after apply)
+ insecure_value = (known after apply)
+ key_id = (known after apply)
+ name = "/ecs/api-journeys/stage/PG_DATABASE_URL_USERS"
+ overwrite = true
+ region = "us-east-2"
+ tags = {
+ "name" = "PG_DATABASE_URL_USERS"
}
+ tags_all = {
+ "name" = "PG_DATABASE_URL_USERS"
}
+ tier = (known after apply)
+ type = "SecureString"
+ value = (sensitive value)
+ value_wo = (write-only attribute)
+ version = (known after apply)
}
Plan: 4 to add, 9 to change, 2 to destroy.
╷
│ Warning: Deprecated Resource
│
│ with module.datadog.datadog_integration_aws.sandbox,
│ on modules/aws/datadog/main.tf line 118, in resource "datadog_integration_aws" "sandbox":
│ 118: resource "datadog_integration_aws" "sandbox" {
│
│ **This resource is deprecated - use the `datadog_integration_aws_account`
│ resource instead**:
│ https://registry.terraform.io/providers/DataDog/datadog/latest/docs/resources/integration_aws_account
╵
╷
│ Warning: Deprecated attribute
│
│ on .terraform/modules/datadog.datadog_log_forwarder/modules/log_forwarder/main.tf line 2, in locals:
│ 2: bucket_name = var.bucket_name != "" ? var.bucket_name : "datadog-forwarder-${data.aws_caller_identity.current.account_id}-${data.aws_region.current.name}"
│
│ The attribute "name" is deprecated. Refer to the provider documentation for
│ details.
│
│ (and 2 more similar warnings elsewhere)
╵
Note: Objects have changed outside of Terraform
|
|
atlantis unlock |
|
All Atlantis locks for this PR have been unlocked and plans discarded |
… removing transaction and enabling cascade deletes for related records
|
Plan Error |
|
atlantis unlock |
|
All Atlantis locks for this PR have been unlocked and plans discarded |
|
Ran Plan for dir: Show OutputTerraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
~ update in-place
- destroy
+/- create replacement and then destroy
Terraform will perform the following actions:
# module.prod.module.eks.aws_eks_node_group.az_2a_ondemand will be updated in-place
~ resource "aws_eks_node_group" "az_2a_ondemand" {
id = "jfp-eks-prod:jfp-eks-node-group-2a-prod"
tags = {}
# (17 unchanged attributes hidden)
~ scaling_config {
~ desired_size = 3 -> 2
~ max_size = 5 -> 4
~ min_size = 3 -> 2
}
# (2 unchanged blocks hidden)
}
# module.prod.module.postgresql.aws_rds_cluster.default will be updated in-place
~ resource "aws_rds_cluster" "default" {
+ enable_local_write_forwarding = false
~ engine_version = "13.20" -> "13.18"
id = "jfp-core-prod"
tags = {}
# (59 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.prod.module.postgresql.aws_rds_cluster_instance.default will be updated in-place
~ resource "aws_rds_cluster_instance" "default" {
~ engine_version = "13.20" -> "13.18"
+ force_destroy = false
id = "tf-20240604195536182300000003"
tags = {}
# (32 unchanged attributes hidden)
}
# module.stage.module.eks.aws_eks_node_group.az_2a_ondemand will be updated in-place
~ resource "aws_eks_node_group" "az_2a_ondemand" {
id = "jfp-eks-stage:jfp-eks-node-group-2a-stage"
tags = {}
# (17 unchanged attributes hidden)
~ scaling_config {
~ desired_size = 3 -> 2
~ max_size = 5 -> 4
~ min_size = 3 -> 2
}
# (2 unchanged blocks hidden)
}
# module.stage.module.postgresql.aws_rds_cluster.default will be updated in-place
~ resource "aws_rds_cluster" "default" {
+ enable_local_write_forwarding = false
~ engine_version = "13.20" -> "13.18"
id = "jfp-core-stage"
tags = {}
# (59 unchanged attributes hidden)
# (1 unchanged block hidden)
}
# module.stage.module.postgresql.aws_rds_cluster_instance.default will be updated in-place
~ resource "aws_rds_cluster_instance" "default" {
~ engine_version = "13.20" -> "13.18"
+ force_destroy = false
id = "tf-20240618004835876400000003"
tags = {}
# (32 unchanged attributes hidden)
}
# module.prod.module.api-journeys-modern.module.ecs-task.aws_ecs_service.ecs_service will be updated in-place
~ resource "aws_ecs_service" "ecs_service" {
id = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-prod/api-journeys-modern-prod-service"
name = "api-journeys-modern-prod-service"
tags = {}
~ task_definition = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-prod:17" -> (known after apply)
# (18 unchanged attributes hidden)
# (4 unchanged blocks hidden)
}
# module.prod.module.api-journeys-modern.module.ecs-task.aws_ecs_task_definition.ecs_task_definition must be replaced
+/- resource "aws_ecs_task_definition" "ecs_task_definition" {
~ arn = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-prod:17" -> (known after apply)
~ arn_without_revision = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-prod" -> (known after apply)
~ container_definitions = jsonencode(
[
- {
- cpu = 1024
- environment = [
- {
- name = "NODE_ENV"
- value = "production"
},
- {
- name = "SERVICE_ENV"
- value = "prod"
},
- {
- name = "SERVICE_NAME"
- value = "api-journeys-modern"
},
]
- essential = true
- image = "410965620680.dkr.ecr.us-east-2.amazonaws.com/jfp-api-journeys-modern-prod:latest"
- logConfiguration = {
- logDriver = "awsfirelens"
- options = {
- Host = "http-intake.logs.datadoghq.com"
- Name = "datadog"
- TLS = "on"
- compress = "gzip"
- dd_service = "api-journeys-modern"
- dd_source = "graphql-yoga"
- dd_tags = "env:prod"
- provider = "ecs"
- retry_limit = "2"
}
- secretOptions = [
- {
- name = "apikey"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
}
- memory = 2048
- mountPoints = []
- name = "jfp-api-journeys-modern-prod-app"
- portMappings = [
- {
- containerPort = 4004
- hostPort = 4004
- protocol = "tcp"
},
]
- secrets = [
- {
- name = "AWS_ACCESS_KEY_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/AWS_ACCESS_KEY_ID"
},
- {
- name = "AWS_SECRET_ACCESS_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/AWS_SECRET_ACCESS_KEY"
},
- {
- name = "CLOUDFLARE_UPLOAD_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/CLOUDFLARE_UPLOAD_KEY"
},
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
- {
- name = "FACEBOOK_APP_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/FACEBOOK_APP_ID"
},
- {
- name = "FACEBOOK_APP_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/FACEBOOK_APP_SECRET"
},
- {
- name = "FIREBASE_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/FIREBASE_API_KEY"
},
- {
- name = "GATEWAY_HMAC_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GATEWAY_HMAC_SECRET"
},
- {
- name = "GATEWAY_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GATEWAY_URL"
},
- {
- name = "GIT_BRANCH"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GIT_BRANCH"
},
- {
- name = "GOOGLE_APPLICATION_JSON"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GOOGLE_APPLICATION_JSON"
},
- {
- name = "GOOGLE_CLIENT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GOOGLE_CLIENT_ID"
},
- {
- name = "GOOGLE_CLIENT_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GOOGLE_CLIENT_SECRET"
},
- {
- name = "GOOGLE_GENERATIVE_AI_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GOOGLE_GENERATIVE_AI_API_KEY"
},
- {
- name = "GROWTH_SPACES_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GROWTH_SPACES_URL"
},
- {
- name = "INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET"
},
- {
- name = "INTEROP_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/INTEROP_TOKEN"
},
- {
- name = "JOURNEYS_ADMIN_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/JOURNEYS_ADMIN_URL"
},
- {
- name = "JOURNEYS_REVALIDATE_ACCESS_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/JOURNEYS_REVALIDATE_ACCESS_TOKEN"
},
- {
- name = "JOURNEYS_SHORTLINK_DOMAIN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/JOURNEYS_SHORTLINK_DOMAIN"
},
- {
- name = "JOURNEYS_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/JOURNEYS_URL"
},
- {
- name = "MAILCHIMP_AUDIENCE_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/MAILCHIMP_AUDIENCE_ID"
},
- {
- name = "MAILCHIMP_MARKETING_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/MAILCHIMP_MARKETING_API_KEY"
},
- {
- name = "MAILCHIMP_MARKETING_API_SERVER_PREFIX"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/MAILCHIMP_MARKETING_API_SERVER_PREFIX"
},
- {
- name = "NAT_ADDRESSES"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/NAT_ADDRESSES"
},
- {
- name = "OPEN_AI_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/OPEN_AI_API_KEY"
},
- {
- name = "PG_DATABASE_URL_JOURNEYS"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PG_DATABASE_URL_JOURNEYS"
},
- {
- name = "PLAUSIBLE_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAUSIBLE_API_KEY"
},
- {
- name = "PLAUSIBLE_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAUSIBLE_URL"
},
- {
- name = "PLAYWRIGHT_USER_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID"
},
- {
- name = "PLAYWRIGHT_USER_ID_2"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_2"
},
- {
- name = "PLAYWRIGHT_USER_ID_3"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_3"
},
- {
- name = "PLAYWRIGHT_USER_ID_4"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_4"
},
- {
- name = "PLAYWRIGHT_USER_ID_5"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_5"
},
- {
- name = "PLAYWRIGHT_USER_ID_6"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_6"
},
- {
- name = "POWER_BI_CLIENT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_CLIENT_ID"
},
- {
- name = "POWER_BI_CLIENT_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_CLIENT_SECRET"
},
- {
- name = "POWER_BI_JOURNEYS_MULTIPLE_FULL_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_JOURNEYS_MULTIPLE_FULL_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_MULTIPLE_SUMMARY_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_JOURNEYS_MULTIPLE_SUMMARY_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_SINGLE_FULL_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_JOURNEYS_SINGLE_FULL_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_SINGLE_SUMMARY_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_JOURNEYS_SINGLE_SUMMARY_REPORT_ID"
},
- {
- name = "POWER_BI_TENANT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_TENANT_ID"
},
- {
- name = "POWER_BI_WORKSPACE_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_WORKSPACE_ID"
},
- {
- name = "REDIS_PORT"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/REDIS_PORT"
},
- {
- name = "REDIS_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/REDIS_URL"
},
- {
- name = "SMTP_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/SMTP_URL"
},
- {
- name = "VERCEL_JOURNEYS_PROJECT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/VERCEL_JOURNEYS_PROJECT_ID"
},
- {
- name = "VERCEL_TEAM_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/VERCEL_TEAM_ID"
},
- {
- name = "VERCEL_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/VERCEL_TOKEN"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = [
- {
- name = "DD_APM_ENABLED"
- value = "true"
},
- {
- name = "DD_APM_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_DOGSTATSD_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_LOGS_INJECTION"
- value = "true"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT"
- value = "0.0.0.0:4317"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT"
- value = "0.0.0.0:4318"
},
- {
- name = "DD_PROCESS_AGENT_ENABLED"
- value = "true"
},
- {
- name = "DD_PROFILING_ENABLED"
- value = "true"
},
- {
- name = "DD_RUNTIME_METRICS_ENABLED"
- value = "true"
},
- {
- name = "DD_TAGS"
- value = "env:prod app:api-journeys-modern"
},
- {
- name = "DD_TRACE_ANALYTICS_ENABLED"
- value = "true"
},
- {
- name = "ECS_FARGATE"
- value = "true"
},
]
- essential = true
- image = "public.ecr.aws/datadog/agent:latest"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "api-journeys-modern-prod-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 128
- mountPoints = []
- name = "jfp-api-journeys-modern-prod-datadog-agent"
- portMappings = [
- {
- containerPort = 4317
- hostPort = 4317
- protocol = "tcp"
},
- {
- containerPort = 4318
- hostPort = 4318
- protocol = "tcp"
},
- {
- containerPort = 8125
- hostPort = 8125
- protocol = "udp"
},
]
- secrets = [
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = []
- essential = true
- firelensConfiguration = {
- options = {
- config-file-type = "file"
- config-file-value = "/fluent-bit/configs/parse-json.conf"
- enable-ecs-log-metadata = "true"
}
- type = "fluentbit"
}
- image = "amazon/aws-for-fluent-bit:stable"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "api-journeys-modern-prod-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 100
- mountPoints = []
- name = "jfp-api-journeys-modern-prod-log-router"
- portMappings = []
- systemControls = []
- user = "0"
- volumesFrom = []
},
]
) -> (known after apply) # forces replacement
~ enable_fault_injection = false -> (known after apply)
~ id = "jfp-api-journeys-modern-prod" -> (known after apply)
~ revision = 17 -> (known after apply)
- tags = {} -> null
~ tags_all = {} -> (known after apply)
# (12 unchanged attributes hidden)
}
# module.prod.module.api-journeys-modern.module.ecs-task.aws_ssm_parameter.parameters["PG_DATABASE_URL_USERS"] will be created
+ resource "aws_ssm_parameter" "parameters" {
+ arn = (known after apply)
+ data_type = (known after apply)
+ has_value_wo = (known after apply)
+ id = (known after apply)
+ insecure_value = (known after apply)
+ key_id = (known after apply)
+ name = "/ecs/api-journeys/prod/PG_DATABASE_URL_USERS"
+ overwrite = true
+ region = "us-east-2"
+ tags = {
+ "name" = "PG_DATABASE_URL_USERS"
}
+ tags_all = {
+ "name" = "PG_DATABASE_URL_USERS"
}
+ tier = (known after apply)
+ type = "SecureString"
+ value = (sensitive value)
+ value_wo = (write-only attribute)
+ version = (known after apply)
}
# module.prod.module.arclight.module.ecs-task.aws_ecs_service.ecs_service will be updated in-place
~ resource "aws_ecs_service" "ecs_service" {
~ desired_count = 3 -> 1
id = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-prod/arclight-prod-service"
name = "arclight-prod-service"
tags = {}
# (18 unchanged attributes hidden)
# (4 unchanged blocks hidden)
}
# module.prod.module.cms.module.ecs-task.aws_alb_listener_rule.alb_listener_rule will be destroyed
# (because aws_alb_listener_rule.alb_listener_rule is not in configuration)
- resource "aws_alb_listener_rule" "alb_listener_rule" {
- arn = "arn:aws:elasticloadbalancing:us-east-2:410965620680:listener-rule/app/jfp-public-alb-prod/7cf1f0916ed2c660/baff3356faf3dfae/02c9778953c343ed" -> null
- id = "arn:aws:elasticloadbalancing:us-east-2:410965620680:listener-rule/app/jfp-public-alb-prod/7cf1f0916ed2c660/baff3356faf3dfae/02c9778953c343ed" -> null
- listener_arn = "arn:aws:elasticloadbalancing:us-east-2:410965620680:listener/app/jfp-public-alb-prod/7cf1f0916ed2c660/baff3356faf3dfae" -> null
- priority = 4 -> null
- region = "us-east-2" -> null
- tags = {} -> null
- tags_all = {} -> null
- action {
- order = 1 -> null
- target_group_arn = "arn:aws:elasticloadbalancing:us-east-2:410965620680:targetgroup/cms-prod-tg/558eae36912ff7d4" -> null
- type = "forward" -> null
}
- condition {
- host_header {
- values = [
- "cms.jesusfilm.org",
] -> null
}
}
}
# module.prod.module.cms.module.ecs-task.aws_alb_target_group.alb_target_group will be destroyed
# (because aws_alb_target_group.alb_target_group is not in configuration)
- resource "aws_alb_target_group" "alb_target_group" {
- arn = "arn:aws:elasticloadbalancing:us-east-2:410965620680:targetgroup/cms-prod-tg/558eae36912ff7d4" -> null
- arn_suffix = "targetgroup/cms-prod-tg/558eae36912ff7d4" -> null
- deregistration_delay = "300" -> null
- id = "arn:aws:elasticloadbalancing:us-east-2:410965620680:targetgroup/cms-prod-tg/558eae36912ff7d4" -> null
- ip_address_type = "ipv4" -> null
- lambda_multi_value_headers_enabled = false -> null
- load_balancer_arns = [
- "arn:aws:elasticloadbalancing:us-east-2:410965620680:loadbalancer/app/jfp-public-alb-prod/7cf1f0916ed2c660",
] -> null
- load_balancing_algorithm_type = "round_robin" -> null
- load_balancing_anomaly_mitigation = "off" -> null
- load_balancing_cross_zone_enabled = "use_load_balancer_configuration" -> null
- name = "cms-prod-tg" -> null
- port = 1337 -> null
- protocol = "HTTP" -> null
- protocol_version = "HTTP1" -> null
- proxy_protocol_v2 = false -> null
- region = "us-east-2" -> null
- slow_start = 0 -> null
- tags = {} -> null
- tags_all = {} -> null
- target_type = "ip" -> null
- vpc_id = "vpc-0b722b0a1f7789afd" -> null
# (1 unchanged attribute hidden)
- health_check {
- enabled = true -> null
- healthy_threshold = 2 -> null
- interval = 10 -> null
- matcher = "200" -> null
- path = "/_health" -> null
- port = "1337" -> null
- protocol = "HTTP" -> null
- timeout = 4 -> null
- unhealthy_threshold = 4 -> null
}
- stickiness {
- cookie_duration = 86400 -> null
- enabled = false -> null
- type = "lb_cookie" -> null
# (1 unchanged attribute hidden)
}
- target_failover {}
- target_group_health {
- dns_failover {
- minimum_healthy_targets_count = "1" -> null
- minimum_healthy_targets_percentage = "off" -> null
}
- unhealthy_state_routing {
- minimum_healthy_targets_count = 1 -> null
- minimum_healthy_targets_percentage = "off" -> null
}
}
- target_health_state {}
}
# module.prod.module.cms.module.ecs-task.aws_appautoscaling_policy.ecs_policy_cpu will be destroyed
# (because aws_appautoscaling_policy.ecs_policy_cpu is not in configuration)
- resource "aws_appautoscaling_policy" "ecs_policy_cpu" {
- alarm_arns = [
- "arn:aws:cloudwatch:us-east-2:410965620680:alarm:TargetTracking-service/jfp-ecs-cluster-prod/cms-prod-service-AlarmHigh-423543b4-a52a-4c87-99b4-7e7e0a98aec9",
- "arn:aws:cloudwatch:us-east-2:410965620680:alarm:TargetTracking-service/jfp-ecs-cluster-prod/cms-prod-service-AlarmLow-fc30a017-257e-47ad-a23f-bb14a2c99fbc",
] -> null
- arn = "arn:aws:autoscaling:us-east-2:410965620680:scalingPolicy:83ba10e2-c834-400f-b131-aebaa29887df:resource/ecs/service/jfp-ecs-cluster-prod/cms-prod-service:policyName/jfp-cpu-autoscaling-prod" -> null
- id = "jfp-cpu-autoscaling-prod" -> null
- name = "jfp-cpu-autoscaling-prod" -> null
- policy_type = "TargetTrackingScaling" -> null
- region = "us-east-2" -> null
- resource_id = "service/jfp-ecs-cluster-prod/cms-prod-service" -> null
- scalable_dimension = "ecs:service:DesiredCount" -> null
- service_namespace = "ecs" -> null
- target_tracking_scaling_policy_configuration {
- disable_scale_in = false -> null
- scale_in_cooldown = 0 -> null
- scale_out_cooldown = 0 -> null
- target_value = 75 -> null
- predefined_metric_specification {
- predefined_metric_type = "ECSServiceAverageCPUUtilization" -> null
# (1 unchanged attribute hidden)
}
}
}
# module.prod.module.cms.module.ecs-task.aws_appautoscaling_policy.ecs_policy_memory will be destroyed
# (because aws_appautoscaling_policy.ecs_policy_memory is not in configuration)
- resource "aws_appautoscaling_policy" "ecs_policy_memory" {
- alarm_arns = [
- "arn:aws:cloudwatch:us-east-2:410965620680:alarm:TargetTracking-service/jfp-ecs-cluster-prod/cms-prod-service-AlarmHigh-1cb3c0eb-9913-447e-80e7-798fed5d7748",
- "arn:aws:cloudwatch:us-east-2:410965620680:alarm:TargetTracking-service/jfp-ecs-cluster-prod/cms-prod-service-AlarmLow-e40df7e0-6368-4805-8d91-cea2a5e171a2",
] -> null
- arn = "arn:aws:autoscaling:us-east-2:410965620680:scalingPolicy:83ba10e2-c834-400f-b131-aebaa29887df:resource/ecs/service/jfp-ecs-cluster-prod/cms-prod-service:policyName/jfp-memory-autoscaling-prod" -> null
- id = "jfp-memory-autoscaling-prod" -> null
- name = "jfp-memory-autoscaling-prod" -> null
- policy_type = "TargetTrackingScaling" -> null
- region = "us-east-2" -> null
- resource_id = "service/jfp-ecs-cluster-prod/cms-prod-service" -> null
- scalable_dimension = "ecs:service:DesiredCount" -> null
- service_namespace = "ecs" -> null
- target_tracking_scaling_policy_configuration {
- disable_scale_in = false -> null
- scale_in_cooldown = 0 -> null
- scale_out_cooldown = 0 -> null
- target_value = 75 -> null
- predefined_metric_specification {
- predefined_metric_type = "ECSServiceAverageMemoryUtilization" -> null
# (1 unchanged attribute hidden)
}
}
}
# module.prod.module.cms.module.ecs-task.aws_appautoscaling_target.service_autoscaling will be destroyed
# (because aws_appautoscaling_target.service_autoscaling is not in configuration)
- resource "aws_appautoscaling_target" "service_autoscaling" {
- arn = "arn:aws:application-autoscaling:us-east-2:410965620680:scalable-target/0ec583ba10e2c834400fb131aebaa29887df" -> null
- id = "service/jfp-ecs-cluster-prod/cms-prod-service" -> null
- max_capacity = 4 -> null
- min_capacity = 1 -> null
- region = "us-east-2" -> null
- resource_id = "service/jfp-ecs-cluster-prod/cms-prod-service" -> null
- role_arn = "arn:aws:iam::410965620680:role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService" -> null
- scalable_dimension = "ecs:service:DesiredCount" -> null
- service_namespace = "ecs" -> null
- tags = {} -> null
- tags_all = {} -> null
- suspended_state {
- dynamic_scaling_in_suspended = false -> null
- dynamic_scaling_out_suspended = false -> null
- scheduled_scaling_suspended = false -> null
}
}
# module.prod.module.cms.module.ecs-task.aws_cloudwatch_log_group.ecs_cw_log_group will be destroyed
# (because aws_cloudwatch_log_group.ecs_cw_log_group is not in configuration)
- resource "aws_cloudwatch_log_group" "ecs_cw_log_group" {
- arn = "arn:aws:logs:us-east-2:410965620680:log-group:cms-prod-logs" -> null
- id = "cms-prod-logs" -> null
- log_group_class = "STANDARD" -> null
- name = "cms-prod-logs" -> null
- region = "us-east-2" -> null
- retention_in_days = 0 -> null
- skip_destroy = false -> null
- tags = {} -> null
- tags_all = {} -> null
# (2 unchanged attributes hidden)
}
# module.prod.module.cms.module.ecs-task.aws_ecr_lifecycle_policy.ecr_policy will be destroyed
# (because aws_ecr_lifecycle_policy.ecr_policy is not in configuration)
- resource "aws_ecr_lifecycle_policy" "ecr_policy" {
- id = "jfp-cms-prod" -> null
- policy = jsonencode(
{
- rules = [
- {
- action = {
- type = "expire"
}
- description = "Expire more than 10 images"
- rulePriority = 1
- selection = {
- countNumber = 10
- countType = "imageCountMoreThan"
- tagStatus = "any"
}
},
]
}
) -> null
- region = "us-east-2" -> null
- registry_id = "410965620680" -> null
- repository = "jfp-cms-prod" -> null
}
# module.prod.module.cms.module.ecs-task.aws_ecr_repository.ecr_repository will be destroyed
# (because aws_ecr_repository.ecr_repository is not in configuration)
- resource "aws_ecr_repository" "ecr_repository" {
- arn = "arn:aws:ecr:us-east-2:410965620680:repository/jfp-cms-prod" -> null
- id = "jfp-cms-prod" -> null
- image_tag_mutability = "MUTABLE" -> null
- name = "jfp-cms-prod" -> null
- region = "us-east-2" -> null
- registry_id = "410965620680" -> null
- repository_url = "410965620680.dkr.ecr.us-east-2.amazonaws.com/jfp-cms-prod" -> null
- tags = {} -> null
- tags_all = {} -> null
- encryption_configuration {
- encryption_type = "AES256" -> null
# (1 unchanged attribute hidden)
}
- image_scanning_configuration {
- scan_on_push = false -> null
}
}
# module.prod.module.cms.module.ecs-task.aws_ecs_service.ecs_service will be destroyed
# (because aws_ecs_service.ecs_service is not in configuration)
- resource "aws_ecs_service" "ecs_service" {
- arn = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-prod/cms-prod-service" -> null
- availability_zone_rebalancing = "DISABLED" -> null
- cluster = "arn:aws:ecs:us-east-2:410965620680:cluster/jfp-ecs-cluster-prod" -> null
- deployment_maximum_percent = 200 -> null
- deployment_minimum_healthy_percent = 100 -> null
- desired_count = 1 -> null
- enable_ecs_managed_tags = false -> null
- enable_execute_command = true -> null
- health_check_grace_period_seconds = 0 -> null
- iam_role = "/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS" -> null
- id = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-prod/cms-prod-service" -> null
- launch_type = "FARGATE" -> null
- name = "cms-prod-service" -> null
- platform_version = "LATEST" -> null
- propagate_tags = "NONE" -> null
- region = "us-east-2" -> null
- scheduling_strategy = "REPLICA" -> null
- tags = {} -> null
- tags_all = {} -> null
- task_definition = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-cms-prod:1" -> null
- triggers = {} -> null
- wait_for_steady_state = false -> null
- deployment_circuit_breaker {
- enable = false -> null
- rollback = false -> null
}
- deployment_controller {
- type = "ECS" -> null
}
- load_balancer {
- container_name = "jfp-cms-prod-app" -> null
- container_port = 1337 -> null
- target_group_arn = "arn:aws:elasticloadbalancing:us-east-2:410965620680:targetgroup/cms-prod-tg/558eae36912ff7d4" -> null
# (1 unchanged attribute hidden)
}
- network_configuration {
- assign_public_ip = true -> null
- security_groups = [
- "sg-030c49feae781c660",
] -> null
- subnets = [
- "subnet-01aa708571a3e499c",
- "subnet-0aa10af01283bbcdb",
- "subnet-0b7c1e14af0ffb3ea",
] -> null
}
}
# module.prod.module.cms.module.ecs-task.aws_ecs_task_definition.ecs_task_definition will be destroyed
# (because aws_ecs_task_definition.ecs_task_definition is not in configuration)
- resource "aws_ecs_task_definition" "ecs_task_definition" {
- arn = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-cms-prod:1" -> null
- arn_without_revision = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-cms-prod" -> null
- container_definitions = jsonencode(
[
- {
- cpu = 1024
- environment = [
- {
- name = "NODE_ENV"
- value = "production"
},
- {
- name = "SERVICE_ENV"
- value = "prod"
},
- {
- name = "SERVICE_NAME"
- value = "cms"
},
]
- essential = true
- image = "410965620680.dkr.ecr.us-east-2.amazonaws.com/jfp-cms-prod:latest"
- logConfiguration = {
- logDriver = "awsfirelens"
- options = {
- Host = "http-intake.logs.datadoghq.com"
- Name = "datadog"
- TLS = "on"
- compress = "gzip"
- dd_service = "cms"
- dd_source = "strapi"
- dd_tags = "env:prod"
- provider = "ecs"
- retry_limit = "2"
}
- secretOptions = [
- {
- name = "apikey"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
}
- memory = 2048
- mountPoints = []
- name = "jfp-cms-prod-app"
- portMappings = [
- {
- containerPort = 1337
- hostPort = 1337
- protocol = "tcp"
},
]
- secrets = [
- {
- name = "ADMIN_JWT_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/ADMIN_JWT_SECRET"
},
- {
- name = "API_TOKEN_SALT"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/API_TOKEN_SALT"
},
- {
- name = "APP_KEYS"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/APP_KEYS"
},
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
- {
- name = "ENCRYPTION_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/ENCRYPTION_KEY"
},
- {
- name = "MUX_ACCESS_TOKEN_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/MUX_ACCESS_TOKEN_ID"
},
- {
- name = "MUX_PLAYBACK_SIGNING_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/MUX_PLAYBACK_SIGNING_ID"
},
- {
- name = "MUX_PLAYBACK_SIGNING_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/MUX_PLAYBACK_SIGNING_SECRET"
},
- {
- name = "MUX_SECRET_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/MUX_SECRET_KEY"
},
- {
- name = "MUX_WEBHOOK_SIGNING_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/MUX_WEBHOOK_SIGNING_SECRET"
},
- {
- name = "PG_DATABASE_URL_CMS"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/PG_DATABASE_URL_CMS"
},
- {
- name = "TRANSFER_TOKEN_SALT"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/TRANSFER_TOKEN_SALT"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = [
- {
- name = "DD_APM_ENABLED"
- value = "true"
},
- {
- name = "DD_APM_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_DOGSTATSD_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_LOGS_INJECTION"
- value = "true"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT"
- value = "0.0.0.0:4317"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT"
- value = "0.0.0.0:4318"
},
- {
- name = "DD_PROCESS_AGENT_ENABLED"
- value = "true"
},
- {
- name = "DD_PROFILING_ENABLED"
- value = "true"
},
- {
- name = "DD_RUNTIME_METRICS_ENABLED"
- value = "true"
},
- {
- name = "DD_TAGS"
- value = "env:prod app:cms"
},
- {
- name = "DD_TRACE_ANALYTICS_ENABLED"
- value = "true"
},
- {
- name = "ECS_FARGATE"
- value = "true"
},
]
- essential = true
- image = "public.ecr.aws/datadog/agent:latest"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "cms-prod-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 128
- mountPoints = []
- name = "jfp-cms-prod-datadog-agent"
- portMappings = [
- {
- containerPort = 4317
- hostPort = 4317
- protocol = "tcp"
},
- {
- containerPort = 4318
- hostPort = 4318
- protocol = "tcp"
},
- {
- containerPort = 8125
- hostPort = 8125
- protocol = "udp"
},
]
- secrets = [
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = []
- essential = true
- firelensConfiguration = {
- options = {
- config-file-type = "file"
- config-file-value = "/fluent-bit/configs/parse-json.conf"
- enable-ecs-log-metadata = "true"
}
- type = "fluentbit"
}
- image = "amazon/aws-for-fluent-bit:stable"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "cms-prod-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 100
- mountPoints = []
- name = "jfp-cms-prod-log-router"
- portMappings = []
- systemControls = []
- user = "0"
- volumesFrom = []
},
]
) -> null
- cpu = "1024" -> null
- enable_fault_injection = false -> null
- execution_role_arn = "arn:aws:iam::410965620680:role/jfp-ecs-task-execution-role" -> null
- family = "jfp-cms-prod" -> null
- id = "jfp-cms-prod" -> null
- memory = "2048" -> null
- network_mode = "awsvpc" -> null
- region = "us-east-2" -> null
- requires_compatibilities = [
- "FARGATE",
] -> null
- revision = 1 -> null
- skip_destroy = false -> null
- tags = {} -> null
- tags_all = {} -> null
- task_role_arn = "arn:aws:iam::410965620680:role/terraform-ecs-task-role-prod" -> null
- track_latest = false -> null
# (2 unchanged attributes hidden)
}
# module.prod.module.cms.module.ecs-task.aws_route53_record.record will be destroyed
# (because aws_route53_record.record is not in configuration)
- resource "aws_route53_record" "record" {
- fqdn = "cms.central.jesusfilm.org" -> null
- id = "Z06687872LMUIKS0Y291P_cms_CNAME" -> null
- multivalue_answer_routing_policy = false -> null
- name = "cms" -> null
- records = [
- "jfp-public-alb-prod-13771523.us-east-2.elb.amazonaws.com",
] -> null
- ttl = 300 -> null
- type = "CNAME" -> null
- zone_id = "Z06687872LMUIKS0Y291P" -> null
# (2 unchanged attributes hidden)
}
# module.prod.module.cms.module.ecs-task.aws_ssm_parameter.parameters["ADMIN_JWT_SECRET"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/ADMIN_JWT_SECRET" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/prod/ADMIN_JWT_SECRET" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/prod/ADMIN_JWT_SECRET" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "ADMIN_JWT_SECRET"
} -> null
- tags_all = {
- "name" = "ADMIN_JWT_SECRET"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.prod.module.cms.module.ecs-task.aws_ssm_parameter.parameters["API_TOKEN_SALT"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/API_TOKEN_SALT" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/prod/API_TOKEN_SALT" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/prod/API_TOKEN_SALT" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "API_TOKEN_SALT"
} -> null
- tags_all = {
- "name" = "API_TOKEN_SALT"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.prod.module.cms.module.ecs-task.aws_ssm_parameter.parameters["APP_KEYS"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/APP_KEYS" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/prod/APP_KEYS" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/prod/APP_KEYS" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "APP_KEYS"
} -> null
- tags_all = {
- "name" = "APP_KEYS"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.prod.module.cms.module.ecs-task.aws_ssm_parameter.parameters["ENCRYPTION_KEY"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/ENCRYPTION_KEY" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/prod/ENCRYPTION_KEY" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/prod/ENCRYPTION_KEY" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "ENCRYPTION_KEY"
} -> null
- tags_all = {
- "name" = "ENCRYPTION_KEY"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.prod.module.cms.module.ecs-task.aws_ssm_parameter.parameters["MUX_ACCESS_TOKEN_ID"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/MUX_ACCESS_TOKEN_ID" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/prod/MUX_ACCESS_TOKEN_ID" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/prod/MUX_ACCESS_TOKEN_ID" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "MUX_ACCESS_TOKEN_ID"
} -> null
- tags_all = {
- "name" = "MUX_ACCESS_TOKEN_ID"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.prod.module.cms.module.ecs-task.aws_ssm_parameter.parameters["MUX_PLAYBACK_SIGNING_ID"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/MUX_PLAYBACK_SIGNING_ID" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/prod/MUX_PLAYBACK_SIGNING_ID" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/prod/MUX_PLAYBACK_SIGNING_ID" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "MUX_PLAYBACK_SIGNING_ID"
} -> null
- tags_all = {
- "name" = "MUX_PLAYBACK_SIGNING_ID"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.prod.module.cms.module.ecs-task.aws_ssm_parameter.parameters["MUX_PLAYBACK_SIGNING_SECRET"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/MUX_PLAYBACK_SIGNING_SECRET" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/prod/MUX_PLAYBACK_SIGNING_SECRET" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/prod/MUX_PLAYBACK_SIGNING_SECRET" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "MUX_PLAYBACK_SIGNING_SECRET"
} -> null
- tags_all = {
- "name" = "MUX_PLAYBACK_SIGNING_SECRET"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.prod.module.cms.module.ecs-task.aws_ssm_parameter.parameters["MUX_SECRET_KEY"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/MUX_SECRET_KEY" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/prod/MUX_SECRET_KEY" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/prod/MUX_SECRET_KEY" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "MUX_SECRET_KEY"
} -> null
- tags_all = {
- "name" = "MUX_SECRET_KEY"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.prod.module.cms.module.ecs-task.aws_ssm_parameter.parameters["MUX_WEBHOOK_SIGNING_SECRET"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/MUX_WEBHOOK_SIGNING_SECRET" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/prod/MUX_WEBHOOK_SIGNING_SECRET" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/prod/MUX_WEBHOOK_SIGNING_SECRET" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "MUX_WEBHOOK_SIGNING_SECRET"
} -> null
- tags_all = {
- "name" = "MUX_WEBHOOK_SIGNING_SECRET"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.prod.module.cms.module.ecs-task.aws_ssm_parameter.parameters["PG_DATABASE_URL_CMS"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/PG_DATABASE_URL_CMS" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/prod/PG_DATABASE_URL_CMS" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/prod/PG_DATABASE_URL_CMS" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "PG_DATABASE_URL_CMS"
} -> null
- tags_all = {
- "name" = "PG_DATABASE_URL_CMS"
} -> null
- tiWarning: Output length greater than max comment size. Continued in next comment. |
|
Continued plan output from previous comment. Show Outputer = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 3 -> null
# (2 unchanged attributes hidden)
}
# module.prod.module.cms.module.ecs-task.aws_ssm_parameter.parameters["TRANSFER_TOKEN_SALT"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/prod/TRANSFER_TOKEN_SALT" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/prod/TRANSFER_TOKEN_SALT" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/prod/TRANSFER_TOKEN_SALT" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "TRANSFER_TOKEN_SALT"
} -> null
- tags_all = {
- "name" = "TRANSFER_TOKEN_SALT"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.stage.module.api-journeys-modern.module.ecs-task.aws_ecs_service.ecs_service will be updated in-place
~ resource "aws_ecs_service" "ecs_service" {
id = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-stage/api-journeys-modern-stage-service"
name = "api-journeys-modern-stage-service"
tags = {}
~ task_definition = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-stage:17" -> (known after apply)
# (18 unchanged attributes hidden)
# (4 unchanged blocks hidden)
}
# module.stage.module.api-journeys-modern.module.ecs-task.aws_ecs_task_definition.ecs_task_definition must be replaced
+/- resource "aws_ecs_task_definition" "ecs_task_definition" {
~ arn = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-stage:17" -> (known after apply)
~ arn_without_revision = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-stage" -> (known after apply)
~ container_definitions = jsonencode(
[
- {
- cpu = 1024
- environment = [
- {
- name = "NODE_ENV"
- value = "production"
},
- {
- name = "SERVICE_ENV"
- value = "stage"
},
- {
- name = "SERVICE_NAME"
- value = "api-journeys-modern"
},
]
- essential = true
- image = "410965620680.dkr.ecr.us-east-2.amazonaws.com/jfp-api-journeys-modern-stage:latest"
- logConfiguration = {
- logDriver = "awsfirelens"
- options = {
- Host = "http-intake.logs.datadoghq.com"
- Name = "datadog"
- TLS = "on"
- compress = "gzip"
- dd_service = "api-journeys-modern"
- dd_source = "graphql-yoga"
- dd_tags = "env:stage"
- provider = "ecs"
- retry_limit = "2"
}
- secretOptions = [
- {
- name = "apikey"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
}
- memory = 2048
- mountPoints = []
- name = "jfp-api-journeys-modern-stage-app"
- portMappings = [
- {
- containerPort = 4004
- hostPort = 4004
- protocol = "tcp"
},
]
- secrets = [
- {
- name = "AWS_ACCESS_KEY_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/AWS_ACCESS_KEY_ID"
},
- {
- name = "AWS_SECRET_ACCESS_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/AWS_SECRET_ACCESS_KEY"
},
- {
- name = "CLOUDFLARE_UPLOAD_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/CLOUDFLARE_UPLOAD_KEY"
},
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
- {
- name = "FACEBOOK_APP_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/FACEBOOK_APP_ID"
},
- {
- name = "FACEBOOK_APP_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/FACEBOOK_APP_SECRET"
},
- {
- name = "FIREBASE_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/FIREBASE_API_KEY"
},
- {
- name = "GATEWAY_HMAC_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GATEWAY_HMAC_SECRET"
},
- {
- name = "GATEWAY_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GATEWAY_URL"
},
- {
- name = "GIT_BRANCH"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GIT_BRANCH"
},
- {
- name = "GOOGLE_APPLICATION_JSON"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GOOGLE_APPLICATION_JSON"
},
- {
- name = "GOOGLE_CLIENT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GOOGLE_CLIENT_ID"
},
- {
- name = "GOOGLE_CLIENT_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GOOGLE_CLIENT_SECRET"
},
- {
- name = "GOOGLE_GENERATIVE_AI_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GOOGLE_GENERATIVE_AI_API_KEY"
},
- {
- name = "GROWTH_SPACES_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GROWTH_SPACES_URL"
},
- {
- name = "INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET"
},
- {
- name = "INTEROP_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/INTEROP_TOKEN"
},
- {
- name = "JOURNEYS_ADMIN_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/JOURNEYS_ADMIN_URL"
},
- {
- name = "JOURNEYS_REVALIDATE_ACCESS_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/JOURNEYS_REVALIDATE_ACCESS_TOKEN"
},
- {
- name = "JOURNEYS_SHORTLINK_DOMAIN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/JOURNEYS_SHORTLINK_DOMAIN"
},
- {
- name = "JOURNEYS_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/JOURNEYS_URL"
},
- {
- name = "MAILCHIMP_AUDIENCE_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/MAILCHIMP_AUDIENCE_ID"
},
- {
- name = "MAILCHIMP_MARKETING_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/MAILCHIMP_MARKETING_API_KEY"
},
- {
- name = "MAILCHIMP_MARKETING_API_SERVER_PREFIX"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/MAILCHIMP_MARKETING_API_SERVER_PREFIX"
},
- {
- name = "NAT_ADDRESSES"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/NAT_ADDRESSES"
},
- {
- name = "OPEN_AI_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/OPEN_AI_API_KEY"
},
- {
- name = "PG_DATABASE_URL_JOURNEYS"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PG_DATABASE_URL_JOURNEYS"
},
- {
- name = "PLAUSIBLE_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAUSIBLE_API_KEY"
},
- {
- name = "PLAUSIBLE_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAUSIBLE_URL"
},
- {
- name = "PLAYWRIGHT_USER_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID"
},
- {
- name = "PLAYWRIGHT_USER_ID_2"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_2"
},
- {
- name = "PLAYWRIGHT_USER_ID_3"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_3"
},
- {
- name = "PLAYWRIGHT_USER_ID_4"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_4"
},
- {
- name = "PLAYWRIGHT_USER_ID_5"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_5"
},
- {
- name = "PLAYWRIGHT_USER_ID_6"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_6"
},
- {
- name = "POWER_BI_CLIENT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_CLIENT_ID"
},
- {
- name = "POWER_BI_CLIENT_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_CLIENT_SECRET"
},
- {
- name = "POWER_BI_JOURNEYS_MULTIPLE_FULL_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_JOURNEYS_MULTIPLE_FULL_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_MULTIPLE_SUMMARY_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_JOURNEYS_MULTIPLE_SUMMARY_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_SINGLE_FULL_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_JOURNEYS_SINGLE_FULL_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_SINGLE_SUMMARY_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_JOURNEYS_SINGLE_SUMMARY_REPORT_ID"
},
- {
- name = "POWER_BI_TENANT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_TENANT_ID"
},
- {
- name = "POWER_BI_WORKSPACE_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_WORKSPACE_ID"
},
- {
- name = "REDIS_PORT"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/REDIS_PORT"
},
- {
- name = "REDIS_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/REDIS_URL"
},
- {
- name = "SMTP_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/SMTP_URL"
},
- {
- name = "VERCEL_JOURNEYS_PROJECT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/VERCEL_JOURNEYS_PROJECT_ID"
},
- {
- name = "VERCEL_TEAM_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/VERCEL_TEAM_ID"
},
- {
- name = "VERCEL_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/VERCEL_TOKEN"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = [
- {
- name = "DD_APM_ENABLED"
- value = "true"
},
- {
- name = "DD_APM_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_DOGSTATSD_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_LOGS_INJECTION"
- value = "true"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT"
- value = "0.0.0.0:4317"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT"
- value = "0.0.0.0:4318"
},
- {
- name = "DD_PROCESS_AGENT_ENABLED"
- value = "true"
},
- {
- name = "DD_PROFILING_ENABLED"
- value = "true"
},
- {
- name = "DD_RUNTIME_METRICS_ENABLED"
- value = "true"
},
- {
- name = "DD_TAGS"
- value = "env:stage app:api-journeys-modern"
},
- {
- name = "DD_TRACE_ANALYTICS_ENABLED"
- value = "true"
},
- {
- name = "ECS_FARGATE"
- value = "true"
},
]
- essential = true
- image = "public.ecr.aws/datadog/agent:latest"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "api-journeys-modern-stage-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 128
- mountPoints = []
- name = "jfp-api-journeys-modern-stage-datadog-agent"
- portMappings = [
- {
- containerPort = 4317
- hostPort = 4317
- protocol = "tcp"
},
- {
- containerPort = 4318
- hostPort = 4318
- protocol = "tcp"
},
- {
- containerPort = 8125
- hostPort = 8125
- protocol = "udp"
},
]
- secrets = [
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = []
- essential = true
- firelensConfiguration = {
- options = {
- config-file-type = "file"
- config-file-value = "/fluent-bit/configs/parse-json.conf"
- enable-ecs-log-metadata = "true"
}
- type = "fluentbit"
}
- image = "amazon/aws-for-fluent-bit:stable"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "api-journeys-modern-stage-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 100
- mountPoints = []
- name = "jfp-api-journeys-modern-stage-log-router"
- portMappings = []
- systemControls = []
- user = "0"
- volumesFrom = []
},
]
) -> (known after apply) # forces replacement
~ enable_fault_injection = false -> (known after apply)
~ id = "jfp-api-journeys-modern-stage" -> (known after apply)
~ revision = 17 -> (known after apply)
- tags = {} -> null
~ tags_all = {} -> (known after apply)
# (12 unchanged attributes hidden)
}
# module.stage.module.api-journeys-modern.module.ecs-task.aws_ssm_parameter.parameters["PG_DATABASE_URL_USERS"] will be created
+ resource "aws_ssm_parameter" "parameters" {
+ arn = (known after apply)
+ data_type = (known after apply)
+ has_value_wo = (known after apply)
+ id = (known after apply)
+ insecure_value = (known after apply)
+ key_id = (known after apply)
+ name = "/ecs/api-journeys/stage/PG_DATABASE_URL_USERS"
+ overwrite = true
+ region = "us-east-2"
+ tags = {
+ "name" = "PG_DATABASE_URL_USERS"
}
+ tags_all = {
+ "name" = "PG_DATABASE_URL_USERS"
}
+ tier = (known after apply)
+ type = "SecureString"
+ value = (sensitive value)
+ value_wo = (write-only attribute)
+ version = (known after apply)
}
# module.stage.module.cms.module.ecs-task.aws_alb_listener_rule.alb_listener_rule will be destroyed
# (because aws_alb_listener_rule.alb_listener_rule is not in configuration)
- resource "aws_alb_listener_rule" "alb_listener_rule" {
- arn = "arn:aws:elasticloadbalancing:us-east-2:410965620680:listener-rule/app/jfp-public-alb-stage/27d94355c709eb16/e976ba0cdd6d17a6/78b1efc27e185d01" -> null
- id = "arn:aws:elasticloadbalancing:us-east-2:410965620680:listener-rule/app/jfp-public-alb-stage/27d94355c709eb16/e976ba0cdd6d17a6/78b1efc27e185d01" -> null
- listener_arn = "arn:aws:elasticloadbalancing:us-east-2:410965620680:listener/app/jfp-public-alb-stage/27d94355c709eb16/e976ba0cdd6d17a6" -> null
- priority = 4 -> null
- region = "us-east-2" -> null
- tags = {} -> null
- tags_all = {} -> null
- action {
- order = 1 -> null
- target_group_arn = "arn:aws:elasticloadbalancing:us-east-2:410965620680:targetgroup/cms-stage-tg/3253bc770843fe67" -> null
- type = "forward" -> null
}
- condition {
- host_header {
- values = [
- "cms-stage.jesusfilm.org",
] -> null
}
}
}
# module.stage.module.cms.module.ecs-task.aws_alb_target_group.alb_target_group will be destroyed
# (because aws_alb_target_group.alb_target_group is not in configuration)
- resource "aws_alb_target_group" "alb_target_group" {
- arn = "arn:aws:elasticloadbalancing:us-east-2:410965620680:targetgroup/cms-stage-tg/3253bc770843fe67" -> null
- arn_suffix = "targetgroup/cms-stage-tg/3253bc770843fe67" -> null
- deregistration_delay = "300" -> null
- id = "arn:aws:elasticloadbalancing:us-east-2:410965620680:targetgroup/cms-stage-tg/3253bc770843fe67" -> null
- ip_address_type = "ipv4" -> null
- lambda_multi_value_headers_enabled = false -> null
- load_balancer_arns = [
- "arn:aws:elasticloadbalancing:us-east-2:410965620680:loadbalancer/app/jfp-public-alb-stage/27d94355c709eb16",
] -> null
- load_balancing_algorithm_type = "round_robin" -> null
- load_balancing_anomaly_mitigation = "off" -> null
- load_balancing_cross_zone_enabled = "use_load_balancer_configuration" -> null
- name = "cms-stage-tg" -> null
- port = 1337 -> null
- protocol = "HTTP" -> null
- protocol_version = "HTTP1" -> null
- proxy_protocol_v2 = false -> null
- region = "us-east-2" -> null
- slow_start = 0 -> null
- tags = {} -> null
- tags_all = {} -> null
- target_type = "ip" -> null
- vpc_id = "vpc-08eeff0fe23f23079" -> null
# (1 unchanged attribute hidden)
- health_check {
- enabled = true -> null
- healthy_threshold = 2 -> null
- interval = 10 -> null
- matcher = "200" -> null
- path = "/_health" -> null
- port = "1337" -> null
- protocol = "HTTP" -> null
- timeout = 4 -> null
- unhealthy_threshold = 4 -> null
}
- stickiness {
- cookie_duration = 86400 -> null
- enabled = false -> null
- type = "lb_cookie" -> null
# (1 unchanged attribute hidden)
}
- target_failover {}
- target_group_health {
- dns_failover {
- minimum_healthy_targets_count = "1" -> null
- minimum_healthy_targets_percentage = "off" -> null
}
- unhealthy_state_routing {
- minimum_healthy_targets_count = 1 -> null
- minimum_healthy_targets_percentage = "off" -> null
}
}
- target_health_state {}
}
# module.stage.module.cms.module.ecs-task.aws_appautoscaling_policy.ecs_policy_cpu will be destroyed
# (because aws_appautoscaling_policy.ecs_policy_cpu is not in configuration)
- resource "aws_appautoscaling_policy" "ecs_policy_cpu" {
- alarm_arns = [
- "arn:aws:cloudwatch:us-east-2:410965620680:alarm:TargetTracking-service/jfp-ecs-cluster-stage/cms-stage-service-AlarmHigh-904d80f7-842c-41a5-8f2c-b368a32acc42",
- "arn:aws:cloudwatch:us-east-2:410965620680:alarm:TargetTracking-service/jfp-ecs-cluster-stage/cms-stage-service-AlarmLow-162ccf13-92d0-4db9-9cd8-19bfa7704d38",
] -> null
- arn = "arn:aws:autoscaling:us-east-2:410965620680:scalingPolicy:be7ab121-ae86-430c-a697-f5dd9043c727:resource/ecs/service/jfp-ecs-cluster-stage/cms-stage-service:policyName/jfp-cpu-autoscaling-stage" -> null
- id = "jfp-cpu-autoscaling-stage" -> null
- name = "jfp-cpu-autoscaling-stage" -> null
- policy_type = "TargetTrackingScaling" -> null
- region = "us-east-2" -> null
- resource_id = "service/jfp-ecs-cluster-stage/cms-stage-service" -> null
- scalable_dimension = "ecs:service:DesiredCount" -> null
- service_namespace = "ecs" -> null
- target_tracking_scaling_policy_configuration {
- disable_scale_in = false -> null
- scale_in_cooldown = 0 -> null
- scale_out_cooldown = 0 -> null
- target_value = 75 -> null
- predefined_metric_specification {
- predefined_metric_type = "ECSServiceAverageCPUUtilization" -> null
# (1 unchanged attribute hidden)
}
}
}
# module.stage.module.cms.module.ecs-task.aws_appautoscaling_policy.ecs_policy_memory will be destroyed
# (because aws_appautoscaling_policy.ecs_policy_memory is not in configuration)
- resource "aws_appautoscaling_policy" "ecs_policy_memory" {
- alarm_arns = [
- "arn:aws:cloudwatch:us-east-2:410965620680:alarm:TargetTracking-service/jfp-ecs-cluster-stage/cms-stage-service-AlarmHigh-ec7ae986-6064-4c53-9000-b057b6b20000",
- "arn:aws:cloudwatch:us-east-2:410965620680:alarm:TargetTracking-service/jfp-ecs-cluster-stage/cms-stage-service-AlarmLow-521e28fd-b2ce-4c28-b234-ebcbac5a0ec8",
] -> null
- arn = "arn:aws:autoscaling:us-east-2:410965620680:scalingPolicy:be7ab121-ae86-430c-a697-f5dd9043c727:resource/ecs/service/jfp-ecs-cluster-stage/cms-stage-service:policyName/jfp-memory-autoscaling-stage" -> null
- id = "jfp-memory-autoscaling-stage" -> null
- name = "jfp-memory-autoscaling-stage" -> null
- policy_type = "TargetTrackingScaling" -> null
- region = "us-east-2" -> null
- resource_id = "service/jfp-ecs-cluster-stage/cms-stage-service" -> null
- scalable_dimension = "ecs:service:DesiredCount" -> null
- service_namespace = "ecs" -> null
- target_tracking_scaling_policy_configuration {
- disable_scale_in = false -> null
- scale_in_cooldown = 0 -> null
- scale_out_cooldown = 0 -> null
- target_value = 75 -> null
- predefined_metric_specification {
- predefined_metric_type = "ECSServiceAverageMemoryUtilization" -> null
# (1 unchanged attribute hidden)
}
}
}
# module.stage.module.cms.module.ecs-task.aws_appautoscaling_target.service_autoscaling will be destroyed
# (because aws_appautoscaling_target.service_autoscaling is not in configuration)
- resource "aws_appautoscaling_target" "service_autoscaling" {
- arn = "arn:aws:application-autoscaling:us-east-2:410965620680:scalable-target/0ec5be7ab121ae86430ca697f5dd9043c727" -> null
- id = "service/jfp-ecs-cluster-stage/cms-stage-service" -> null
- max_capacity = 4 -> null
- min_capacity = 1 -> null
- region = "us-east-2" -> null
- resource_id = "service/jfp-ecs-cluster-stage/cms-stage-service" -> null
- role_arn = "arn:aws:iam::410965620680:role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService" -> null
- scalable_dimension = "ecs:service:DesiredCount" -> null
- service_namespace = "ecs" -> null
- tags = {} -> null
- tags_all = {} -> null
- suspended_state {
- dynamic_scaling_in_suspended = false -> null
- dynamic_scaling_out_suspended = false -> null
- scheduled_scaling_suspended = false -> null
}
}
# module.stage.module.cms.module.ecs-task.aws_cloudwatch_log_group.ecs_cw_log_group will be destroyed
# (because aws_cloudwatch_log_group.ecs_cw_log_group is not in configuration)
- resource "aws_cloudwatch_log_group" "ecs_cw_log_group" {
- arn = "arn:aws:logs:us-east-2:410965620680:log-group:cms-stage-logs" -> null
- id = "cms-stage-logs" -> null
- log_group_class = "STANDARD" -> null
- name = "cms-stage-logs" -> null
- region = "us-east-2" -> null
- retention_in_days = 0 -> null
- skip_destroy = false -> null
- tags = {} -> null
- tags_all = {} -> null
# (2 unchanged attributes hidden)
}
# module.stage.module.cms.module.ecs-task.aws_ecr_lifecycle_policy.ecr_policy will be destroyed
# (because aws_ecr_lifecycle_policy.ecr_policy is not in configuration)
- resource "aws_ecr_lifecycle_policy" "ecr_policy" {
- id = "jfp-cms-stage" -> null
- policy = jsonencode(
{
- rules = [
- {
- action = {
- type = "expire"
}
- description = "Expire more than 10 images"
- rulePriority = 1
- selection = {
- countNumber = 10
- countType = "imageCountMoreThan"
- tagStatus = "any"
}
},
]
}
) -> null
- region = "us-east-2" -> null
- registry_id = "410965620680" -> null
- repository = "jfp-cms-stage" -> null
}
# module.stage.module.cms.module.ecs-task.aws_ecr_repository.ecr_repository will be destroyed
# (because aws_ecr_repository.ecr_repository is not in configuration)
- resource "aws_ecr_repository" "ecr_repository" {
- arn = "arn:aws:ecr:us-east-2:410965620680:repository/jfp-cms-stage" -> null
- id = "jfp-cms-stage" -> null
- image_tag_mutability = "MUTABLE" -> null
- name = "jfp-cms-stage" -> null
- region = "us-east-2" -> null
- registry_id = "410965620680" -> null
- repository_url = "410965620680.dkr.ecr.us-east-2.amazonaws.com/jfp-cms-stage" -> null
- tags = {} -> null
- tags_all = {} -> null
- encryption_configuration {
- encryption_type = "AES256" -> null
# (1 unchanged attribute hidden)
}
- image_scanning_configuration {
- scan_on_push = false -> null
}
}
# module.stage.module.cms.module.ecs-task.aws_ecs_service.ecs_service will be destroyed
# (because aws_ecs_service.ecs_service is not in configuration)
- resource "aws_ecs_service" "ecs_service" {
- arn = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-stage/cms-stage-service" -> null
- availability_zone_rebalancing = "DISABLED" -> null
- cluster = "arn:aws:ecs:us-east-2:410965620680:cluster/jfp-ecs-cluster-stage" -> null
- deployment_maximum_percent = 200 -> null
- deployment_minimum_healthy_percent = 100 -> null
- desired_count = 1 -> null
- enable_ecs_managed_tags = false -> null
- enable_execute_command = true -> null
- health_check_grace_period_seconds = 0 -> null
- iam_role = "/aws-service-role/ecs.amazonaws.com/AWSServiceRoleForECS" -> null
- id = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-stage/cms-stage-service" -> null
- launch_type = "FARGATE" -> null
- name = "cms-stage-service" -> null
- platform_version = "LATEST" -> null
- propagate_tags = "NONE" -> null
- region = "us-east-2" -> null
- scheduling_strategy = "REPLICA" -> null
- tags = {} -> null
- tags_all = {} -> null
- task_definition = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-cms-stage:1" -> null
- triggers = {} -> null
- wait_for_steady_state = false -> null
- deployment_circuit_breaker {
- enable = false -> null
- rollback = false -> null
}
- deployment_controller {
- type = "ECS" -> null
}
- load_balancer {
- container_name = "jfp-cms-stage-app" -> null
- container_port = 1337 -> null
- target_group_arn = "arn:aws:elasticloadbalancing:us-east-2:410965620680:targetgroup/cms-stage-tg/3253bc770843fe67" -> null
# (1 unchanged attribute hidden)
}
- network_configuration {
- assign_public_ip = true -> null
- security_groups = [
- "sg-0715e664d653ce89c",
] -> null
- subnets = [
- "subnet-03bd7850c8bbe2ce9",
- "subnet-0a609b33cdac65789",
- "subnet-0c394639d255c3261",
] -> null
}
}
# module.stage.module.cms.module.ecs-task.aws_ecs_task_definition.ecs_task_definition will be destroyed
# (because aws_ecs_task_definition.ecs_task_definition is not in configuration)
- resource "aws_ecs_task_definition" "ecs_task_definition" {
- arn = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-cms-stage:1" -> null
- arn_without_revision = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-cms-stage" -> null
- container_definitions = jsonencode(
[
- {
- cpu = 1024
- environment = [
- {
- name = "NODE_ENV"
- value = "production"
},
- {
- name = "SERVICE_ENV"
- value = "stage"
},
- {
- name = "SERVICE_NAME"
- value = "cms"
},
]
- essential = true
- image = "410965620680.dkr.ecr.us-east-2.amazonaws.com/jfp-cms-stage:latest"
- logConfiguration = {
- logDriver = "awsfirelens"
- options = {
- Host = "http-intake.logs.datadoghq.com"
- Name = "datadog"
- TLS = "on"
- compress = "gzip"
- dd_service = "cms"
- dd_source = "strapi"
- dd_tags = "env:stage"
- provider = "ecs"
- retry_limit = "2"
}
- secretOptions = [
- {
- name = "apikey"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
}
- memory = 2048
- mountPoints = []
- name = "jfp-cms-stage-app"
- portMappings = [
- {
- containerPort = 1337
- hostPort = 1337
- protocol = "tcp"
},
]
- secrets = [
- {
- name = "ADMIN_JWT_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/ADMIN_JWT_SECRET"
},
- {
- name = "API_TOKEN_SALT"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/API_TOKEN_SALT"
},
- {
- name = "APP_KEYS"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/APP_KEYS"
},
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
- {
- name = "ENCRYPTION_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/ENCRYPTION_KEY"
},
- {
- name = "MUX_ACCESS_TOKEN_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/MUX_ACCESS_TOKEN_ID"
},
- {
- name = "MUX_PLAYBACK_SIGNING_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/MUX_PLAYBACK_SIGNING_ID"
},
- {
- name = "MUX_PLAYBACK_SIGNING_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/MUX_PLAYBACK_SIGNING_SECRET"
},
- {
- name = "MUX_SECRET_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/MUX_SECRET_KEY"
},
- {
- name = "MUX_WEBHOOK_SIGNING_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/MUX_WEBHOOK_SIGNING_SECRET"
},
- {
- name = "PG_DATABASE_URL_CMS"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/PG_DATABASE_URL_CMS"
},
- {
- name = "TRANSFER_TOKEN_SALT"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/TRANSFER_TOKEN_SALT"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = [
- {
- name = "DD_APM_ENABLED"
- value = "true"
},
- {
- name = "DD_APM_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_DOGSTATSD_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_LOGS_INJECTION"
- value = "true"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT"
- value = "0.0.0.0:4317"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT"
- value = "0.0.0.0:4318"
},
- {
- name = "DD_PROCESS_AGENT_ENABLED"
- value = "true"
},
- {
- name = "DD_PROFILING_ENABLED"
- value = "true"
},
- {
- name = "DD_RUNTIME_METRICS_ENABLED"
- value = "true"
},
- {
- name = "DD_TAGS"
- value = "env:stage app:cms"
},
- {
- name = "DD_TRACE_ANALYTICS_ENABLED"
- value = "true"
},
- {
- name = "ECS_FARGATE"
- value = "true"
},
]
- essential = true
- image = "public.ecr.aws/datadog/agent:latest"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "cms-stage-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 128
- mountPoints = []
- name = "jfp-cms-stage-datadog-agent"
- portMappings = [
- {
- containerPort = 4317
- hostPort = 4317
- protocol = "tcp"
},
- {
- containerPort = 4318
- hostPort = 4318
- protocol = "tcp"
},
- {
- containerPort = 8125
- hostPort = 8125
- protocol = "udp"
},
]
- secrets = [
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = []
- essential = true
- firelensConfiguration = {
- options = {
- config-file-type = "file"
- config-file-value = "/fluent-bit/configs/parse-json.conf"
- enable-ecs-log-metadata = "true"
}
- type = "fluentbit"
}
- image = "amazon/aws-for-fluent-bit:stable"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "cms-stage-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 100
- mountPoints = []
- name = "jfp-cms-stage-log-router"
- portMappings = []
- systemControls = []
- user = "0"
- volumesFrom = []
},
]
) -> null
- cpu = "1024" -> null
- enable_fault_injection = false -> null
- execution_role_arn = "arn:aws:iam::410965620680:role/jfp-ecs-task-execution-role" -> null
- family = "jfp-cms-stage" -> null
- id = "jfp-cms-stage" -> null
- memory = "2048" -> null
- network_mode = "awsvpc" -> null
- region = "us-east-2" -> null
- requires_compatibilities = [
- "FARGATE",
] -> null
- revision = 1 -> null
- skip_destroy = false -> null
- tags = {} -> null
- tags_all = {} -> null
- task_role_arn = "arn:aws:iam::410965620680:role/terraform-ecs-task-role-stage" -> null
- track_latest = false -> null
# (2 unchanged attributes hidden)
}
# module.stage.module.cms.module.ecs-task.aws_route53_record.record will be destroyed
# (because aws_route53_record.record is not in configuration)
- resource "aws_route53_record" "record" {
- fqdn = "cms.stage.central.jesusfilm.org" -> null
- id = "Z09188583TUYV562FI49B_cms_CNAME" -> null
- multivalue_answer_routing_policy = false -> null
- name = "cms" -> null
- records = [
- "jfp-public-alb-stage-1845039612.us-east-2.elb.amazonaws.com",
] -> null
- ttl = 300 -> null
- type = "CNAME" -> null
- zone_id = "Z09188583TUYV562FI49B" -> null
# (2 unchanged attributes hidden)
}
# module.stage.module.cms.module.ecs-task.aws_ssm_parameter.parameters["ADMIN_JWT_SECRET"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/ADMIN_JWT_SECRET" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/stage/ADMIN_JWT_SECRET" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/stage/ADMIN_JWT_SECRET" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "ADMIN_JWT_SECRET"
} -> null
- tags_all = {
- "name" = "ADMIN_JWT_SECRET"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.stage.module.cms.module.ecs-task.aws_ssm_parameter.parameters["API_TOKEN_SALT"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/API_TOKEN_SALT" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/stage/API_TOKEN_SALT" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/stage/API_TOKEN_SALT" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "API_TOKEN_SALT"
} -> null
- tags_all = {
- "name" = "API_TOKEN_SALT"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.stage.module.cms.module.ecs-task.aws_ssm_parameter.parameters["APP_KEYS"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/APP_KEYS" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/stage/APP_KEYS" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/stage/APP_KEYS" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "APP_KEYS"
} -> null
- tags_all = {
- "name" = "APP_KEYS"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.stage.module.cms.module.ecs-task.aws_ssm_parameter.parameters["ENCRYPTION_KEY"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/ENCRYPTION_KEY" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/stage/ENCRYPTION_KEY" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/stage/ENCRYPTION_KEY" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "ENCRYPTION_KEY"
} -> null
- tags_all = {
- "name" = "ENCRYPTION_KEY"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.stage.module.cms.module.ecs-task.aws_ssm_parameter.parameters["MUX_ACCESS_TOKEN_ID"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/MUX_ACCESS_TOKEN_ID" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/stage/MUX_ACCESS_TOKEN_ID" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/stage/MUX_ACCESS_TOKEN_ID" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "MUX_ACCESS_TOKEN_ID"
} -> null
- tags_all = {
- "name" = "MUX_ACCESS_TOKEN_ID"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.stage.module.cms.module.ecs-task.aws_ssm_parameter.parameters["MUX_PLAYBACK_SIGNING_ID"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/MUX_PLAYBACK_SIGNING_ID" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/stage/MUX_PLAYBACK_SIGNING_ID" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/stage/MUX_PLAYBACK_SIGNING_ID" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "MUX_PLAYBACK_SIGNING_ID"
} -> null
- tags_all = {
- "name" = "MUX_PLAYBACK_SIGNING_ID"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.stage.module.cms.module.ecs-task.aws_ssm_parameter.parameters["MUX_PLAYBACK_SIGNING_SECRET"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/MUX_PLAYBACK_SIGNING_SECRET" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/stage/MUX_PLAYBACK_SIGNING_SECRET" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/stage/MUX_PLAYBACK_SIGNING_SECRET" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "MUX_PLAYBACK_SIGNING_SECRET"
} -> null
- tags_all = {
- "name" = "MUX_PLAYBACK_SIGNING_SECRET"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.stage.module.cms.module.ecs-task.aws_ssm_parameter.parameters["MUX_SECRET_KEY"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/MUX_SECRET_KEY" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/stage/MUX_SECRET_KEY" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/stage/MUX_SECRET_KEY" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "MUX_SECRET_KEY"
} -> null
- tags_all = {
- "name" = "MUX_SECRET_KEY"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.stage.module.cms.module.ecs-task.aws_ssm_parameter.parameters["MUX_WEBHOOK_SIGNING_SECRET"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/MUX_WEBHOOK_SIGNING_SECRET" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/stage/MUX_WEBHOOK_SIGNING_SECRET" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/stage/MUX_WEBHOOK_SIGNING_SECRET" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "MUX_WEBHOOK_SIGNING_SECRET"
} -> null
- tags_all = {
- "name" = "MUX_WEBHOOK_SIGNING_SECRET"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
# module.stage.module.cms.module.ecs-task.aws_ssm_parameter.parameters["PG_DATABASE_URL_CMS"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/PG_DATABASE_URL_CMS" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/stage/PG_DATABASE_URL_CMS" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/stage/PG_DATABASE_URL_CMS" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "PG_DATABASE_URL_CMS"
} -> null
- tags_all = {
- "name" = "PG_DATABASE_URL_CMS"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 3 -> null
# (2 unchanged attributes hidden)
}
# module.stage.module.cms.module.ecs-task.aws_ssm_parameter.parameters["TRANSFER_TOKEN_SALT"] will be destroyed
# (because aws_ssm_parameter.parameters is not in configuration)
- resource "aws_ssm_parameter" "parameters" {
- arn = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/cms/stage/TRANSFER_TOKEN_SALT" -> null
- data_type = "text" -> null
- has_value_wo = false -> null
- id = "/ecs/cms/stage/TRANSFER_TOKEN_SALT" -> null
- key_id = "alias/aws/ssm" -> null
- name = "/ecs/cms/stage/TRANSFER_TOKEN_SALT" -> null
- overwrite = true -> null
- region = "us-east-2" -> null
- tags = {
- "name" = "TRANSFER_TOKEN_SALT"
} -> null
- tags_all = {
- "name" = "TRANSFER_TOKEN_SALT"
} -> null
- tier = "Standard" -> null
- type = "SecureString" -> null
- value = (sensitive value) -> null
- value_wo = (write-only attribute) -> null
- version = 2 -> null
# (2 unchanged attributes hidden)
}
Plan: 4 to add, 9 to change, 46 to destroy.
╷
│ Warning: Deprecated Resource
│
│ with module.datadog.datadog_integration_aws.sandbox,
│ on modules/aws/datadog/main.tf line 118, in resource "datadog_integration_aws" "sandbox":
│ 118: resource "datadog_integration_aws" "sandbox" {
│
│ **This resource is deprecated - use the `datadog_integration_aws_account`
│ resource instead**:
│ https://registry.terraform.io/providers/DataDog/datadog/latest/docs/resources/integration_aws_account
╵
╷
│ Warning: Deprecated attribute
│
│ on .terraform/modules/datadog.datadog_log_forwarder/modules/log_forwarder/main.tf line 2, in locals:
│ 2: bucket_name = var.bucket_name != "" ? var.bucket_name : "datadog-forwarder-${data.aws_caller_identity.current.account_id}-${data.aws_region.current.name}"
│
│ The attribute "name" is deprecated. Refer to the provider documentation for
│ details.
│
│ (and 2 more similar warnings elsewhere)
╵
Plan: 4 to add, 9 to change, 46 to destroy.
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
🤖 Fix all issues with AI agents
In `@apis/api-journeys-modern/src/workers/server.ts`:
- Around line 59-93: The server currently only executes run(await import(/*
webpackChunkName: "e2eCleanup" */ './e2eCleanup')) causing production workers to
be skipped; either re-enable the production jobs by restoring the run(await
import(...)) calls for './email', './emailEvents', './revalidate',
'./plausible', and './shortlinkUpdater' (matching the existing pattern and
webpackChunkName comments) so those modules are executed, or—if the change was
intentional—update this module to explicitly document and restrict scope to
e2eCleanup (and remove or refactor the unused imports) and ensure any main entry
point that imports this file (via run) is updated to reflect the new, limited
worker set.
📜 Review details
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Disabled knowledge base sources:
- Linear integration is disabled by default for public repositories
You can enable these sources in your CodeRabbit configuration.
📒 Files selected for processing (5)
apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.tsapis/api-journeys-modern/src/workers/e2eCleanup/service/service.tsapis/api-journeys-modern/src/workers/server.tslibs/prisma/journeys/db/migrations/20260115213838_20260115213836/migration.sqllibs/prisma/journeys/db/schema.prisma
🚧 Files skipped from review as they are similar to previous changes (2)
- apis/api-journeys-modern/src/workers/e2eCleanup/service/service.spec.ts
- apis/api-journeys-modern/src/workers/e2eCleanup/service/service.ts
🧰 Additional context used
📓 Path-based instructions (2)
**/*.{ts,tsx,js,jsx}
📄 CodeRabbit inference engine (.cursor/rules/base.mdc)
**/*.{ts,tsx,js,jsx}: Use early returns whenever possible to make the code more readable.
Use descriptive variable and function/const names.
Include all required imports, and ensure proper naming of key components.
Files:
apis/api-journeys-modern/src/workers/server.ts
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/base.mdc)
Define a type if possible.
Files:
apis/api-journeys-modern/src/workers/server.ts
🧠 Learnings (7)
📓 Common learnings
Learnt from: CR
Repo: JesusFilm/core PR: 0
File: apps/watch/AGENTS.md:0-0
Timestamp: 2025-12-19T04:58:24.460Z
Learning: Applies to apps/watch/apps/watch-e2e/**/*.{ts,tsx} : Reuse the workspace Playwright installation for E2E tests in `apps/watch-e2e`; never install Playwright globally or commit browser binaries.
Learnt from: CR
Repo: JesusFilm/core PR: 0
File: apps/watch/AGENTS.md:0-0
Timestamp: 2025-12-19T04:58:24.460Z
Learning: Reuse E2E coverage from `apps/watch-e2e` and its Playwright setup instead of creating new tooling.
📚 Learning: 2025-11-11T23:22:02.196Z
Learnt from: mikeallisonJS
Repo: JesusFilm/core PR: 8156
File: apis/api-journeys-modern/src/lib/google/googleAuth.ts:0-0
Timestamp: 2025-11-11T23:22:02.196Z
Learning: In apis/api-journeys-modern, use the validated `env` object from `../../env` instead of accessing `process.env` directly for environment variables that are defined in env.ts (e.g., GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET, INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET). This eliminates the need for runtime validation checks since Zod validates them at application startup.
Applied to files:
apis/api-journeys-modern/src/workers/server.ts
📚 Learning: 2025-09-29T23:03:36.840Z
Learnt from: mikeallisonJS
Repo: JesusFilm/core PR: 7629
File: apis/api-journeys-modern/src/schema/event/utils.ts:43-60
Timestamp: 2025-09-29T23:03:36.840Z
Learning: In the JesusFilm/core repository, do not recommend using Prisma's `upsert` operation for `JourneyVisitor` creation in `apis/api-journeys-modern/src/schema/event/utils.ts` as it is not race condition safe for this use case. The current `findUnique` then `create` pattern is the preferred approach.
Applied to files:
libs/prisma/journeys/db/schema.prismalibs/prisma/journeys/db/migrations/20260115213838_20260115213836/migration.sql
📚 Learning: 2025-09-08T22:56:21.606Z
Learnt from: mikeallisonJS
Repo: JesusFilm/core PR: 7498
File: apis/api-journeys-modern/src/schema/action/emailAction/blockUpdateEmailAction.mutation.ts:26-36
Timestamp: 2025-09-08T22:56:21.606Z
Learning: In the action mutations migration (PR `#7498`), the `journeyId` parameter is intentionally kept in blockUpdate*Action mutations even when unused in the resolver, to maintain API compatibility during the migration from the old "api-journeys" endpoint to the modern "api-journeys-modern" endpoint.
Applied to files:
libs/prisma/journeys/db/schema.prismalibs/prisma/journeys/db/migrations/20260115213838_20260115213836/migration.sql
📚 Learning: 2025-08-20T21:51:25.797Z
Learnt from: mikeallisonJS
Repo: JesusFilm/core PR: 7486
File: apis/api-journeys-modern/schema.graphql:1068-1074
Timestamp: 2025-08-20T21:51:25.797Z
Learning: Before suggesting type changes during API migrations, always verify the existing implementation to ensure consistency is maintained. The migration to api-journeys-modern should preserve the same field types as the original api-journeys schema.
Applied to files:
libs/prisma/journeys/db/schema.prismalibs/prisma/journeys/db/migrations/20260115213838_20260115213836/migration.sql
📚 Learning: 2025-08-06T23:30:51.611Z
Learnt from: Kneesal
Repo: JesusFilm/core PR: 7362
File: apis/api-journeys/db/migrations/20250806231541_20250806231536/migration.sql:23-24
Timestamp: 2025-08-06T23:30:51.611Z
Learning: In the JourneyCustomizationField table (apis/api-journeys/db/migrations), the unique index on (journeyId, key, value) intentionally allows multiple rows with the same journeyId and key when value is NULL. This supports the business logic where multiple template/default customization fields can exist before being filled in with actual values.
Applied to files:
libs/prisma/journeys/db/schema.prismalibs/prisma/journeys/db/migrations/20260115213838_20260115213836/migration.sql
📚 Learning: 2025-08-20T21:51:25.797Z
Learnt from: mikeallisonJS
Repo: JesusFilm/core PR: 7486
File: apis/api-journeys-modern/schema.graphql:1068-1074
Timestamp: 2025-08-20T21:51:25.797Z
Learning: During the refactor to migrate types to modern, maintain consistency with existing api-journeys schema types, including PlausibleStatsAggregateValue.change as Int to match the original implementation.
Applied to files:
libs/prisma/journeys/db/migrations/20260115213838_20260115213836/migration.sql
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (7)
- GitHub Check: test (22, 2/3)
- GitHub Check: test (22, 3/3)
- GitHub Check: test (22, 1/3)
- GitHub Check: lint (22)
- GitHub Check: affected (22)
- GitHub Check: lint (22)
- GitHub Check: Analyze (javascript)
🔇 Additional comments (5)
libs/prisma/journeys/db/schema.prisma (4)
151-151: Cascade delete on Event → Journey aligns with cleanup intent.
372-372: Cascade delete on JourneyTag → Journey is consistent with cleanup.
728-728: Cascade delete on QrCode → Journey looks correct for cleanup.
739-739: Cascade delete on JourneyEventsExportLog → Journey is appropriate for cleanup.libs/prisma/journeys/db/migrations/20260115213838_20260115213836/migration.sql (1)
1-23: FK replacement to enable cascade behavior looks consistent with schema updates.
✏️ Tip: You can disable this entire section by setting review_details to false in your review settings.
|
atlantis unlock |
|
All Atlantis locks for this PR have been unlocked and plans discarded |
|
Ran Plan for dir: Plan Error Show Output |
…oved readability and execution
|
Ran Plan for dir: Plan Error |
|
Ran Plan for dir: Show OutputTerraform used the selected providers to generate the following execution
plan. Resource actions are indicated with the following symbols:
+ create
~ update in-place
+/- create replacement and then destroy
Terraform will perform the following actions:
# module.prod.module.api-journeys-modern.module.ecs-task.aws_ecs_service.ecs_service will be updated in-place
~ resource "aws_ecs_service" "ecs_service" {
id = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-prod/api-journeys-modern-prod-service"
name = "api-journeys-modern-prod-service"
tags = {}
~ task_definition = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-prod:17" -> (known after apply)
# (18 unchanged attributes hidden)
# (4 unchanged blocks hidden)
}
# module.prod.module.api-journeys-modern.module.ecs-task.aws_ecs_task_definition.ecs_task_definition must be replaced
+/- resource "aws_ecs_task_definition" "ecs_task_definition" {
~ arn = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-prod:17" -> (known after apply)
~ arn_without_revision = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-prod" -> (known after apply)
~ container_definitions = jsonencode(
[
- {
- cpu = 1024
- environment = [
- {
- name = "NODE_ENV"
- value = "production"
},
- {
- name = "SERVICE_ENV"
- value = "prod"
},
- {
- name = "SERVICE_NAME"
- value = "api-journeys-modern"
},
]
- essential = true
- image = "410965620680.dkr.ecr.us-east-2.amazonaws.com/jfp-api-journeys-modern-prod:latest"
- logConfiguration = {
- logDriver = "awsfirelens"
- options = {
- Host = "http-intake.logs.datadoghq.com"
- Name = "datadog"
- TLS = "on"
- compress = "gzip"
- dd_service = "api-journeys-modern"
- dd_source = "graphql-yoga"
- dd_tags = "env:prod"
- provider = "ecs"
- retry_limit = "2"
}
- secretOptions = [
- {
- name = "apikey"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
}
- memory = 2048
- mountPoints = []
- name = "jfp-api-journeys-modern-prod-app"
- portMappings = [
- {
- containerPort = 4004
- hostPort = 4004
- protocol = "tcp"
},
]
- secrets = [
- {
- name = "AWS_ACCESS_KEY_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/AWS_ACCESS_KEY_ID"
},
- {
- name = "AWS_SECRET_ACCESS_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/AWS_SECRET_ACCESS_KEY"
},
- {
- name = "CLOUDFLARE_UPLOAD_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/CLOUDFLARE_UPLOAD_KEY"
},
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
- {
- name = "FACEBOOK_APP_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/FACEBOOK_APP_ID"
},
- {
- name = "FACEBOOK_APP_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/FACEBOOK_APP_SECRET"
},
- {
- name = "FIREBASE_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/FIREBASE_API_KEY"
},
- {
- name = "GATEWAY_HMAC_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GATEWAY_HMAC_SECRET"
},
- {
- name = "GATEWAY_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GATEWAY_URL"
},
- {
- name = "GIT_BRANCH"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GIT_BRANCH"
},
- {
- name = "GOOGLE_APPLICATION_JSON"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GOOGLE_APPLICATION_JSON"
},
- {
- name = "GOOGLE_CLIENT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GOOGLE_CLIENT_ID"
},
- {
- name = "GOOGLE_CLIENT_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GOOGLE_CLIENT_SECRET"
},
- {
- name = "GOOGLE_GENERATIVE_AI_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GOOGLE_GENERATIVE_AI_API_KEY"
},
- {
- name = "GROWTH_SPACES_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/GROWTH_SPACES_URL"
},
- {
- name = "INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET"
},
- {
- name = "INTEROP_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/INTEROP_TOKEN"
},
- {
- name = "JOURNEYS_ADMIN_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/JOURNEYS_ADMIN_URL"
},
- {
- name = "JOURNEYS_REVALIDATE_ACCESS_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/JOURNEYS_REVALIDATE_ACCESS_TOKEN"
},
- {
- name = "JOURNEYS_SHORTLINK_DOMAIN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/JOURNEYS_SHORTLINK_DOMAIN"
},
- {
- name = "JOURNEYS_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/JOURNEYS_URL"
},
- {
- name = "MAILCHIMP_AUDIENCE_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/MAILCHIMP_AUDIENCE_ID"
},
- {
- name = "MAILCHIMP_MARKETING_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/MAILCHIMP_MARKETING_API_KEY"
},
- {
- name = "MAILCHIMP_MARKETING_API_SERVER_PREFIX"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/MAILCHIMP_MARKETING_API_SERVER_PREFIX"
},
- {
- name = "NAT_ADDRESSES"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/NAT_ADDRESSES"
},
- {
- name = "OPEN_AI_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/OPEN_AI_API_KEY"
},
- {
- name = "PG_DATABASE_URL_JOURNEYS"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PG_DATABASE_URL_JOURNEYS"
},
- {
- name = "PLAUSIBLE_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAUSIBLE_API_KEY"
},
- {
- name = "PLAUSIBLE_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAUSIBLE_URL"
},
- {
- name = "PLAYWRIGHT_USER_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID"
},
- {
- name = "PLAYWRIGHT_USER_ID_2"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_2"
},
- {
- name = "PLAYWRIGHT_USER_ID_3"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_3"
},
- {
- name = "PLAYWRIGHT_USER_ID_4"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_4"
},
- {
- name = "PLAYWRIGHT_USER_ID_5"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_5"
},
- {
- name = "PLAYWRIGHT_USER_ID_6"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/PLAYWRIGHT_USER_ID_6"
},
- {
- name = "POWER_BI_CLIENT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_CLIENT_ID"
},
- {
- name = "POWER_BI_CLIENT_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_CLIENT_SECRET"
},
- {
- name = "POWER_BI_JOURNEYS_MULTIPLE_FULL_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_JOURNEYS_MULTIPLE_FULL_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_MULTIPLE_SUMMARY_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_JOURNEYS_MULTIPLE_SUMMARY_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_SINGLE_FULL_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_JOURNEYS_SINGLE_FULL_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_SINGLE_SUMMARY_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_JOURNEYS_SINGLE_SUMMARY_REPORT_ID"
},
- {
- name = "POWER_BI_TENANT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_TENANT_ID"
},
- {
- name = "POWER_BI_WORKSPACE_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/POWER_BI_WORKSPACE_ID"
},
- {
- name = "REDIS_PORT"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/REDIS_PORT"
},
- {
- name = "REDIS_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/REDIS_URL"
},
- {
- name = "SMTP_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/SMTP_URL"
},
- {
- name = "VERCEL_JOURNEYS_PROJECT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/VERCEL_JOURNEYS_PROJECT_ID"
},
- {
- name = "VERCEL_TEAM_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/VERCEL_TEAM_ID"
},
- {
- name = "VERCEL_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/prod/VERCEL_TOKEN"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = [
- {
- name = "DD_APM_ENABLED"
- value = "true"
},
- {
- name = "DD_APM_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_DOGSTATSD_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_LOGS_INJECTION"
- value = "true"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT"
- value = "0.0.0.0:4317"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT"
- value = "0.0.0.0:4318"
},
- {
- name = "DD_PROCESS_AGENT_ENABLED"
- value = "true"
},
- {
- name = "DD_PROFILING_ENABLED"
- value = "true"
},
- {
- name = "DD_RUNTIME_METRICS_ENABLED"
- value = "true"
},
- {
- name = "DD_TAGS"
- value = "env:prod app:api-journeys-modern"
},
- {
- name = "DD_TRACE_ANALYTICS_ENABLED"
- value = "true"
},
- {
- name = "ECS_FARGATE"
- value = "true"
},
]
- essential = true
- image = "public.ecr.aws/datadog/agent:latest"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "api-journeys-modern-prod-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 128
- mountPoints = []
- name = "jfp-api-journeys-modern-prod-datadog-agent"
- portMappings = [
- {
- containerPort = 4317
- hostPort = 4317
- protocol = "tcp"
},
- {
- containerPort = 4318
- hostPort = 4318
- protocol = "tcp"
},
- {
- containerPort = 8125
- hostPort = 8125
- protocol = "udp"
},
]
- secrets = [
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = []
- essential = true
- firelensConfiguration = {
- options = {
- config-file-type = "file"
- config-file-value = "/fluent-bit/configs/parse-json.conf"
- enable-ecs-log-metadata = "true"
}
- type = "fluentbit"
}
- image = "amazon/aws-for-fluent-bit:stable"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "api-journeys-modern-prod-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 100
- mountPoints = []
- name = "jfp-api-journeys-modern-prod-log-router"
- portMappings = []
- systemControls = []
- user = "0"
- volumesFrom = []
},
]
) -> (known after apply) # forces replacement
~ enable_fault_injection = false -> (known after apply)
~ id = "jfp-api-journeys-modern-prod" -> (known after apply)
~ revision = 17 -> (known after apply)
- tags = {} -> null
~ tags_all = {} -> (known after apply)
# (12 unchanged attributes hidden)
}
# module.prod.module.api-journeys-modern.module.ecs-task.aws_ssm_parameter.parameters["PG_DATABASE_URL_USERS"] will be created
+ resource "aws_ssm_parameter" "parameters" {
+ arn = (known after apply)
+ data_type = (known after apply)
+ has_value_wo = (known after apply)
+ id = (known after apply)
+ insecure_value = (known after apply)
+ key_id = (known after apply)
+ name = "/ecs/api-journeys/prod/PG_DATABASE_URL_USERS"
+ overwrite = true
+ region = "us-east-2"
+ tags = {
+ "name" = "PG_DATABASE_URL_USERS"
}
+ tags_all = {
+ "name" = "PG_DATABASE_URL_USERS"
}
+ tier = (known after apply)
+ type = "SecureString"
+ value = (sensitive value)
+ value_wo = (write-only attribute)
+ version = (known after apply)
}
# module.prod.module.arclight.module.ecs-task.aws_ecs_service.ecs_service will be updated in-place
~ resource "aws_ecs_service" "ecs_service" {
~ desired_count = 2 -> 4
id = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-prod/arclight-prod-service"
name = "arclight-prod-service"
tags = {}
# (18 unchanged attributes hidden)
# (4 unchanged blocks hidden)
}
# module.stage.module.api-journeys-modern.module.ecs-task.aws_ecs_service.ecs_service will be updated in-place
~ resource "aws_ecs_service" "ecs_service" {
id = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-stage/api-journeys-modern-stage-service"
name = "api-journeys-modern-stage-service"
tags = {}
~ task_definition = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-stage:17" -> (known after apply)
# (18 unchanged attributes hidden)
# (4 unchanged blocks hidden)
}
# module.stage.module.api-journeys-modern.module.ecs-task.aws_ecs_task_definition.ecs_task_definition must be replaced
+/- resource "aws_ecs_task_definition" "ecs_task_definition" {
~ arn = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-stage:17" -> (known after apply)
~ arn_without_revision = "arn:aws:ecs:us-east-2:410965620680:task-definition/jfp-api-journeys-modern-stage" -> (known after apply)
~ container_definitions = jsonencode(
[
- {
- cpu = 1024
- environment = [
- {
- name = "NODE_ENV"
- value = "production"
},
- {
- name = "SERVICE_ENV"
- value = "stage"
},
- {
- name = "SERVICE_NAME"
- value = "api-journeys-modern"
},
]
- essential = true
- image = "410965620680.dkr.ecr.us-east-2.amazonaws.com/jfp-api-journeys-modern-stage:latest"
- logConfiguration = {
- logDriver = "awsfirelens"
- options = {
- Host = "http-intake.logs.datadoghq.com"
- Name = "datadog"
- TLS = "on"
- compress = "gzip"
- dd_service = "api-journeys-modern"
- dd_source = "graphql-yoga"
- dd_tags = "env:stage"
- provider = "ecs"
- retry_limit = "2"
}
- secretOptions = [
- {
- name = "apikey"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
}
- memory = 2048
- mountPoints = []
- name = "jfp-api-journeys-modern-stage-app"
- portMappings = [
- {
- containerPort = 4004
- hostPort = 4004
- protocol = "tcp"
},
]
- secrets = [
- {
- name = "AWS_ACCESS_KEY_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/AWS_ACCESS_KEY_ID"
},
- {
- name = "AWS_SECRET_ACCESS_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/AWS_SECRET_ACCESS_KEY"
},
- {
- name = "CLOUDFLARE_UPLOAD_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/CLOUDFLARE_UPLOAD_KEY"
},
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
- {
- name = "FACEBOOK_APP_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/FACEBOOK_APP_ID"
},
- {
- name = "FACEBOOK_APP_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/FACEBOOK_APP_SECRET"
},
- {
- name = "FIREBASE_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/FIREBASE_API_KEY"
},
- {
- name = "GATEWAY_HMAC_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GATEWAY_HMAC_SECRET"
},
- {
- name = "GATEWAY_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GATEWAY_URL"
},
- {
- name = "GIT_BRANCH"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GIT_BRANCH"
},
- {
- name = "GOOGLE_APPLICATION_JSON"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GOOGLE_APPLICATION_JSON"
},
- {
- name = "GOOGLE_CLIENT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GOOGLE_CLIENT_ID"
},
- {
- name = "GOOGLE_CLIENT_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GOOGLE_CLIENT_SECRET"
},
- {
- name = "GOOGLE_GENERATIVE_AI_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GOOGLE_GENERATIVE_AI_API_KEY"
},
- {
- name = "GROWTH_SPACES_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/GROWTH_SPACES_URL"
},
- {
- name = "INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/INTEGRATION_ACCESS_KEY_ENCRYPTION_SECRET"
},
- {
- name = "INTEROP_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/INTEROP_TOKEN"
},
- {
- name = "JOURNEYS_ADMIN_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/JOURNEYS_ADMIN_URL"
},
- {
- name = "JOURNEYS_REVALIDATE_ACCESS_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/JOURNEYS_REVALIDATE_ACCESS_TOKEN"
},
- {
- name = "JOURNEYS_SHORTLINK_DOMAIN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/JOURNEYS_SHORTLINK_DOMAIN"
},
- {
- name = "JOURNEYS_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/JOURNEYS_URL"
},
- {
- name = "MAILCHIMP_AUDIENCE_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/MAILCHIMP_AUDIENCE_ID"
},
- {
- name = "MAILCHIMP_MARKETING_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/MAILCHIMP_MARKETING_API_KEY"
},
- {
- name = "MAILCHIMP_MARKETING_API_SERVER_PREFIX"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/MAILCHIMP_MARKETING_API_SERVER_PREFIX"
},
- {
- name = "NAT_ADDRESSES"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/NAT_ADDRESSES"
},
- {
- name = "OPEN_AI_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/OPEN_AI_API_KEY"
},
- {
- name = "PG_DATABASE_URL_JOURNEYS"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PG_DATABASE_URL_JOURNEYS"
},
- {
- name = "PLAUSIBLE_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAUSIBLE_API_KEY"
},
- {
- name = "PLAUSIBLE_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAUSIBLE_URL"
},
- {
- name = "PLAYWRIGHT_USER_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID"
},
- {
- name = "PLAYWRIGHT_USER_ID_2"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_2"
},
- {
- name = "PLAYWRIGHT_USER_ID_3"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_3"
},
- {
- name = "PLAYWRIGHT_USER_ID_4"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_4"
},
- {
- name = "PLAYWRIGHT_USER_ID_5"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_5"
},
- {
- name = "PLAYWRIGHT_USER_ID_6"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/PLAYWRIGHT_USER_ID_6"
},
- {
- name = "POWER_BI_CLIENT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_CLIENT_ID"
},
- {
- name = "POWER_BI_CLIENT_SECRET"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_CLIENT_SECRET"
},
- {
- name = "POWER_BI_JOURNEYS_MULTIPLE_FULL_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_JOURNEYS_MULTIPLE_FULL_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_MULTIPLE_SUMMARY_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_JOURNEYS_MULTIPLE_SUMMARY_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_SINGLE_FULL_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_JOURNEYS_SINGLE_FULL_REPORT_ID"
},
- {
- name = "POWER_BI_JOURNEYS_SINGLE_SUMMARY_REPORT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_JOURNEYS_SINGLE_SUMMARY_REPORT_ID"
},
- {
- name = "POWER_BI_TENANT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_TENANT_ID"
},
- {
- name = "POWER_BI_WORKSPACE_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/POWER_BI_WORKSPACE_ID"
},
- {
- name = "REDIS_PORT"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/REDIS_PORT"
},
- {
- name = "REDIS_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/REDIS_URL"
},
- {
- name = "SMTP_URL"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/SMTP_URL"
},
- {
- name = "VERCEL_JOURNEYS_PROJECT_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/VERCEL_JOURNEYS_PROJECT_ID"
},
- {
- name = "VERCEL_TEAM_ID"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/VERCEL_TEAM_ID"
},
- {
- name = "VERCEL_TOKEN"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/ecs/api-journeys/stage/VERCEL_TOKEN"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = [
- {
- name = "DD_APM_ENABLED"
- value = "true"
},
- {
- name = "DD_APM_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_DOGSTATSD_NON_LOCAL_TRAFFIC"
- value = "true"
},
- {
- name = "DD_LOGS_INJECTION"
- value = "true"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_GRPC_ENDPOINT"
- value = "0.0.0.0:4317"
},
- {
- name = "DD_OTLP_CONFIG_RECEIVER_PROTOCOLS_HTTP_ENDPOINT"
- value = "0.0.0.0:4318"
},
- {
- name = "DD_PROCESS_AGENT_ENABLED"
- value = "true"
},
- {
- name = "DD_PROFILING_ENABLED"
- value = "true"
},
- {
- name = "DD_RUNTIME_METRICS_ENABLED"
- value = "true"
},
- {
- name = "DD_TAGS"
- value = "env:stage app:api-journeys-modern"
},
- {
- name = "DD_TRACE_ANALYTICS_ENABLED"
- value = "true"
},
- {
- name = "ECS_FARGATE"
- value = "true"
},
]
- essential = true
- image = "public.ecr.aws/datadog/agent:latest"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "api-journeys-modern-stage-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 128
- mountPoints = []
- name = "jfp-api-journeys-modern-stage-datadog-agent"
- portMappings = [
- {
- containerPort = 4317
- hostPort = 4317
- protocol = "tcp"
},
- {
- containerPort = 4318
- hostPort = 4318
- protocol = "tcp"
},
- {
- containerPort = 8125
- hostPort = 8125
- protocol = "udp"
},
]
- secrets = [
- {
- name = "DD_API_KEY"
- valueFrom = "arn:aws:ssm:us-east-2:410965620680:parameter/terraform/prd/DATADOG_API_KEY"
},
]
- systemControls = []
- volumesFrom = []
},
- {
- environment = []
- essential = true
- firelensConfiguration = {
- options = {
- config-file-type = "file"
- config-file-value = "/fluent-bit/configs/parse-json.conf"
- enable-ecs-log-metadata = "true"
}
- type = "fluentbit"
}
- image = "amazon/aws-for-fluent-bit:stable"
- logConfiguration = {
- logDriver = "awslogs"
- options = {
- awslogs-group = "api-journeys-modern-stage-logs"
- awslogs-region = "us-east-2"
- awslogs-stream-prefix = "core"
}
}
- memoryReservation = 100
- mountPoints = []
- name = "jfp-api-journeys-modern-stage-log-router"
- portMappings = []
- systemControls = []
- user = "0"
- volumesFrom = []
},
]
) -> (known after apply) # forces replacement
~ enable_fault_injection = false -> (known after apply)
~ id = "jfp-api-journeys-modern-stage" -> (known after apply)
~ revision = 17 -> (known after apply)
- tags = {} -> null
~ tags_all = {} -> (known after apply)
# (12 unchanged attributes hidden)
}
# module.stage.module.api-journeys-modern.module.ecs-task.aws_ssm_parameter.parameters["PG_DATABASE_URL_USERS"] will be created
+ resource "aws_ssm_parameter" "parameters" {
+ arn = (known after apply)
+ data_type = (known after apply)
+ has_value_wo = (known after apply)
+ id = (known after apply)
+ insecure_value = (known after apply)
+ key_id = (known after apply)
+ name = "/ecs/api-journeys/stage/PG_DATABASE_URL_USERS"
+ overwrite = true
+ region = "us-east-2"
+ tags = {
+ "name" = "PG_DATABASE_URL_USERS"
}
+ tags_all = {
+ "name" = "PG_DATABASE_URL_USERS"
}
+ tier = (known after apply)
+ type = "SecureString"
+ value = (sensitive value)
+ value_wo = (write-only attribute)
+ version = (known after apply)
}
# module.stage.module.arclight.module.ecs-task.aws_ecs_service.ecs_service will be updated in-place
~ resource "aws_ecs_service" "ecs_service" {
~ desired_count = 1 -> 4
id = "arn:aws:ecs:us-east-2:410965620680:service/jfp-ecs-cluster-stage/arclight-stage-service"
name = "arclight-stage-service"
tags = {}
# (18 unchanged attributes hidden)
# (4 unchanged blocks hidden)
}
Plan: 4 to add, 4 to change, 2 to destroy.
╷
│ Warning: Deprecated Resource
│
│ with module.datadog.datadog_integration_aws.sandbox,
│ on modules/aws/datadog/main.tf line 118, in resource "datadog_integration_aws" "sandbox":
│ 118: resource "datadog_integration_aws" "sandbox" {
│
│ **This resource is deprecated - use the `datadog_integration_aws_account`
│ resource instead**:
│ https://registry.terraform.io/providers/DataDog/datadog/latest/docs/resources/integration_aws_account
╵
╷
│ Warning: Deprecated attribute
│
│ on .terraform/modules/datadog.datadog_log_forwarder/modules/log_forwarder/main.tf line 2, in locals:
│ 2: bucket_name = var.bucket_name != "" ? var.bucket_name : "datadog-forwarder-${data.aws_caller_identity.current.account_id}-${data.aws_region.current.name}"
│
│ The attribute "name" is deprecated. Refer to the provider documentation for
│ details.
│
│ (and 2 more similar warnings elsewhere)
╵
Plan: 4 to add, 4 to change, 2 to destroy.
|
|
I see you added the "on stage" label, I'll get this merged to the stage branch! |
Summary by CodeRabbit
New Features
Documentation
Tests
Chores
✏️ Tip: You can customize this high-level summary in your review settings.