在使用子进程创建IAM角色时,必须确保在CDK中正确引用该角色。例如,可以在CDK应用程序中使用以下代码引用已创建的IAM角色:
import * as aws from 'aws-sdk';
import * as cdk from 'aws-cdk-lib';
const STACK_NAME = 'MyStack';
const app = new cdk.App();
const iam = new aws.IAM();
const stack = new cdk.Stack(app, STACK_NAME, {
env: {
account: process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEFAULT_REGION
}
});
const roleName = 'MyRole';
const role = new aws.IAM.Role(stack, roleName, {
assumedBy: new aws.IAM.ServicePrincipal('lambda.amazonaws.com')
});
const policy = new aws.IAM.Policy(stack, `${roleName}Policy`, {
policyName: `${roleName}Policy`,
statements: [
new aws.IAM.PolicyStatement({
effect: aws.IAM.Effect.ALLOW,
actions: ['logs:CreateLogGroup', 'logs:CreateLogStream', 'logs:PutLogEvents'],
resources: ['arn:aws:logs:*:*:*']
})
]
});
role.attachInlinePolicy(policy);
app.synth();
在上面的代码示例中,我们使用了AWS SDK创建一个IAM角色并将其附加到CDK Stack中。要引用该角色,请使用CDK的角色名称。例如,如果我们要在Lambda函数中使用该角色,则可以使用以下代码:
import * as cdk from 'aws-cdk-lib';
import * as lambda from 'aws-cdk-lib/aws-lambda';
const STACK_NAME = 'MyStack';
const app = new cdk.App();
const stack = new cdk.Stack(app, STACK_NAME, {
env: {
account: process.env.CDK_DEFAULT_ACCOUNT,
region: process.env.CDK_DEFAULT_REGION
}
});
const roleName = 'MyRole';
const lambdaFunction = new lambda.Function(stack, 'MyFunction', {
functionName: 'MyFunction',
runtime: lambda.Runtime.NODEJS_12_X,
code: lambda