LocalStack与cdk没有部署目录到s3桶



我使用LocalStack和CDK在我的机器上进行本地测试。我正在使用cli工具cdklocal(由localstack提供)将我的cdk堆栈转换为localstack。

我试图创建一个s3桶作为一个静态网站和部署内容到它。下面是我的cdk堆栈:

const bucket = new s3.Bucket(this, 'bucket', {
websiteIndexDocument: 'index.html',
publicReadAccess: true,
removalPolicy: RemovalPolicy.DESTROY,
});
new s3deploy.BucketDeployment(this, 'website', {
sources: [s3deploy.Source.asset('./app/build')],
destinationBucket: bucket
});

它应该创建一个bucket,然后将./app/build的内容部署到该bucket。当我使用cdk deploy部署到我的AWS帐户时,这工作得很好。但是,当我使用cdklocal deploy部署到localstack时,创建了桶,但./app/build的内容不在桶中。

如何使用localstack托管使用cdk的静态网站?

我也有这个问题。深入研究s3deploy的方式。BucketDeployment工作,似乎AWS中的CloudFormation必须用某种事件触发部署lambda,而在localstack中这一步不会发生。

查看部署lambda周围的日志,事件看起来有这样的形状:

{
"RequestType": "Create",
"ServiceToken": "arn:aws:lambda:eu-west-1: 000000000000:function:localEnvironmentStack-CustomCDKBucketDeploymen-123abc456",
"StackId": "arn:aws:cloudformation:eu-west-1: 000000000000:stack/localEnvironmentStack/123456-abcdef-123456",
"RequestId": "123456-abcdef-123456",
"LogicalResourceId": "localClientDeploymentCustomResourceABCD1234",
"ResourceType": "Custom: :CDKBucketDeployment",
"ResourceProperties": {
"ServiceToken": "arn:aws:lambda:eu-west-1: 000000000000:function:localEnvironmentStack-CustomCDKBucketDeploymen-6789defgh",
"Prune": "true",
"SystemMetadata": {
"acl": "public-read"
},
"SourceBucketNames": [
"cdk-abcdefgh-assets-000000000000-eu-west-1"
],
"DestinationBucketName": "my-local-bucket",
"DestinationBucketKeyPrefix": "local/",
"SourceObjectKeys": [
"123456789abcdefghijklmnopqrstuvwxyz.zip"
]
},
"ResponseURL": "http://somecloudfrontURL.com"
}

我发现,通过使用awslocal.

下载部署的模板,
awslocal cloudformation get-template --stack-name localEnvironmentStack --region eu-west-1

然后将我的一些堆栈属性映射到事件字段中,然后将其发送到本地堆栈,将我的工件部署到s3。您可以像这样在本地stacklambda中运行事件:

awslocal lambda invoke 
--function-name localEnvironmentStack-CustomCDKBucketDeploymen-123abc456 
--cli-binary-format raw-in-base64-out 
--invocation-type Event 
--payload '{"RequestType":"Create","ServiceToken":"arn:aws:lambda:eu-west-1: 000000000000:function:localEnvironmentStack-CustomCDKBucketDeploymen-123abc456","StackId":"arn:aws:cloudformation:eu-west-1: 000000000000:stack/localEnvironmentStack/123456-abcdef-123456","RequestId":"123456-abcdef-123456","LogicalResourceId":"localClientDeploymentCustomResourceABCD1234","ResourceType":"Custom: :CDKBucketDeployment","ResourceProperties":{"ServiceToken":"arn:aws:lambda:eu-west-1: 000000000000:function:localEnvironmentStack-CustomCDKBucketDeploymen-6789defgh","Prune":"true","SystemMetadata":{"acl":"public-read"},"SourceBucketNames":["cdk-abcdefgh-assets-000000000000-eu-west-1"],"DestinationBucketName":"my-local-bucket","DestinationBucketKeyPrefix":"local/","SourceObjectKeys":["123456789abcdefghijklmnopqrstuvwxyz.zip"]},"ResponseURL":"http://somecloudfrontURL.com"}' 
response.json

我接下来的步骤是自动化这个,以便在cdklocal部署到localstack之后,我可以模拟部署期间CloudFormation必须触发的部署事件。我还会在localstack的问题中提出这个问题。

最新更新