cfn.yaml (163 lines of code) (raw):
AWSTemplateFormatVersion: '2010-09-09'
Description: Lambda API for signing i.guim.co.uk image urls
Parameters:
Stack:
Description: Stack name
Type: String
Default: targeting
App:
Description: Application name
Type: String
Default: image-url-signing-service
Stage:
Description: Stage name
Type: String
AllowedValues:
- CODE
- PROD
Default: CODE
DeployBucket:
Description: Bucket where RiffRaff uploads artifacts on deploy
Type: String
Default: targeting-dist
TLSCert:
Type: String
Description: ARN of TLS certificate in US-EAST-1
Default: 'arn:aws:acm:us-east-1:477621165360:certificate/781a1702-ca2e-4142-8acf-7ce23f52d106'
Mappings:
DomainNames:
CODE:
Name: image-url-signing-service.code.dev-gutools.co.uk
PROD:
Name: image-url-signing-service.gutools.co.uk
Resources:
ExecutionRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action: 'sts:AssumeRole'
Path: /
Policies:
- PolicyName: logs
PolicyDocument:
Statement:
Effect: Allow
Action:
- 'logs:CreateLogGroup'
- 'logs:CreateLogStream'
- 'logs:PutLogEvents'
Resource: 'arn:aws:logs:*:*:*'
- PolicyName: lambda
PolicyDocument:
Statement:
Effect: Allow
Action:
- 'lambda:InvokeFunction'
Resource: '*'
ImageSigningApiLambda:
Type: AWS::Lambda::Function
Properties:
FunctionName: !Sub image-url-signing-service-${Stage}
Code:
S3Bucket:
Ref: DeployBucket
S3Key: !Sub '${Stack}/${Stage}/image-url-signing-service/image-url-signing-service.zip'
Description: Sign i.guim.co.uk image urls
Handler: index.handler
MemorySize: 128
Role:
'Fn::GetAtt': ['ExecutionRole', 'Arn']
Runtime: nodejs18.x
Timeout: 60
ImageSigningLambdaApiPermission:
Type: AWS::Lambda::Permission
Properties:
Action: lambda:invokeFunction
FunctionName: !Sub image-url-signing-service-${Stage}
Principal: apigateway.amazonaws.com
DependsOn: ImageSigningApiLambda
ImageSigningApi:
Type: 'AWS::ApiGateway::RestApi'
Properties:
Description: API for signing i.guim.co.uk image urls
Name: !Sub image-url-signing-service-${Stage}
ImageSigningApiUsagePlan:
Type: AWS::ApiGateway::UsagePlan
Properties:
UsagePlanName: image-url-signing-service
ApiStages:
- ApiId: !Ref ImageSigningApi
Stage: !Ref Stage
DependsOn:
- ImageSigningApi
- ImageSigningApiStage
ImageSigningApiProxyResource:
Type: AWS::ApiGateway::Resource
Properties:
RestApiId: !Ref ImageSigningApi
ParentId: !GetAtt [ImageSigningApi, RootResourceId]
PathPart: '{proxy+}'
DependsOn: ImageSigningApi
ImageSigningApiRootAnyMethod:
Type: AWS::ApiGateway::Method
Properties:
AuthorizationType: NONE
ApiKeyRequired: false
RestApiId: !Ref ImageSigningApi
ResourceId: !GetAtt [ImageSigningApi, RootResourceId]
HttpMethod: ANY
Integration:
Type: AWS_PROXY
IntegrationHttpMethod: POST # this for the interaction between API Gateway and Lambda and MUST be POST
Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${ImageSigningApiLambda.Arn}/invocations
DependsOn:
- ImageSigningApi
- ImageSigningApiLambda
ImageSigningApiAnyMethod:
Type: AWS::ApiGateway::Method
Properties:
AuthorizationType: NONE
ApiKeyRequired: false
RestApiId: !Ref ImageSigningApi
ResourceId: !Ref ImageSigningApiProxyResource
HttpMethod: ANY
Integration:
Type: AWS_PROXY
IntegrationHttpMethod: POST # this for the interaction between API Gateway and Lambda and MUST be POST
Uri: !Sub arn:aws:apigateway:${AWS::Region}:lambda:path/2015-03-31/functions/${ImageSigningApiLambda.Arn}/invocations
DependsOn:
- ImageSigningApi
- ImageSigningApiLambda
- ImageSigningApiProxyResource
ImageSigningApiStage:
Type: AWS::ApiGateway::Stage
Properties:
Description: Stage for image-url-signing-service
RestApiId: !Ref ImageSigningApi
DeploymentId: !Ref ImageSigningApiDeployment
StageName: !Sub ${Stage}
DependsOn:
- ImageSigningApiAnyMethod
ImageSigningApiDeployment:
Type: AWS::ApiGateway::Deployment
Properties:
Description: Deploys image-url-signing-service into an environment/stage
RestApiId: !Ref ImageSigningApi
DependsOn:
- ImageSigningApiAnyMethod
ImageSigningApiCustomDomain:
Type: AWS::ApiGateway::DomainName
Properties:
DomainName: !FindInMap ['DomainNames', !Ref Stage, 'Name']
CertificateArn: !Ref TLSCert
ImageSigningApiMapping:
Type: AWS::ApiGateway::BasePathMapping
Properties:
RestApiId: !Ref ImageSigningApi
DomainName: !FindInMap ['DomainNames', !Ref Stage, 'Name']
Stage: !Ref Stage