Skip to content

Instantly share code, notes, and snippets.

@bnusunny
Last active July 31, 2019 09:58
Show Gist options
  • Save bnusunny/090e65be682b4703b72b41e4f648c51c to your computer and use it in GitHub Desktop.
Save bnusunny/090e65be682b4703b72b41e4f648c51c to your computer and use it in GitHub Desktop.
How to use region-info to over ride lambda IAM service principal for AWS China regions
import events = require('@aws-cdk/aws-events');
import targets = require('@aws-cdk/aws-events-targets');
import lambda = require('@aws-cdk/aws-lambda');
import regionInfo = require('@aws-cdk/region-info');
import cdk = require('@aws-cdk/core');
import { StackProps } from '@aws-cdk/core';
import fs = require('fs');
export class LambdaCronStack extends cdk.Stack {
constructor(app: cdk.App, id: string, props?: StackProps) {
super(app, id, props);
const lambdaFn = new lambda.Function(this, 'Singleton', {
code: new lambda.InlineCode(fs.readFileSync('lambda-handler.py', { encoding: 'utf-8' })),
handler: 'index.main',
timeout: cdk.Duration.seconds(300),
runtime: lambda.Runtime.PYTHON_2_7,
});
// Run every day at 6PM UTC
// See https://docs.aws.amazon.com/lambda/latest/dg/tutorial-scheduled-events-schedule-expressions.html
const rule = new events.Rule(this, 'Rule', {
schedule: events.Schedule.expression('cron(0 18 ? * MON-FRI *)')
});
rule.addTarget(new targets.LambdaFunction(lambdaFn));
}
}
// override lambda service principal for aws china beijing region
regionInfo.Fact.register({
region: 'cn-north-1',
name: regionInfo.FactName.servicePrincipal('lambda'),
value: 'lambda.amazonaws.com',
}, true /* Allow overriding information */);
const app = new cdk.App();
// must specify the region for the stack, otherwise the override will not work.
new LambdaCronStack(app, 'LambdaCronExample', { env: { region: 'cn-north-1' } });
app.synth();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment