Мой пример использования:
Я хочу выполнить лямбда-функцию для события PUT существующего сегмента S3.
Проблема в том, что вы в CloudFormation или CDK не можете добавлять уведомлениядля существующего сегмента, только для созданных сегментов.
Чтобы обойти это, я пытаюсь использовать пользовательский ресурс, который добавляет функцию Lambda к PutNotification. У меня это работает нормально в CloudFormation, но я пытаюсь использовать CDK сейчас, чтобы сделать что-то подобное.
Чтобы смоделировать то, что у меня есть в CloudFormation, мне нужно добавить политику сегмента в существующий сегмент, предоставляя разрешение для действия s3: PutBucketNotification для принципала роли выполнения лямбда-выражений.
В CloudFormation я делаю это следующим образом:
NotificationBucketPolicy:
Type: AWS::S3::BucketPolicy
Properties:
Bucket: !Ref BucketName
PolicyDocument:
Statement:
- Effect: "Allow"
Action:
- 's3:PutBucketNotification'
Resource: !Sub "arn:aws:s3:::${BucketName}"
Principal:
AWS: !GetAtt LambdaExecutionRole.Arn
Я пытаюсь создать политику сегмента и добавить к ней оператор в CDK, но яМне нужен Арн лямбда-функции Арн
const bucket = Bucket.fromBucketName(this, "Bucket", "my-bucket-name");
const bucketConfigurationFunction = new lambda.SingletonFunction(this, "bucketConfigurationFunction ", {
runtime: lambda.Runtime.NODEJS_8_10,
code: lambda.Code.asset('lambda/bucket-configuration'),
handler: 'lambda_function.handler',
timeout: cdk.Duration.seconds(300),
uuid: '72561a5f-e772-4365-b3d1-f59e8ddc60b1'
})
const bucketPolicy = new BucketPolicy(this, "TargetBucketPolicy", {
bucket: bucket
})
const bucketPolicyStatement = new PolicyStatement()
bucketPolicyStatement.addActions("s3:PutBucketNotification");
//Need to put the execution role arn here but role is undefined
bucketPolicyStatement.addArnPrincipal(bucketConfigurationFunction.role.roleArn)
Я прочитал, что CDK автоматически создает роль выполнения лямбда-функции, однако, когда я пытаюсь получить доступ к роли Арн, чтобы добавить ее в качестве участника в выражении политики, онне определено.
Я делаю это совершенно неправильно?