可以使用 aws cdk 中的 aws-cdk-lib 包中的 aws_cdk.aws_s3_assets 和 aws_cdk.aws_s3 包来实现将状态保存到 S3 存储桶中,从而提供远程状态。
以下是一个示例:
from aws_cdk import core
from aws_cdk import aws_s3 as s3
from aws_cdk import aws_cognito as cognito
from aws_cdk import aws_cdk_lib as cdk
app = core.App()
remote_state_bucket = s3.Bucket(
app, 'MyBucket',
versioned=True,
)
# 创建状态存储桶
core.CfnOutput(
app, 'MyBucketName',
value=remote_state_bucket.bucket_name,
)
# 创建 Cognito 身份池
identity_pool = cognito.CfnIdentityPool(
app, 'MyIdentityPool',
allow_unauthenticated_identities=False,
)
# 访问策略
policy_document = policy_document={
'Version': '2012-10-17',
'Statement': [
{
'Effect': 'Allow',
'Principal': {
'Federated': 'cognito-identity.amazonaws.com',
},
'Action': 'sts:AssumeRoleWithWebIdentity',
'Condition': {
'StringEquals': {
'cognito-identity.amazonaws.com:aud': identity_pool.ref,
},
'ForAnyValue:StringLike': {
'cognito-identity.amazonaws.com:amr': 'authenticated',
},
},
},
],
}
role = cognito.CfnIdentityPoolRoleAttachment(
app, 'MyIdentityPoolRoleAttachment',
identity_pool_id=identity_pool.ref,
roles={
'authenticated': cdk.Arn.format_arn(
resource="MyRole",
service="iam",
region="",
account="",
),
},
)
# 输出角色
core.CfnOutput(
app, 'MyRoleArn',
value=role.attr_arn,
)
app.synth()