A financial services firm is refactoring a legacy, on-premises stock-trading API into a serverless microservices architecture on AWS. The modernized solution uses Amazon API Gateway (regional endpoint) and AWS Lambda functions deployed inside private subnets of a VPC. The Lambda functions must execute trades by writing to an Amazon Aurora PostgreSQL database and must also communicate with a third-party regulatory compliance endpoint over the public internet.
The architecture must meet the following requirements:
- Prevent the trade-processing Lambda functions from exhausting the Aurora database's connection pool during peak market hours.
- Prevent trade-processing traffic spikes from consuming the entire regional Lambda concurrency pool, which would throttle other critical services in the same AWS account.
- Ensure high availability for all outbound internet traffic from the Lambda functions.
- Securely store and decrypt regulatory API credentials using AWS Systems Manager Parameter Store. The decryption key must support custom key policy modifications to delegate read-only access to a separate security auditing AWS account.
- Deploy updates to the Lambda function safely using gradual traffic shifting, with automatic rollback if CloudWatch alarms detect errors.
Which design strategy should the Solutions Architect implement to satisfy these requirements?
- ADeploy a single NAT Gateway in one Availability Zone to route all outbound internet traffic. Set up Amazon RDS Proxy in the VPC to manage database connections for the Lambda functions. Assign a reserved concurrency limit to the trade-processing Lambda function. Store the credentials as SecureString parameters in Parameter Store, encrypted with the default AWS-managed KMS key (aws/ssm), and attach an IAM policy to the auditing account allowing decryption of this key. Configure AWS CodeDeploy to perform a canary or linear deployment for Lambda function updates, with CloudWatch alarms configured to automatically roll back on errors.
- BDeploy redundant NAT Gateways across multiple Availability Zones in public subnets, and configure private subnet route tables to direct internet-bound traffic through their local NAT Gateway. Set up Amazon RDS Proxy in the VPC to manage database connections for the Lambda functions. Do not configure a reserved concurrency limit for the trade-processing Lambda function, allowing it to scale dynamically using the account's unreserved concurrency pool. Store the credentials as SecureString parameters in Parameter Store, encrypted with the default AWS-managed KMS key (aws/ssm), and configure the key policy of the aws/ssm key to permit decryption by the auditing account. Configure AWS CodeDeploy to perform a canary or linear deployment for Lambda function updates, with CloudWatch alarms configured to automatically roll back on errors.
- Deploy redundant NAT Gateways across multiple Availability Zones in public subnets, and configure private subnet route tables to direct internet-bound traffic through their local NAT Gateway. Set up Amazon RDS Proxy in the VPC to manage database connections for the Lambda functions. Assign a reserved concurrency limit to the trade-processing Lambda function. Store the credentials as SecureString parameters in Parameter Store, encrypted with a KMS Customer Managed Key (CMK), and configure the CMK's key policy to permit decryption by the auditing account and the Lambda execution role. Configure AWS CodeDeploy to perform a canary or linear deployment for Lambda function updates, with CloudWatch alarms configured to automatically roll back on errors.Cevap
- DDeploy redundant NAT Gateways across multiple Availability Zones in public subnets, and configure private subnet route tables to direct internet-bound traffic through their local NAT Gateway. Set up Amazon RDS Proxy in the VPC to manage database connections for the Lambda functions. Assign a reserved concurrency limit to the trade-processing Lambda function. Store the credentials as SecureString parameters in Parameter Store, encrypted with a KMS Customer Managed Key (CMK), and configure the CMK's key policy to permit decryption by the auditing account and the Lambda execution role. Configure AWS CodeDeploy to perform an all-at-once deployment for Lambda function updates, relying on manual rollbacks if CloudWatch alarms detect errors.