amazon-cloudformation - 用存储桶名称替换变量
问题描述
我有这个模板可以按预期工作并创建一个 S3 存储桶和一些雅典娜查询。
https://datameetgeobk.s3.amazonaws.com/cftemplates/athena_saved_query_blog_partition_parquet.tpl
问题是:如何将 S3 存储桶名称“athenadata162a”替换为第一步创建的存储桶名称。
external_location = 's3://athenadata162a/optimized-data11/'
创建新存储桶的代码如下所示...
"myS3Bucket" : {
"Type" : "AWS::S3::Bucket"
},
按照建议,将代码更改为 yaml 并仍然出现此错误:
模板验证错误:模板错误:一个或多个 Fn::Sub 内部函数未指定预期参数。指定一个字符串作为第一个参数,以及一个可选的第二个参数来指定要在字符串中替换的值的映射
编码:
Resources:
myS3Bucket:
Type: 'AWS::S3::Bucket'
createTableASParquetPartioned:
Type: 'AWS::Athena::NamedQuery'
Properties:
Database: default
Description: Create table as parquet partitioned
Name: Blog2createTableAS
QueryString: !Sub
- |-
CREATE table new_parquet11 WITH (format='PARQUET',
parquet_compression='SNAPPY', partitioned_by=array['year'],
external_location = 's3://myS3Bucket/optimized-data11/') AS SELECT
id, date, element, datavalue, mflag, qflag, sflag, obstime,
substr("date",1,4) AS year FROM original_csv WHERE
cast(substr("date",1,4) AS bigint) >= 2015 AND cast(substr("date",1,4)
AS bigint) <= 2019
解决方案
通常,您用于Fn::Sub
替换某些输入字符串中的变量。
在您的 YAML 中,这将类似于:
QueryString: !Sub
- |-
CREATE table new_parquet11
WITH (format='PARQUET',
parquet_compression='SNAPPY',
partitioned_by=array['year'],
external_location = 's3://${myS3Bucket}/optimized-data11/')
...
抱歉,我不会提供 JSON 语法,因为它对于多行值来说太可怕了。
推荐阅读
- reactjs - 如何将特定 API 数据从一个组件发送到另一个在 React 组件中调用的组件
- .net - JSON.stringify API 返回 415 (.net & angular)
- php - 存储库模式:如何准确地确定函数的签名(返回类型)?
- ruby-on-rails - 将 DateTime 属性与 DateTime.now 进行比较会产生意想不到的结果
- xamarin - 将 DeviceDisplay.MainDisplayInfoChanged 事件添加到 XF 应用程序的 OnStart 是否有任何问题?
- web-scraping - 使用 Beautiful Soup 抓取一个人在 Quora 上回答的所有问题
- c++ - 如何正确捕获 Rcpp 异常?
- windows - 什么是“api-ms-win-core-...”?
- javascript - react-paypal-button-v2 付款完成但未收到
- c# - 无法使游戏对象从另一个脚本中移动