-
Notifications
You must be signed in to change notification settings - Fork 4.1k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat(stepfunctions-tasks): bedrock createModelCustomizationJob integration #31913
base: main
Are you sure you want to change the base?
feat(stepfunctions-tasks): bedrock createModelCustomizationJob integration #31913
Conversation
…e-model-customization-job.ts Co-authored-by: Luca Pizzini <lpizzini7@gmail.com>
…e-model-customization-job.ts Co-authored-by: Luca Pizzini <lpizzini7@gmail.com>
…e-model-customization-job.ts Co-authored-by: Luca Pizzini <lpizzini7@gmail.com>
@gracelu0 Thank you for your kindness check. I've addressed all of your comments. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for working on this! I left some comments to improve the interface design for extensibility, and we will need to check the policy updates with security reviewer (so there may be some additional comments to address).
bedrock.FoundationModelIdentifier.AMAZON_TITAN_TEXT_G1_EXPRESS_V1, | ||
); | ||
|
||
const task = new tasks.BedrockCreateModelCustomizationJob(this, 'CreateModelCustomizationJob2', { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
instead of all the // optional
comments can we have a // required
comment to point out the required properties?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed.
* | ||
* @see https://docs.aws.amazon.com/bedrock/latest/userguide/encryption-custom-job.html | ||
* | ||
* @default - no encryption |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
from the linked docs, By default, Amazon Bedrock encrypts custom models with AWS owned keys.
- can we specify that as the default here?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fixed!
* | ||
* @default - no prefix | ||
*/ | ||
readonly prefix?: string; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
what is this prefix
field for? since I see for the s3Uri
property the pattern is ^s3://[a-z0-9][-.a-z0-9]{1,61}(?:/[-!_*'().a-z0-9A-Z]+(?:/[-!_*'().a-z0-9A-Z]+)*)?/?$
so the prefix is expected to be s3://
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I apologize for the confusing naming. This prefix
represents the absolute path from the root within the bucket, and is passed to the s3UrlForObject()
method as follows.
OutputDataConfig: {
S3Uri: this.props.outputData.bucket.s3UrlForObject(this.props.outputData.path),
},
I've changed it from "prefix" to "path" and added some explanations. How does this look?
*/ | ||
readonly role?: iam.IRole; | ||
|
||
/** |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
While I like the simplified BucketConfiguration
interface here, I see that TrainingDataConfig
already differs from ValidationDataConfig
and OutputDataConfig
with additional prop invocationLogsConfig
.
To avoid making breaking changes in the future in case new sub-properties are added, can we make a base interface BucketConfiguration
(maybe called DataBucketConfiguration
) and create interfaces extending it for each of outputData
, trainingData
and validationData
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thank you for your nice suggestion. I defined each interfaces like that.
* | ||
* @see https://docs.aws.amazon.com/bedrock/latest/APIReference/API_Validator.html | ||
*/ | ||
readonly validationData: BucketConfiguration[]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks like validationDataConfig
is not required, so we need to update this and also the validation to allow minimum of 0 validators
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
fixed.
S3Uri: this.props.outputData.bucket.s3UrlForObject(this.props.outputData.prefix), | ||
}, | ||
RoleArn: this._role.roleArn, | ||
TrainingDataConfig: { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think it's okay if we don't include it in this PR, but we should ensure the contract allows us to add this in the future (see my other comment about extending the interface)
return this.props.role; | ||
} | ||
const role = new iam.Role(this, 'BedrockRole', { | ||
assumedBy: new iam.ServicePrincipal('bedrock.amazonaws.com'), |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
From https://docs.aws.amazon.com/bedrock/latest/userguide/model-customization-iam-role.html#model-customization-iam-role-trust it mentions the option to restrict the scope using Condition
:
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "bedrock.amazonaws.com"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"aws:SourceAccount": "account-id"
},
"ArnEquals": {
"aws:SourceArn": "arn:aws:bedrock:us-east-1:account-id:model-customization-job/*"
}
}
}
]
}
Can we add this to adhere to PoLP and reduce the permissions scope?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I've added Condition
section!
const role = new iam.Role(this, 'BedrockRole', {
assumedBy: new iam.ServicePrincipal('bedrock.amazonaws.com', {
conditions: {
StringEquals: {
'aws:SourceAccount': account,
},
ArnEquals: {
'aws:SourceArn': Stack.of(this).formatArn({
service: 'bedrock',
resource: 'model-customization-job',
resourceName: '*',
}),
},
},
}),
Pull request has been modified.
|
||
private validatePattern(name: string, pattern: RegExp, value?: string): void { | ||
if (value !== undefined && !Token.isUnresolved(value) && !pattern.test(value)) { | ||
throw new ValidationError(`${name} must match the pattern ${pattern.toString()}, got: ${value}.`, this); |
Check failure
Code scanning / CodeQL
Polynomial regular expression used on uncontrolled data High
regular expression
library input
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
(This review is outdated)
✅ Updated pull request passes all PRLinter validations. Dismissing previous PRLinter review.
|
||
/** | ||
* The S3 bucket configuration where the validation data is stored. | ||
* If you don't provide a validation dataset, specify the evaluation percentage by the `Evaluation percentage` hyperparameter. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@gracelu0 I'm really sorry for my late response. I've addressed all of your comments. Could you please reconfirm again? |
AWS CodeBuild CI Report
Powered by github-codebuild-logs, available on the AWS Serverless Application Repository |
This PR was previously created and passed the community review, but the maintainer review stopped midway, and it was eventually closed. There shouldn’t be any issues with the content, so I am submitting the PR again.
Issue # (if applicable)
Closes #29042
Reason for this change
AWS stepfunctions support optimized integration with AWS bedrock.
Currently, only invokeModel is supported by CDK, but I would like createModelCustomizationJob to be supported in the same manner.
Description of changes
I've added CreatemodelCustomizationJob class.
Description of how you validated changes
I've added both unit and integ tests.
Checklist
By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license