handlers/digital-subscription-expiry/cfn.yaml (158 lines of code) (raw):
AWSTemplateFormatVersion: "2010-09-09"
Description: Gets expiry dates for digital subscriptions or emergency tokens
Parameters:
Stack:
Description: Stack name
Type: String
Default: subscriptions
Stage:
Description: Stage name
Type: String
AllowedValues:
- PROD
- CODE
Default: CODE
App:
Description: App name
Type: String
AllowedValues:
- digital-subscription-authorisation
Default: digital-subscription-authorisation
Mappings:
StageVariables:
PROD:
DomainName: 'digital-subscription-authorisation-prod.subscriptions.guardianapis.com'
ApiGatewayTargetDomainName: 'd-6c6fh16i42.execute-api.eu-west-1.amazonaws.com'
CODE:
DomainName: 'digital-subscription-authorisation-code.subscriptions.guardianapis.com'
ApiGatewayTargetDomainName: 'd-9hsw86gre3.execute-api.eu-west-1.amazonaws.com'
Resources:
LambdaRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
Path: /
Policies:
- PolicyName: LambdaPolicy
PolicyDocument:
Statement:
- Effect: Allow
Action:
- logs:CreateLogGroup
- logs:CreateLogStream
- logs:PutLogEvents
- lambda:InvokeFunction
Resource: !Sub "arn:aws:logs:${AWS::Region}:${AWS::AccountId}:log-group:/aws/lambda/digital-subscription-expiry-${Stage}:log-stream:*"
- PolicyName: ReadPrivateCredentials
PolicyDocument:
Statement:
- Effect: Allow
Action: s3:GetObject
Resource:
- !Sub arn:aws:s3:::gu-reader-revenue-private/membership/support-service-lambdas/${Stage}/zuoraRest-${Stage}.*.json
- !Sub arn:aws:s3:::gu-reader-revenue-private/membership/support-service-lambdas/${Stage}/emergencyTokens-${Stage}.*.json
- !Sub arn:aws:s3:::gu-reader-revenue-private/membership/support-service-lambdas/${Stage}/trustedApi-${Stage}.*.json
Lambda:
Type: AWS::Lambda::Function
Properties:
Description: get digital subscription expiration dates
FunctionName:
!Sub digital-subscription-expiry-${Stage}
Code:
S3Bucket: subscriptions-dist
S3Key: !Sub subscriptions/${Stage}/digital-subscription-expiry/digital-subscription-expiry.jar
Handler: com.gu.digitalSubscriptionExpiry.Handler::apply
Environment:
Variables:
Stage: !Ref Stage
Role:
Fn::GetAtt:
- "LambdaRole"
- Arn
MemorySize: 1536
Runtime: java21
Timeout: 300
Architectures:
- arm64
DependsOn:
- LambdaRole
ApiGatewayLambdaPermission:
Type: AWS::Lambda::Permission
Properties:
Action: lambda:invokeFunction
FunctionName: !Sub digital-subscription-expiry-${Stage}
Principal: apigateway.amazonaws.com
DependsOn: Lambda
ApiResource:
Type: AWS::ApiGateway::Resource
Properties:
RestApiId: !Ref RestApi
ParentId: !GetAtt [RestApi, RootResourceId]
PathPart: subs
DependsOn: RestApi
ApiMethod:
Type: AWS::ApiGateway::Method
Properties:
AuthorizationType: NONE
RestApiId: !Ref RestApi
ResourceId: !Ref ApiResource
HttpMethod: POST
Integration:
Type: AWS_PROXY
IntegrationHttpMethod: POST
Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${Lambda.Arn}/invocations
DependsOn:
- RestApi
- Lambda
- ApiResource
RestApi:
Type: "AWS::ApiGateway::RestApi"
Properties:
Description: Api to handle digital sub authorisation
Name: !Sub digital-sub-auth-handler-${Stage}
RestApiStage:
Type: AWS::ApiGateway::Stage
Properties:
Description: Stage for digital sub auth API
RestApiId: !Ref RestApi
DeploymentId: !Ref RestApiDeployment
StageName: !Sub ${Stage}
DependsOn: ApiMethod
RestApiDeployment:
Type: AWS::ApiGateway::Deployment
Properties:
Description: Deploys the digital sub Auth API into an environment/stage
RestApiId: !Ref RestApi
DependsOn: ApiMethod
DomainName:
Type: "AWS::ApiGateway::DomainName"
Properties:
RegionalCertificateArn: !Sub arn:aws:acm:${AWS::Region}:${AWS::AccountId}:certificate/bece8c44-d92f-4661-a943-8b0b65e2ad6d
DomainName: !FindInMap [StageVariables, !Ref 'Stage', DomainName]
EndpointConfiguration:
Types:
- REGIONAL
BasePathMapping:
Type: "AWS::ApiGateway::BasePathMapping"
Properties:
RestApiId: !Ref RestApi
DomainName: !Ref DomainName
Stage: !Sub ${Stage}
DependsOn: RestApiStage
DNSRecord:
Type: AWS::Route53::RecordSet
Properties:
HostedZoneName: subscriptions.guardianapis.com.
Name: !Sub digital-subscription-authorisation-${Stage}.subscriptions.guardianapis.com.
Comment: !Sub CNAME for digital subscription auth ${Stage}
Type: CNAME
TTL: '120'
ResourceRecords:
- !FindInMap [StageVariables, !Ref 'Stage', ApiGatewayTargetDomainName]