@composurecdk/bedrock 0.10.1 → 0.10.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +110 -17
- package/dist/commonjs/alarm-definition.d.ts +29 -0
- package/dist/commonjs/alarm-definition.d.ts.map +1 -0
- package/dist/commonjs/alarm-definition.js +53 -0
- package/dist/commonjs/alarm-definition.js.map +1 -0
- package/dist/commonjs/application-inference-profile-builder.d.ts +44 -0
- package/dist/commonjs/application-inference-profile-builder.d.ts.map +1 -0
- package/dist/commonjs/application-inference-profile-builder.js +51 -0
- package/dist/commonjs/application-inference-profile-builder.js.map +1 -0
- package/dist/commonjs/grants.d.ts +25 -1
- package/dist/commonjs/grants.d.ts.map +1 -1
- package/dist/commonjs/grants.js +57 -6
- package/dist/commonjs/grants.js.map +1 -1
- package/dist/commonjs/guardrail-alarms.d.ts +40 -0
- package/dist/commonjs/guardrail-alarms.d.ts.map +1 -0
- package/dist/commonjs/guardrail-alarms.js +41 -0
- package/dist/commonjs/guardrail-alarms.js.map +1 -0
- package/dist/commonjs/guardrail-builder.d.ts +70 -0
- package/dist/commonjs/guardrail-builder.d.ts.map +1 -0
- package/dist/commonjs/guardrail-builder.js +78 -0
- package/dist/commonjs/guardrail-builder.js.map +1 -0
- package/dist/commonjs/guardrail-defaults.d.ts +25 -0
- package/dist/commonjs/guardrail-defaults.d.ts.map +1 -0
- package/dist/commonjs/guardrail-defaults.js +30 -0
- package/dist/commonjs/guardrail-defaults.js.map +1 -0
- package/dist/commonjs/index.d.ts +8 -2
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js +15 -1
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/inference-profile.d.ts +19 -0
- package/dist/commonjs/inference-profile.d.ts.map +1 -1
- package/dist/commonjs/inference-profile.js.map +1 -1
- package/dist/commonjs/inference-target.d.ts +14 -7
- package/dist/commonjs/inference-target.d.ts.map +1 -1
- package/dist/commonjs/inference-target.js +63 -35
- package/dist/commonjs/inference-target.js.map +1 -1
- package/dist/commonjs/model-alarm-defaults.d.ts.map +1 -1
- package/dist/commonjs/model-alarm-defaults.js +5 -14
- package/dist/commonjs/model-alarm-defaults.js.map +1 -1
- package/dist/commonjs/model-alarms.d.ts +2 -2
- package/dist/commonjs/model-alarms.d.ts.map +1 -1
- package/dist/commonjs/model-alarms.js +35 -58
- package/dist/commonjs/model-alarms.js.map +1 -1
- package/dist/commonjs/model-invocation-logging-alarms.d.ts +42 -0
- package/dist/commonjs/model-invocation-logging-alarms.d.ts.map +1 -0
- package/dist/commonjs/model-invocation-logging-alarms.js +59 -0
- package/dist/commonjs/model-invocation-logging-alarms.js.map +1 -0
- package/dist/commonjs/model-invocation-logging-builder.d.ts +84 -0
- package/dist/commonjs/model-invocation-logging-builder.d.ts.map +1 -0
- package/dist/commonjs/model-invocation-logging-builder.js +135 -0
- package/dist/commonjs/model-invocation-logging-builder.js.map +1 -0
- package/dist/esm/alarm-definition.d.ts +29 -0
- package/dist/esm/alarm-definition.d.ts.map +1 -0
- package/dist/esm/alarm-definition.js +48 -0
- package/dist/esm/alarm-definition.js.map +1 -0
- package/dist/esm/application-inference-profile-builder.d.ts +44 -0
- package/dist/esm/application-inference-profile-builder.d.ts.map +1 -0
- package/dist/esm/application-inference-profile-builder.js +48 -0
- package/dist/esm/application-inference-profile-builder.js.map +1 -0
- package/dist/esm/grants.d.ts +25 -1
- package/dist/esm/grants.d.ts.map +1 -1
- package/dist/esm/grants.js +58 -7
- package/dist/esm/grants.js.map +1 -1
- package/dist/esm/guardrail-alarms.d.ts +40 -0
- package/dist/esm/guardrail-alarms.d.ts.map +1 -0
- package/dist/esm/guardrail-alarms.js +37 -0
- package/dist/esm/guardrail-alarms.js.map +1 -0
- package/dist/esm/guardrail-builder.d.ts +70 -0
- package/dist/esm/guardrail-builder.d.ts.map +1 -0
- package/dist/esm/guardrail-builder.js +75 -0
- package/dist/esm/guardrail-builder.js.map +1 -0
- package/dist/esm/guardrail-defaults.d.ts +25 -0
- package/dist/esm/guardrail-defaults.d.ts.map +1 -0
- package/dist/esm/guardrail-defaults.js +27 -0
- package/dist/esm/guardrail-defaults.js.map +1 -0
- package/dist/esm/index.d.ts +8 -2
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js +7 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/inference-profile.d.ts +19 -0
- package/dist/esm/inference-profile.d.ts.map +1 -1
- package/dist/esm/inference-profile.js.map +1 -1
- package/dist/esm/inference-target.d.ts +14 -7
- package/dist/esm/inference-target.d.ts.map +1 -1
- package/dist/esm/inference-target.js +62 -35
- package/dist/esm/inference-target.js.map +1 -1
- package/dist/esm/model-alarm-defaults.d.ts.map +1 -1
- package/dist/esm/model-alarm-defaults.js +1 -10
- package/dist/esm/model-alarm-defaults.js.map +1 -1
- package/dist/esm/model-alarms.d.ts +2 -2
- package/dist/esm/model-alarms.d.ts.map +1 -1
- package/dist/esm/model-alarms.js +35 -58
- package/dist/esm/model-alarms.js.map +1 -1
- package/dist/esm/model-invocation-logging-alarms.d.ts +42 -0
- package/dist/esm/model-invocation-logging-alarms.d.ts.map +1 -0
- package/dist/esm/model-invocation-logging-alarms.js +55 -0
- package/dist/esm/model-invocation-logging-alarms.js.map +1 -0
- package/dist/esm/model-invocation-logging-builder.d.ts +84 -0
- package/dist/esm/model-invocation-logging-builder.d.ts.map +1 -0
- package/dist/esm/model-invocation-logging-builder.js +131 -0
- package/dist/esm/model-invocation-logging-builder.js.map +1 -0
- package/package.json +5 -11
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inference-profile.d.ts","sourceRoot":"","sources":["../../src/inference-profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE;;;;;;;;;GASG;AACH,eAAO,MAAM,6BAA6B,qDAAsD,CAAC;AAEjG,2EAA2E;AAC3E,MAAM,MAAM,yBAAyB,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC;AAIvF;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,yBAAyB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC9D,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC;IAC1C,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC;IAC1C,gFAAgF;IAChF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,uDAAuD;AACvD,MAAM,MAAM,gBAAgB,GAAG,0BAA0B,GAAG,sBAAsB,CAAC;AAEnF,uDAAuD;AACvD,MAAM,MAAM,iCAAiC,GAAG,IAAI,CAClD,0BAA0B,EAC1B,OAAO,GAAG,WAAW,GAAG,gBAAgB,CACzC,CAAC;AA4CF,iBAAS,UAAU,CAAC,OAAO,EAAE,iCAAiC,GAAG,0BAA0B,CAiB1F;AAED,iBAAS,MAAM,CAAC,KAAK,EAAE,yBAAyB,GAAG,sBAAsB,CAGxE;AAaD,iBAAS,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,CAAC;AAC1D,iBAAS,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,gBAAgB,CAAC;AAkBvF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB;IAC3B,8CAA8C;;IAE9C,4DAA4D;;IAE5D;;;;OAIG;;CAEJ,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,yBAAyB,CAE/E"}
|
|
1
|
+
{"version":3,"file":"inference-profile.d.ts","sourceRoot":"","sources":["../../src/inference-profile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE;;;;;;;;;GASG;AACH,eAAO,MAAM,6BAA6B,qDAAsD,CAAC;AAEjG,2EAA2E;AAC3E,MAAM,MAAM,yBAAyB,GAAG,CAAC,OAAO,6BAA6B,CAAC,CAAC,MAAM,CAAC,CAAC;AAIvF;;;;;GAKG;AACH,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,SAAS,EAAE,yBAAyB,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IAC9D,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC;IAC1C,4EAA4E;IAC5E,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,cAAc,EAAE,SAAS,MAAM,EAAE,CAAC;CAC5C;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,yBAAyB,CAAC;IAC1C,gFAAgF;IAChF,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,uDAAuD;AACvD,MAAM,MAAM,gBAAgB,GAAG,0BAA0B,GAAG,sBAAsB,CAAC;AAEnF;;;;;;GAMG;AACH,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,6DAA6D;IAC7D,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B;;;OAGG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,kCAAkC;IAClC,QAAQ,CAAC,MAAM,EAAE,yBAAyB,GAAG,gBAAgB,CAAC;CAC/D;AAED,uDAAuD;AACvD,MAAM,MAAM,iCAAiC,GAAG,IAAI,CAClD,0BAA0B,EAC1B,OAAO,GAAG,WAAW,GAAG,gBAAgB,CACzC,CAAC;AA4CF,iBAAS,UAAU,CAAC,OAAO,EAAE,iCAAiC,GAAG,0BAA0B,CAiB1F;AAED,iBAAS,MAAM,CAAC,KAAK,EAAE,yBAAyB,GAAG,sBAAsB,CAGxE;AAaD,iBAAS,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,CAAC;AAC1D,iBAAS,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,MAAM,EAAE,GAAG,gBAAgB,CAAC;AAkBvF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB;IAC3B,8CAA8C;;IAE9C,4DAA4D;;IAE5D;;;;OAIG;;CAEJ,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,yBAAyB,CAE/E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inference-profile.js","sourceRoot":"","sources":["../../src/inference-profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEpE;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,QAAQ,CAAU,CAAC;AAKjG,MAAM,aAAa,GAAG,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"inference-profile.js","sourceRoot":"","sources":["../../src/inference-profile.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { FoundationModelIdentifier, IModel } from "aws-cdk-lib/aws-bedrock";
|
|
2
2
|
import { type IConstruct } from "constructs";
|
|
3
|
-
import type { InferenceProfile } from "./inference-profile.js";
|
|
3
|
+
import type { ApplicationInferenceProfile, InferenceProfile } from "./inference-profile.js";
|
|
4
4
|
/**
|
|
5
5
|
* Anything a caller can invoke: an in-Region foundation model, a
|
|
6
|
-
* system-defined inference profile, or any {@link IModel} (a
|
|
7
|
-
* model, or `{ modelArn }` for a model ARN from elsewhere).
|
|
6
|
+
* system-defined or application inference profile, or any {@link IModel} (a
|
|
7
|
+
* provisioned model, or `{ modelArn }` for a model ARN from elsewhere).
|
|
8
8
|
*/
|
|
9
|
-
export type InferenceTarget = FoundationModelIdentifier | InferenceProfile | IModel;
|
|
9
|
+
export type InferenceTarget = FoundationModelIdentifier | InferenceProfile | ApplicationInferenceProfile | IModel;
|
|
10
10
|
/** @internal */
|
|
11
11
|
export declare function isInferenceProfile(target: InferenceTarget): target is InferenceProfile;
|
|
12
12
|
/** One IAM statement's resources and conditions for invoking a target. @internal */
|
|
@@ -15,18 +15,25 @@ export interface InvocationStatement {
|
|
|
15
15
|
readonly conditions?: Record<string, Record<string, unknown>>;
|
|
16
16
|
}
|
|
17
17
|
/**
|
|
18
|
-
* The statements
|
|
19
|
-
* the
|
|
18
|
+
* The statements for invoking `target` from the Region `scope` deploys to:
|
|
19
|
+
* those the Bedrock user guide prescribes, and for an application profile the
|
|
20
|
+
* shape verified against live IAM.
|
|
20
21
|
*
|
|
21
22
|
* @see https://docs.aws.amazon.com/bedrock/latest/userguide/geographic-cross-region-inference.html#geographic-cris-iam-setup
|
|
22
23
|
* @see https://docs.aws.amazon.com/bedrock/latest/userguide/global-cross-region-inference.html#global-cris-iam-setup
|
|
23
24
|
* @internal
|
|
24
25
|
*/
|
|
25
26
|
export declare function invocationStatements(target: InferenceTarget, scope?: IConstruct): InvocationStatement[];
|
|
27
|
+
/**
|
|
28
|
+
* The ARN that identifies `source` in `scope`'s Region: the foundation model
|
|
29
|
+
* or the system-defined profile. @internal
|
|
30
|
+
*/
|
|
31
|
+
export declare function sourceArn(source: FoundationModelIdentifier | InferenceProfile, scope: IConstruct | undefined): string;
|
|
26
32
|
/**
|
|
27
33
|
* Every resource ARN a caller in `scope`'s Region must be allowed to invoke to
|
|
28
34
|
* use `target`. For a cross-Region profile that is the profile plus the
|
|
29
|
-
* foundation model in the source Region and in each Region it routes to
|
|
35
|
+
* foundation model in the source Region and in each Region it routes to; for
|
|
36
|
+
* an application profile, the profile plus its source's foundation models.
|
|
30
37
|
*
|
|
31
38
|
* {@link modelGrants.invoke} applies these with the conditions the Bedrock
|
|
32
39
|
* user guide prescribes; use this list where you write a policy yourself,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inference-target.d.ts","sourceRoot":"","sources":["../../src/inference-target.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"inference-target.d.ts","sourceRoot":"","sources":["../../src/inference-target.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAa,KAAK,UAAU,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAE5F;;;;GAIG;AACH,MAAM,MAAM,eAAe,GACzB,yBAAyB,GAAG,gBAAgB,GAAG,2BAA2B,GAAG,MAAM,CAAC;AAEtF,gBAAgB;AAChB,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,IAAI,gBAAgB,CAEtF;AAUD,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;CAC/D;AA4BD;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,eAAe,EACvB,KAAK,CAAC,EAAE,UAAU,GACjB,mBAAmB,EAAE,CASvB;AA4DD;;;GAGG;AACH,wBAAgB,SAAS,CACvB,MAAM,EAAE,yBAAyB,GAAG,gBAAgB,EACpD,KAAK,EAAE,UAAU,GAAG,SAAS,GAC5B,MAAM,CAKR;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,EAAE,CAEpF;AAED,gBAAgB;AAChB,wBAAgB,OAAO,CAAC,SAAS,EAAE,OAAO,GAAG,UAAU,GAAG,SAAS,CAElE"}
|
|
@@ -2,7 +2,10 @@ import { Arn, ArnFormat, Aws, Stack } from "aws-cdk-lib";
|
|
|
2
2
|
import { Construct } from "constructs";
|
|
3
3
|
/** @internal */
|
|
4
4
|
export function isInferenceProfile(target) {
|
|
5
|
-
return "kind" in target;
|
|
5
|
+
return "kind" in target && (target.kind === "geographic" || target.kind === "global");
|
|
6
|
+
}
|
|
7
|
+
function isApplicationProfile(target) {
|
|
8
|
+
return "kind" in target && target.kind === "application";
|
|
6
9
|
}
|
|
7
10
|
function isModel(target) {
|
|
8
11
|
return "modelArn" in target;
|
|
@@ -24,8 +27,9 @@ function bedrockArn(partition, resource, resourceName, region, account = "") {
|
|
|
24
27
|
});
|
|
25
28
|
}
|
|
26
29
|
/**
|
|
27
|
-
* The statements
|
|
28
|
-
* the
|
|
30
|
+
* The statements for invoking `target` from the Region `scope` deploys to:
|
|
31
|
+
* those the Bedrock user guide prescribes, and for an application profile the
|
|
32
|
+
* shape verified against live IAM.
|
|
29
33
|
*
|
|
30
34
|
* @see https://docs.aws.amazon.com/bedrock/latest/userguide/geographic-cross-region-inference.html#geographic-cris-iam-setup
|
|
31
35
|
* @see https://docs.aws.amazon.com/bedrock/latest/userguide/global-cross-region-inference.html#global-cris-iam-setup
|
|
@@ -34,52 +38,75 @@ function bedrockArn(partition, resource, resourceName, region, account = "") {
|
|
|
34
38
|
export function invocationStatements(target, scope) {
|
|
35
39
|
if (isModel(target))
|
|
36
40
|
return [{ resourceArns: [target.modelArn] }];
|
|
37
|
-
|
|
41
|
+
if (isApplicationProfile(target)) {
|
|
42
|
+
return [
|
|
43
|
+
{ resourceArns: [target.profileArn] },
|
|
44
|
+
...sourceStatements(target.source, scope, target.profileArn),
|
|
45
|
+
];
|
|
46
|
+
}
|
|
47
|
+
return sourceStatements(target, scope);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Statements for a foundation model or system-defined profile. Through an
|
|
51
|
+
* application profile (`viaProfile`), Bedrock checks only that profile's ARN
|
|
52
|
+
* in `bedrock:InferenceProfileArn` and needs no access to the source profile
|
|
53
|
+
* itself (verified live for a global source), so none is granted.
|
|
54
|
+
*/
|
|
55
|
+
function sourceStatements(target, scope, viaProfile) {
|
|
56
|
+
const { partition, region: sourceRegion } = environmentOf(scope);
|
|
38
57
|
const modelArn = (modelId, region) => bedrockArn(partition, "foundation-model", modelId, region);
|
|
58
|
+
const through = (arn) => ({ "bedrock:InferenceProfileArn": arn });
|
|
39
59
|
if (!isInferenceProfile(target)) {
|
|
40
|
-
return [{ resourceArns: [modelArn(target.modelId, sourceRegion)] }];
|
|
41
|
-
}
|
|
42
|
-
const profileArn = bedrockArn(partition, "inference-profile", target.profileId, sourceRegion, account);
|
|
43
|
-
const { modelId } = target.model;
|
|
44
|
-
if (target.kind === "geographic") {
|
|
45
|
-
const regions = [...new Set([sourceRegion, ...target.routingRegions])];
|
|
46
60
|
return [
|
|
47
|
-
{ resourceArns: [profileArn] },
|
|
48
61
|
{
|
|
49
|
-
resourceArns:
|
|
50
|
-
|
|
62
|
+
resourceArns: [modelArn(target.modelId, sourceRegion)],
|
|
63
|
+
...(viaProfile && { conditions: { StringEquals: through(viaProfile) } }),
|
|
51
64
|
},
|
|
52
65
|
];
|
|
53
66
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
67
|
+
const profileArn = sourceArn(target, scope);
|
|
68
|
+
const via = through(viaProfile ?? profileArn);
|
|
69
|
+
const { modelId } = target.model;
|
|
70
|
+
const ownProfile = {
|
|
71
|
+
resourceArns: [profileArn],
|
|
72
|
+
...(target.kind === "global" && {
|
|
57
73
|
conditions: { StringEquals: { "aws:RequestedRegion": sourceRegion } },
|
|
58
|
-
},
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
},
|
|
74
|
+
}),
|
|
75
|
+
};
|
|
76
|
+
const models = target.kind === "geographic"
|
|
77
|
+
? [
|
|
78
|
+
{
|
|
79
|
+
resourceArns: [...new Set([sourceRegion, ...target.routingRegions])].map((region) => modelArn(modelId, region)),
|
|
80
|
+
conditions: { StringEquals: via },
|
|
66
81
|
},
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
StringEquals: {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
82
|
+
]
|
|
83
|
+
: [
|
|
84
|
+
{
|
|
85
|
+
resourceArns: [modelArn(modelId, sourceRegion)],
|
|
86
|
+
conditions: { StringEquals: { "aws:RequestedRegion": sourceRegion, ...via } },
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
resourceArns: [modelArn(modelId, "")],
|
|
90
|
+
conditions: { StringEquals: { "aws:RequestedRegion": "unspecified", ...via } },
|
|
75
91
|
},
|
|
76
|
-
|
|
77
|
-
];
|
|
92
|
+
];
|
|
93
|
+
return viaProfile ? models : [ownProfile, ...models];
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* The ARN that identifies `source` in `scope`'s Region: the foundation model
|
|
97
|
+
* or the system-defined profile. @internal
|
|
98
|
+
*/
|
|
99
|
+
export function sourceArn(source, scope) {
|
|
100
|
+
const { partition, region, account } = environmentOf(scope);
|
|
101
|
+
return isInferenceProfile(source)
|
|
102
|
+
? bedrockArn(partition, "inference-profile", source.profileId, region, account)
|
|
103
|
+
: bedrockArn(partition, "foundation-model", source.modelId, region);
|
|
78
104
|
}
|
|
79
105
|
/**
|
|
80
106
|
* Every resource ARN a caller in `scope`'s Region must be allowed to invoke to
|
|
81
107
|
* use `target`. For a cross-Region profile that is the profile plus the
|
|
82
|
-
* foundation model in the source Region and in each Region it routes to
|
|
108
|
+
* foundation model in the source Region and in each Region it routes to; for
|
|
109
|
+
* an application profile, the profile plus its source's foundation models.
|
|
83
110
|
*
|
|
84
111
|
* {@link modelGrants.invoke} applies these with the conditions the Bedrock
|
|
85
112
|
* user guide prescribes; use this list where you write a policy yourself,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inference-target.js","sourceRoot":"","sources":["../../src/inference-target.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,EAAE,SAAS,EAAmB,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"inference-target.js","sourceRoot":"","sources":["../../src/inference-target.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-alarm-defaults.d.ts","sourceRoot":"","sources":["../../src/model-alarm-defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-alarm-defaults.d.ts","sourceRoot":"","sources":["../../src/model-alarm-defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAGpE,UAAU,kBAAkB;IAC1B,OAAO,EAAE,IAAI,CAAC;IACd,mBAAmB,EAAE,mBAAmB,CAAC;IACzC,sBAAsB,EAAE,mBAAmB,CAAC;IAC5C,sBAAsB,EAAE,mBAAmB,CAAC;IAC5C,2EAA2E;IAC3E,KAAK,EAAE,IAAI,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;IAC9C,sBAAsB,EAAE;QAAE,gBAAgB,EAAE,MAAM,CAAA;KAAE,CAAC;CACtD;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,kBAQlC,CAAC"}
|
|
@@ -1,13 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
/**
|
|
3
|
-
* 3 breaching minutes out of 5: SDK retries absorb isolated throttles and
|
|
4
|
-
* transient errors, so a single datapoint is noise. No traffic emits no data.
|
|
5
|
-
*/
|
|
6
|
-
const SUSTAINED = {
|
|
7
|
-
evaluationPeriods: 5,
|
|
8
|
-
datapointsToAlarm: 3,
|
|
9
|
-
treatMissingData: TreatMissingData.NOT_BREACHING,
|
|
10
|
-
};
|
|
1
|
+
import { SUSTAINED } from "./alarm-definition.js";
|
|
11
2
|
/**
|
|
12
3
|
* Default alarm configuration for a Bedrock model. AWS publishes no Bedrock
|
|
13
4
|
* thresholds; these follow the shape of AWS's recommended Lambda `Errors` and
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-alarm-defaults.js","sourceRoot":"","sources":["../../src/model-alarm-defaults.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"model-alarm-defaults.js","sourceRoot":"","sources":["../../src/model-alarm-defaults.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAYlD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuB;IACtD,OAAO,EAAE,IAAI;IACb,mBAAmB,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE;IACnD,sBAAsB,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE;IACtD,sBAAsB,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,GAAG,SAAS,EAAE;IACtD,KAAK,EAAE,SAAS;IAChB,gEAAgE;IAChE,sBAAsB,EAAE,EAAE,gBAAgB,EAAE,GAAG,EAAE;CAClD,CAAC"}
|
|
@@ -2,10 +2,10 @@ import type { FoundationModelIdentifier } from "aws-cdk-lib/aws-bedrock";
|
|
|
2
2
|
import { Metric, type MetricOptions } from "aws-cdk-lib/aws-cloudwatch";
|
|
3
3
|
import type { IConstruct } from "constructs";
|
|
4
4
|
import type { AlarmDefinition } from "@composurecdk/cloudwatch";
|
|
5
|
-
import type { InferenceProfile } from "./inference-profile.js";
|
|
5
|
+
import type { ApplicationInferenceProfile, InferenceProfile } from "./inference-profile.js";
|
|
6
6
|
import type { ModelAlarmConfig } from "./model-alarm-config.js";
|
|
7
7
|
/** A model whose `AWS/Bedrock` metrics an alarm can read. */
|
|
8
|
-
export type ModelAlarmTarget = FoundationModelIdentifier | InferenceProfile;
|
|
8
|
+
export type ModelAlarmTarget = FoundationModelIdentifier | InferenceProfile | ApplicationInferenceProfile;
|
|
9
9
|
/** `AWS/Bedrock` metrics for one model, for alarms added with `addAlarm()`. */
|
|
10
10
|
export interface ModelMetrics {
|
|
11
11
|
/** The `ModelId` dimension value: the model or inference profile id invoked. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-alarms.d.ts","sourceRoot":"","sources":["../../src/model-alarms.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,
|
|
1
|
+
{"version":3,"file":"model-alarms.d.ts","sourceRoot":"","sources":["../../src/model-alarms.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACzE,OAAO,EAAE,MAAM,EAAE,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAOhE,OAAO,KAAK,EAAE,2BAA2B,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC5F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,6DAA6D;AAC7D,MAAM,MAAM,gBAAgB,GAC1B,yBAAyB,GAAG,gBAAgB,GAAG,2BAA2B,CAAC;AAE7E,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC3B,gFAAgF;IAChF,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,8DAA8D;IAC9D,MAAM,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,aAAa,GAAG,MAAM,CAAC;CAC7D;AAID,sDAAsD;AACtD,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,YAAY,CAanE;AAoFD,0EAA0E;AAC1E,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,YAAY,EACrB,MAAM,EAAE,gBAAgB,GAAG,SAAS,GACnC,eAAe,EAAE,CAUnB"}
|
package/dist/esm/model-alarms.js
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Duration } from "aws-cdk-lib";
|
|
2
|
-
import {
|
|
2
|
+
import { Metric } from "aws-cdk-lib/aws-cloudwatch";
|
|
3
3
|
import { resolveAlarmConfig, resolveAlarmThresholdBasis } from "@composurecdk/cloudwatch";
|
|
4
|
-
import {
|
|
4
|
+
import { resolveThresholdAlarms, toDefinition, } from "./alarm-definition.js";
|
|
5
5
|
import { MODEL_ALARM_DEFAULTS } from "./model-alarm-defaults.js";
|
|
6
6
|
const PERIOD = Duration.minutes(1);
|
|
7
7
|
/** Returns the `AWS/Bedrock` metrics for `target`. */
|
|
8
8
|
export function modelMetrics(target) {
|
|
9
|
-
const modelId =
|
|
9
|
+
const modelId = "profileId" in target ? target.profileId : target.modelId;
|
|
10
10
|
return {
|
|
11
11
|
modelId,
|
|
12
12
|
metric: (metricName, options) => new Metric({
|
|
@@ -18,49 +18,38 @@ export function modelMetrics(target) {
|
|
|
18
18
|
}),
|
|
19
19
|
};
|
|
20
20
|
}
|
|
21
|
-
|
|
22
|
-
invocationThrottles: {
|
|
23
|
-
metricName: "InvocationThrottles",
|
|
24
|
-
statistic: "Sum",
|
|
25
|
-
defaults: MODEL_ALARM_DEFAULTS.invocationThrottles,
|
|
26
|
-
describe: (id, t) => `Bedrock is throttling requests to ${id}; the account's quota for the model is exhausted. ` +
|
|
27
|
-
`Threshold: > ${String(t)} per minute.`,
|
|
28
|
-
},
|
|
29
|
-
invocationServerErrors: {
|
|
30
|
-
metricName: "InvocationServerErrors",
|
|
31
|
-
statistic: "Sum",
|
|
32
|
-
defaults: MODEL_ALARM_DEFAULTS.invocationServerErrors,
|
|
33
|
-
describe: (id, t) => `Bedrock is returning server errors for ${id}. Threshold: > ${String(t)} per minute.`,
|
|
34
|
-
},
|
|
35
|
-
invocationClientErrors: {
|
|
36
|
-
metricName: "InvocationClientErrors",
|
|
37
|
-
statistic: "Sum",
|
|
38
|
-
defaults: MODEL_ALARM_DEFAULTS.invocationClientErrors,
|
|
39
|
-
describe: (id, t) => `Requests to ${id} are failing with client errors, such as AccessDenied or validation ` +
|
|
40
|
-
`errors. Threshold: > ${String(t)} per minute.`,
|
|
41
|
-
},
|
|
42
|
-
invocationLatency: {
|
|
43
|
-
metricName: "InvocationLatency",
|
|
44
|
-
statistic: "p90",
|
|
45
|
-
describe: (id, t) => `p90 invocation latency for ${id} exceeds ${String(t)} ms.`,
|
|
46
|
-
},
|
|
47
|
-
timeToFirstToken: {
|
|
48
|
-
metricName: "TimeToFirstToken",
|
|
49
|
-
statistic: "p90",
|
|
50
|
-
describe: (id, t) => `p90 time to first token for ${id} exceeds ${String(t)} ms.`,
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
function toDefinition(key, metric, cfg, description) {
|
|
21
|
+
function thresholdAlarms(modelId) {
|
|
54
22
|
return {
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
23
|
+
invocationThrottles: {
|
|
24
|
+
metricName: "InvocationThrottles",
|
|
25
|
+
statistic: "Sum",
|
|
26
|
+
defaults: MODEL_ALARM_DEFAULTS.invocationThrottles,
|
|
27
|
+
describe: (t) => `Bedrock is throttling requests to ${modelId}; the account's quota for the model is ` +
|
|
28
|
+
`exhausted. Threshold: > ${String(t)} per minute.`,
|
|
29
|
+
},
|
|
30
|
+
invocationServerErrors: {
|
|
31
|
+
metricName: "InvocationServerErrors",
|
|
32
|
+
statistic: "Sum",
|
|
33
|
+
defaults: MODEL_ALARM_DEFAULTS.invocationServerErrors,
|
|
34
|
+
describe: (t) => `Bedrock is returning server errors for ${modelId}. Threshold: > ${String(t)} per minute.`,
|
|
35
|
+
},
|
|
36
|
+
invocationClientErrors: {
|
|
37
|
+
metricName: "InvocationClientErrors",
|
|
38
|
+
statistic: "Sum",
|
|
39
|
+
defaults: MODEL_ALARM_DEFAULTS.invocationClientErrors,
|
|
40
|
+
describe: (t) => `Requests to ${modelId} are failing with client errors, such as AccessDenied or ` +
|
|
41
|
+
`validation errors. Threshold: > ${String(t)} per minute.`,
|
|
42
|
+
},
|
|
43
|
+
invocationLatency: {
|
|
44
|
+
metricName: "InvocationLatency",
|
|
45
|
+
statistic: "p90",
|
|
46
|
+
describe: (t) => `p90 invocation latency for ${modelId} exceeds ${String(t)} ms.`,
|
|
47
|
+
},
|
|
48
|
+
timeToFirstToken: {
|
|
49
|
+
metricName: "TimeToFirstToken",
|
|
50
|
+
statistic: "p90",
|
|
51
|
+
describe: (t) => `p90 time to first token for ${modelId} exceeds ${String(t)} ms.`,
|
|
52
|
+
},
|
|
64
53
|
};
|
|
65
54
|
}
|
|
66
55
|
function quotaAlarm(scope, metrics, config) {
|
|
@@ -93,19 +82,7 @@ function quotaAlarm(scope, metrics, config) {
|
|
|
93
82
|
export function resolveModelAlarmDefinitions(scope, metrics, config) {
|
|
94
83
|
if (config?.enabled === false)
|
|
95
84
|
return [];
|
|
96
|
-
const definitions =
|
|
97
|
-
const userConfig = config?.[key];
|
|
98
|
-
if (userConfig === false || (userConfig === undefined && !spec.defaults))
|
|
99
|
-
return [];
|
|
100
|
-
if (!spec.defaults && userConfig?.threshold === undefined) {
|
|
101
|
-
throw new Error(`The "${key}" alarm has no default threshold. Supply one, e.g. ` +
|
|
102
|
-
`recommendedAlarms({ ${key}: { threshold: … } }).`);
|
|
103
|
-
}
|
|
104
|
-
const cfg = resolveAlarmConfig(userConfig, spec.defaults ?? { ...MODEL_ALARM_DEFAULTS.optIn, threshold: 0 });
|
|
105
|
-
return [
|
|
106
|
-
toDefinition(key, metrics.metric(spec.metricName, { statistic: spec.statistic }), cfg, spec.describe(metrics.modelId, cfg.threshold)),
|
|
107
|
-
];
|
|
108
|
-
});
|
|
85
|
+
const definitions = resolveThresholdAlarms(thresholdAlarms(metrics.modelId), config, (metricName, statistic) => metrics.metric(metricName, { statistic }));
|
|
109
86
|
return [...definitions, ...quotaAlarm(scope, metrics, config?.estimatedTpmQuotaUsage)];
|
|
110
87
|
}
|
|
111
88
|
//# sourceMappingURL=model-alarms.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-alarms.js","sourceRoot":"","sources":["../../src/model-alarms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"model-alarms.js","sourceRoot":"","sources":["../../src/model-alarms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { AlarmConfig, AlarmConfigDefaults, AlarmDefinition } from "@composurecdk/cloudwatch";
|
|
2
|
+
/**
|
|
3
|
+
* Controls the recommended alarms for model invocation logging. Set an alarm
|
|
4
|
+
* to `false` to disable it, or provide a config to tune it.
|
|
5
|
+
*
|
|
6
|
+
* The delivery metrics are account-wide for the Region, in the `AWS/Bedrock`
|
|
7
|
+
* namespace with no dimensions.
|
|
8
|
+
*
|
|
9
|
+
* @see https://docs.aws.amazon.com/bedrock/latest/userguide/monitoring-runtime-metrics.html
|
|
10
|
+
*/
|
|
11
|
+
export interface ModelInvocationLoggingAlarmConfig {
|
|
12
|
+
/**
|
|
13
|
+
* Master switch: set to `false` to disable all recommended alarms.
|
|
14
|
+
* @default true
|
|
15
|
+
*/
|
|
16
|
+
enabled?: boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Alarm when invocation logs fail to reach the log group.
|
|
19
|
+
*
|
|
20
|
+
* Metric: `ModelInvocationLogsCloudWatchDeliveryFailure`, statistic Sum.
|
|
21
|
+
*/
|
|
22
|
+
cloudWatchDeliveryFailure?: AlarmConfig | false;
|
|
23
|
+
/**
|
|
24
|
+
* Alarm when large or binary bodies fail to reach the large-data bucket.
|
|
25
|
+
* Created only when a large-data bucket is configured.
|
|
26
|
+
*
|
|
27
|
+
* Metric: `ModelInvocationLargeDataS3DeliveryFailure`, statistic Sum.
|
|
28
|
+
*/
|
|
29
|
+
largeDataS3DeliveryFailure?: AlarmConfig | false;
|
|
30
|
+
}
|
|
31
|
+
type DeliveryAlarmKey = Exclude<keyof ModelInvocationLoggingAlarmConfig, "enabled">;
|
|
32
|
+
/**
|
|
33
|
+
* Default alarm configuration for model invocation logging. AWS publishes no
|
|
34
|
+
* Bedrock thresholds.
|
|
35
|
+
*
|
|
36
|
+
* @see https://docs.aws.amazon.com/wellarchitected/latest/generative-ai-lens/gensec01-bp04.html
|
|
37
|
+
*/
|
|
38
|
+
export declare const MODEL_INVOCATION_LOGGING_ALARM_DEFAULTS: Record<DeliveryAlarmKey, AlarmConfigDefaults>;
|
|
39
|
+
/** Resolves the recommended delivery-failure alarms. */
|
|
40
|
+
export declare function resolveModelInvocationLoggingAlarmDefinitions(config: ModelInvocationLoggingAlarmConfig | false | undefined, hasLargeDataBucket: boolean): AlarmDefinition[];
|
|
41
|
+
export {};
|
|
42
|
+
//# sourceMappingURL=model-invocation-logging-alarms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-invocation-logging-alarms.d.ts","sourceRoot":"","sources":["../../src/model-invocation-logging-alarms.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAIlG;;;;;;;;GAQG;AACH,MAAM,WAAW,iCAAiC;IAChD;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAElB;;;;OAIG;IACH,yBAAyB,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;IAEhD;;;;;OAKG;IACH,0BAA0B,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC;CAClD;AAED,KAAK,gBAAgB,GAAG,OAAO,CAAC,MAAM,iCAAiC,EAAE,SAAS,CAAC,CAAC;AAUpF;;;;;GAKG;AACH,eAAO,MAAM,uCAAuC,EAAE,MAAM,CAC1D,gBAAgB,EAChB,mBAAmB,CAIpB,CAAC;AAkBF,wDAAwD;AACxD,wBAAgB,6CAA6C,CAC3D,MAAM,EAAE,iCAAiC,GAAG,KAAK,GAAG,SAAS,EAC7D,kBAAkB,EAAE,OAAO,GAC1B,eAAe,EAAE,CA4BnB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Duration } from "aws-cdk-lib";
|
|
2
|
+
import { Metric, TreatMissingData } from "aws-cdk-lib/aws-cloudwatch";
|
|
3
|
+
import { resolveAlarmConfig } from "@composurecdk/cloudwatch";
|
|
4
|
+
import { toDefinition } from "./alarm-definition.js";
|
|
5
|
+
/** A failed delivery is an invocation missing from the audit record. */
|
|
6
|
+
const ANY_FAILURE = {
|
|
7
|
+
threshold: 0,
|
|
8
|
+
evaluationPeriods: 1,
|
|
9
|
+
datapointsToAlarm: 1,
|
|
10
|
+
treatMissingData: TreatMissingData.NOT_BREACHING,
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Default alarm configuration for model invocation logging. AWS publishes no
|
|
14
|
+
* Bedrock thresholds.
|
|
15
|
+
*
|
|
16
|
+
* @see https://docs.aws.amazon.com/wellarchitected/latest/generative-ai-lens/gensec01-bp04.html
|
|
17
|
+
*/
|
|
18
|
+
export const MODEL_INVOCATION_LOGGING_ALARM_DEFAULTS = {
|
|
19
|
+
cloudWatchDeliveryFailure: ANY_FAILURE,
|
|
20
|
+
largeDataS3DeliveryFailure: ANY_FAILURE,
|
|
21
|
+
};
|
|
22
|
+
const DELIVERY_ALARMS = {
|
|
23
|
+
cloudWatchDeliveryFailure: {
|
|
24
|
+
metricName: "ModelInvocationLogsCloudWatchDeliveryFailure",
|
|
25
|
+
destination: "the log group",
|
|
26
|
+
requiresBucket: false,
|
|
27
|
+
},
|
|
28
|
+
largeDataS3DeliveryFailure: {
|
|
29
|
+
metricName: "ModelInvocationLargeDataS3DeliveryFailure",
|
|
30
|
+
destination: "the large-data bucket",
|
|
31
|
+
requiresBucket: true,
|
|
32
|
+
},
|
|
33
|
+
};
|
|
34
|
+
/** Resolves the recommended delivery-failure alarms. */
|
|
35
|
+
export function resolveModelInvocationLoggingAlarmDefinitions(config, hasLargeDataBucket) {
|
|
36
|
+
if (config === false || config?.enabled === false)
|
|
37
|
+
return [];
|
|
38
|
+
return Object.entries(DELIVERY_ALARMS).flatMap(([key, spec]) => {
|
|
39
|
+
const userConfig = config?.[key];
|
|
40
|
+
if (userConfig === false || (spec.requiresBucket && !hasLargeDataBucket))
|
|
41
|
+
return [];
|
|
42
|
+
const cfg = resolveAlarmConfig(userConfig, MODEL_INVOCATION_LOGGING_ALARM_DEFAULTS[key]);
|
|
43
|
+
const metric = new Metric({
|
|
44
|
+
namespace: "AWS/Bedrock",
|
|
45
|
+
metricName: spec.metricName,
|
|
46
|
+
statistic: "Sum",
|
|
47
|
+
period: Duration.minutes(1),
|
|
48
|
+
});
|
|
49
|
+
return [
|
|
50
|
+
toDefinition(key, metric, cfg, `Bedrock model invocation logs are failing to reach ${spec.destination}; ` +
|
|
51
|
+
`invocations are missing from the audit record. Threshold: > ${String(cfg.threshold)} per minute.`),
|
|
52
|
+
];
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=model-invocation-logging-alarms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-invocation-logging-alarms.js","sourceRoot":"","sources":["../../src/model-invocation-logging-alarms.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAoCrD,wEAAwE;AACxE,MAAM,WAAW,GAAwB;IACvC,SAAS,EAAE,CAAC;IACZ,iBAAiB,EAAE,CAAC;IACpB,iBAAiB,EAAE,CAAC;IACpB,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;CACjD,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uCAAuC,GAGhD;IACF,yBAAyB,EAAE,WAAW;IACtC,0BAA0B,EAAE,WAAW;CACxC,CAAC;AAEF,MAAM,eAAe,GAGjB;IACF,yBAAyB,EAAE;QACzB,UAAU,EAAE,8CAA8C;QAC1D,WAAW,EAAE,eAAe;QAC5B,cAAc,EAAE,KAAK;KACtB;IACD,0BAA0B,EAAE;QAC1B,UAAU,EAAE,2CAA2C;QACvD,WAAW,EAAE,uBAAuB;QACpC,cAAc,EAAE,IAAI;KACrB;CACF,CAAC;AAEF,wDAAwD;AACxD,MAAM,UAAU,6CAA6C,CAC3D,MAA6D,EAC7D,kBAA2B;IAE3B,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,EAAE,OAAO,KAAK,KAAK;QAAE,OAAO,EAAE,CAAC;IAE7D,OACE,MAAM,CAAC,OAAO,CAAC,eAAe,CAI/B,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,EAAE,EAAE;QACxB,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,UAAU,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,kBAAkB,CAAC;YAAE,OAAO,EAAE,CAAC;QACpF,MAAM,GAAG,GAAG,kBAAkB,CAAC,UAAU,EAAE,uCAAuC,CAAC,GAAG,CAAC,CAAC,CAAC;QACzF,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;YACxB,SAAS,EAAE,aAAa;YACxB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,SAAS,EAAE,KAAK;YAChB,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;SAC5B,CAAC,CAAC;QACH,OAAO;YACL,YAAY,CACV,GAAG,EACH,MAAM,EACN,GAAG,EACH,sDAAsD,IAAI,CAAC,WAAW,IAAI;gBACxE,+DAA+D,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,cAAc,CACrG;SACF,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import type { Alarm } from "aws-cdk-lib/aws-cloudwatch";
|
|
2
|
+
import { type IRole } from "aws-cdk-lib/aws-iam";
|
|
3
|
+
import type { ILogGroup } from "aws-cdk-lib/aws-logs";
|
|
4
|
+
import type { IBucket } from "aws-cdk-lib/aws-s3";
|
|
5
|
+
import { type AwsCustomResource } from "aws-cdk-lib/custom-resources";
|
|
6
|
+
import type { IConstruct } from "constructs";
|
|
7
|
+
import { type Lifecycle, type Resolvable } from "@composurecdk/core";
|
|
8
|
+
import { type ITaggedBuilder } from "@composurecdk/cloudformation";
|
|
9
|
+
import { type ILogGroupBuilder } from "@composurecdk/logs";
|
|
10
|
+
import { type ModelInvocationLoggingAlarmConfig } from "./model-invocation-logging-alarms.js";
|
|
11
|
+
/** Which request and response modalities are logged. */
|
|
12
|
+
export interface ModelInvocationLoggingModalities {
|
|
13
|
+
textDataDeliveryEnabled?: boolean;
|
|
14
|
+
imageDataDeliveryEnabled?: boolean;
|
|
15
|
+
embeddingDataDeliveryEnabled?: boolean;
|
|
16
|
+
videoDataDeliveryEnabled?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/** Configuration properties for {@link createModelInvocationLoggingBuilder}. */
|
|
19
|
+
export interface ModelInvocationLoggingBuilderProps extends ModelInvocationLoggingModalities {
|
|
20
|
+
/** The log group the builder creates, from `@composurecdk/logs`' defaults. */
|
|
21
|
+
logGroup?: {
|
|
22
|
+
/** Customises the log group sub-builder. */
|
|
23
|
+
configure?: (builder: ILogGroupBuilder) => ILogGroupBuilder;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* Receives bodies over 100 KB and binary data, such as images, which
|
|
27
|
+
* CloudWatch Logs cannot hold; without it, those bodies are not logged. The
|
|
28
|
+
* builder adds the bucket and key policy statements Bedrock needs to write.
|
|
29
|
+
*/
|
|
30
|
+
largeDataBucket?: Resolvable<IBucket>;
|
|
31
|
+
/** Key prefix within {@link largeDataBucket}. */
|
|
32
|
+
largeDataKeyPrefix?: string;
|
|
33
|
+
/**
|
|
34
|
+
* Configuration for the recommended delivery-failure alarms. Set to
|
|
35
|
+
* `false` to disable them.
|
|
36
|
+
*/
|
|
37
|
+
recommendedAlarms?: ModelInvocationLoggingAlarmConfig | false;
|
|
38
|
+
}
|
|
39
|
+
/** The build output of an {@link IModelInvocationLoggingBuilder}. */
|
|
40
|
+
export interface ModelInvocationLoggingBuilderResult {
|
|
41
|
+
/** The log group invocation logs are delivered to. */
|
|
42
|
+
logGroup: ILogGroup;
|
|
43
|
+
/** The role Bedrock assumes to write to {@link logGroup}. */
|
|
44
|
+
role: IRole;
|
|
45
|
+
/** The custom resource that applies the account's logging configuration. */
|
|
46
|
+
configuration: AwsCustomResource;
|
|
47
|
+
/** The CloudWatch alarms created, keyed by alarm key. */
|
|
48
|
+
alarms: Record<string, Alarm>;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* A fluent builder for Amazon Bedrock model invocation logging.
|
|
52
|
+
*
|
|
53
|
+
* @see {@link createModelInvocationLoggingBuilder}
|
|
54
|
+
*/
|
|
55
|
+
export type IModelInvocationLoggingBuilder = ITaggedBuilder<ModelInvocationLoggingBuilderProps, ModelInvocationLoggingBuilder>;
|
|
56
|
+
/**
|
|
57
|
+
* Every modality is logged, so the record covers every invocation.
|
|
58
|
+
*
|
|
59
|
+
* @see https://docs.aws.amazon.com/wellarchitected/latest/generative-ai-lens/gensec01-bp04.html
|
|
60
|
+
*/
|
|
61
|
+
export declare const MODEL_INVOCATION_LOGGING_DEFAULTS: Required<ModelInvocationLoggingModalities>;
|
|
62
|
+
declare class ModelInvocationLoggingBuilder implements Lifecycle<ModelInvocationLoggingBuilderResult> {
|
|
63
|
+
props: Partial<ModelInvocationLoggingBuilderProps>;
|
|
64
|
+
build(scope: IConstruct, id: string, context?: Record<string, object>): ModelInvocationLoggingBuilderResult;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Creates a builder that turns on Amazon Bedrock model invocation logging for
|
|
68
|
+
* the account in the stack's Region, delivering to a log group it creates.
|
|
69
|
+
*
|
|
70
|
+
* Account-wide per Region: build it once. A second one overwrites the first,
|
|
71
|
+
* and deleting either stack turns logging off.
|
|
72
|
+
*
|
|
73
|
+
* @example
|
|
74
|
+
* ```ts
|
|
75
|
+
* createModelInvocationLoggingBuilder()
|
|
76
|
+
* .largeDataBucket(ref("audit", (r: BucketBuilderResult) => r.bucket));
|
|
77
|
+
* ```
|
|
78
|
+
*
|
|
79
|
+
* @see https://docs.aws.amazon.com/bedrock/latest/userguide/model-invocation-logging.html
|
|
80
|
+
* @see https://docs.aws.amazon.com/wellarchitected/latest/generative-ai-lens/gensec01-bp04.html
|
|
81
|
+
*/
|
|
82
|
+
export declare function createModelInvocationLoggingBuilder(): IModelInvocationLoggingBuilder;
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=model-invocation-logging-builder.d.ts.map
|