如何使用 AWS CDK 将两个安全组连接在一起?
这是允许 IPv4 流量通过端口 443 进入的示例
ec2SecurityGroup.addIngressRule(Peer.anyIpv4(), Port.tcp(443), 'Test rule', false)
Run Code Online (Sandbox Code Playgroud)
这来自文档:
public addIngressRule(peer: IPeer, connection: Port, description?: string, remoteRule?: boolean): void
Run Code Online (Sandbox Code Playgroud)
这是我能想到的最好的方法(其中 'elbSecurityGroup' 是另一个安全组):
const p = Peer.anyIpv4()
p.connections.allowFrom(elbSecurityGroup.connections, Port.tcp(443))
ec2SecurityGroup.addIngressRule(p, Port.tcp(443), 'Test rule', false)
Run Code Online (Sandbox Code Playgroud)
但这真的没有任何意义。必须有更好的方法来初始化 Peer。打字稿说
类“Peer”的构造函数受保护并且只能在类声明中访问。
如果我尝试:
const p = new Peer()
Run Code Online (Sandbox Code Playgroud) 我可以从 AWS 控制台和 AWS CLI 在集群上运行任务,但是当我尝试从 Lambda 运行相同的任务/集群组合时,我收到以下错误:
"errorMessage": "Service Unavailable. Please try again later. (Service: AmazonECS; Status Code: 500; Error Code: ServerException; Request ID: b02100bb-0ac4-11e7-84df-a552ac171feb)",
"errorType": "com.amazonaws.services.ecs.model.ServerException",
Run Code Online (Sandbox Code Playgroud)
我可以使用 Lambda 成功注册一个新任务,还可以使用 Lambda 中的任务创建一个新服务。
我怎样才能进一步了解这个错误?
是否可以通过 Cloudfront 对 API 网关端点使用 IAM 角色身份验证?
这是一个基本用例:
我已经能够在没有身份验证的情况下工作,类似于以下设置:https : //www.codeengine.com/articles/process-form-aws-api-gateway-lambda/
特别要注意的是不要转发来自 Cloudfront 的 HOST 标头...
当我在 API 中启用 IAM 身份验证时,我收到以下响应:
选项:200
帖子:403
{"message":"我们计算的请求签名与您提供的签名不匹配。请检查您的 AWS 秘密访问密钥和签名方法。有关详细信息,请参阅服务文档。\n\n此请求的规范字符串应该是\n 'POST\n/test/create\n\naccept:application/json\ncontent-type:application/json\nhost:*****.execute-api.ap-****-2.amazonaws.com\ NX-AMZ-日期:20170328T044253Z \ n \ naccept;内容类型,主机X-AMZ-日期\ na57656a9def890d9de2b637789f7e5917f4b2823765ae0122087d08f89a97380' \ n \ n此字符串到注册应该已经\ n'AWS4-HMAC-SHA256 \ n20170328T044253Z \ n20170328 /ap-southeast-2/execute-api/aws4_request\ncae7fd6b4cabd593ad2ec6ce7091c94dc8cba306e81da95d567873eea8f981a5'\n"}
规范字符串中的主机是 API 网关的主机...
这是 server.xml 中的连接器:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150"
SSLEnabled="true"
scheme="https"
compression="off"
connectionTimeout="1190"
address="0.0.0.0"
>
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="/etc/ssl/certs/private.key"
certificateFile="/etc/ssl/certs/public.pem"
/>
</SSLHostConfig>
</Connector>
Run Code Online (Sandbox Code Playgroud)
此连接器的目标是通过 HTTP2 和 APR 以及 HTTPS 提高速度。
我们使用操作系统包 tomcat-native 安装了 tomcat native。
启动时的日志输出:
信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent 使用 APR 版本 [1.6.3] 加载基于 APR 的 Apache Tomcat 本机库 [1.2.16]。
信息 [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR 功能:IPv6 [true]、sendfile [true]、接受过滤器 [false]、随机 [true]。
INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL 配置:useAprConnector [false],useOpenSSL [true]
一切看起来都很棒,除了useAprConnector [false]
那么APR真的在做什么吗?
我在相关文档中找不到任何内容:
https://tomcat.apache.org/tomcat-8.0-doc/config/http.html#SSL_Support
给定一个 JSON 对象,例如:
"book": [
{
"category": "reference",
"author": "Nigel Rees",
"book_id": "214515",
"title": "Sayings of the Century",
"price": 8.95,
"reviews": [
{
"rating": 2,
"reviewer": "Amazon",
"weight": 0
},
{
...
}
]
},
{
...
}
Run Code Online (Sandbox Code Playgroud)
是否可以选择 book_id 以及该书的部分或全部评论?
结果可能看起来像这样:
[
{
"book_id": "...",
"reviews": [
...
]
},
{
...
}
]
Run Code Online (Sandbox Code Playgroud)
我一直在使用 Jayway jsonpath: https: //github.com/json-path/JsonPath
在处理数组(例如“评论”)然后以编程方式加入时,以下方法不适合:
List ids = JsonPath.read(json, "$.store.books[*].book_id");
List reviews = JsonPath.read(json, "$.store.books[*].reviews[*]");
Run Code Online (Sandbox Code Playgroud) java ×2
amazon-ec2 ×1
apr ×1
aws-cdk ×1
aws-lambda ×1
https ×1
json ×1
jsonpath ×1
tomcat ×1
typescript ×1