我正在尝试将eu-central-1颁发的证书用于我的 apigateway,它是区域性的并且在同一区域工作。
我的地形代码如下:
//ACM Certificate
provider "aws" {
region = "eu-central-1"
alias = "eu-central-1"
}
resource "aws_acm_certificate" "certificate" {
provider = "aws.eu-central-1"
domain_name = "*.kumite.xyz"
validation_method = "EMAIL"
}
//Apigateway
resource "aws_api_gateway_rest_api" "kumite_writer_api" {
name = "kumite_writer_api"
endpoint_configuration {
types = ["REGIONAL"]
}
}
resource "aws_api_gateway_domain_name" "domain_name" {
certificate_arn = aws_acm_certificate.certificate.arn
domain_name = "recorder.kumite.xyz"
endpoint_configuration {
types = ["REGIONAL"]
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我不断收到此错误:
错误:创建 API 网关域名时出错:BadRequestException:无法在 REGIONAL 处于活动状态时为 EDGE 导入证书。
我在这里缺少什么?我认为我的 ApiGateway 不是 EDGE 而是 REGIONAL,所以找不到错误的意义......
要在 CLI 中担任 AWS 角色,我执行以下命令:
aws sts assume-role --role-arn arn:aws:iam::123456789123:role/myAwesomeRole --role-session-name test --region eu-central-1
Run Code Online (Sandbox Code Playgroud)
这给了我一个遵循架构的输出:
{
"Credentials": {
"AccessKeyId": "someAccessKeyId",
"SecretAccessKey": "someSecretAccessKey",
"SessionToken": "someSessionToken",
"Expiration": "2020-08-04T06:52:13+00:00"
},
"AssumedRoleUser": {
"AssumedRoleId": "idOfTheAssummedRole",
"Arn": "theARNOfTheRoleIWantToAssume"
}
}
Run Code Online (Sandbox Code Playgroud)
然后我手动复制和粘贴 , 的值AccessKeyId,SecretAccessKey并SessionToken在像这样的一堆导出中:
export AWS_ACCESS_KEY_ID="someAccessKeyId"
export AWS_SECRET_ACCESS_KEY="someSecretAccessKey"
export AWS_SESSION_TOKEN="someSessionToken"
Run Code Online (Sandbox Code Playgroud)
最终承担起这个角色。
我怎么能一次性做到这一点?我的意思是,无需手动干预将aws sts ...命令的输出复制和粘贴到exports.
我在通过 TLS/SSL 使用纯 Java 连接我的 DocumentDB 集群时遇到问题
我按照AWS 文档遵循的程序是这样的:
我.pem从 AWS下载了文件并复制到我的 java 项目的根目录中,从那里我执行:
keytool -importcert -trustcacerts -file rds-combined-ca-bundle.pem -alias certAlias -keystore rds-ca-certs -storepass keyStorePassword
Run Code Online (Sandbox Code Playgroud)
这已经在rds-ca-certs我的项目的根目录创建了,现在看起来像这样:
并且,Main.java 中的 java 代码是:
package com.example.documentdb;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.ServerAddress;
import com.mongodb.MongoException;
import com.mongodb.client.MongoCursor;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import org.bson.Document;
public final class Main {
private Main() {
}
public static void main(String[] args) {
String template = "mongodb://%s:%s@%s/test?ssl=true&replicaSet=rs0&readpreference=%s";
String username = "myUsernameInCluster";
String password = "myPasswordInCluster"; …Run Code Online (Sandbox Code Playgroud) 我没能找到一种方法来检查S3对象的元数据字段,如Content-Type或Cache-Control与AWS SDK的Java 2.X。
使用适用于 Java 1.x 的 AWS 开发工具包,事情就这么简单:
s3Client.getObjectMetadata("myBucket", "myfile.doc");
但是我看不到最新版本的 API 的类似方法。
我定义了以下 Terraform 模块:
module "lambda" {
source = "../lambda"
region = "us-west-1"
account = "${var.account}"
}
Run Code Online (Sandbox Code Playgroud)
如何利用模块名称来设置source带插值的参数?我希望是这样的:
module "lambda" {
source = "../${this.name}"
region = "us-west-1"
account = "${var.account}"
}
Run Code Online (Sandbox Code Playgroud) 我已经使用Terraform成功部署了一个AWS Lambda:
resource "aws_lambda_function" "lambda" {
filename = "dist/subscriber-lambda.zip"
function_name = "test_get-code"
role = <my_role>
handler = "main.handler"
timeout = 14
reserved_concurrent_executions = 50
memory_size = 128
runtime = "python3.6"
tags = <my map of tags>
source_code_hash = "${base64sha256(file("../modules/lambda/lambda-code/main.py"))}"
kms_key_arn = <my_kms_arn>
vpc_config {
subnet_ids = <my_list_of_private_subnets>
security_group_ids = <my_list_of_security_groups>
}
environment {
variables = {
environment = "dev"
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我运行terraform plan命令时,它说我的lambda资源需要更新,因为source_code_hash已经更改了,但是我没有更新lambda Python代码库(在相同仓库的文件夹中版本化):
~ module.app.module.lambda.aws_lambda_function.lambda
last_modified: "2018-10-05T07:10:35.323+0000" => <computed>
source_code_hash: "jd6U44lfe4124vR0VtyGiz45HFzDHCH7+yTBjvr400s=" => "JJIv/AQoPvpGIg01Ze/YRsteErqR0S6JsqKDNShz1w78"
Run Code Online (Sandbox Code Playgroud)
我想这是因为它每次都会压缩我的Python源,并且源会更改。如果Python代码没有变化,如何避免这种情况?如果我不更改Python代码库,我的假设是否连贯(我的意思是,为什么哈希会发生变化)?
在使用 Telethon 库运行我的第一个代码时,它要求一个机器人令牌。
这是实际的代码:
from telethon import TelegramClient, events, sync
api_id = 1234567
api_hash = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
client = TelegramClient('anon', api_id, api_hash)
client.start()
Run Code Online (Sandbox Code Playgroud)
在命令提示符下:
pip3 install telethon
python3 C:/TG/First.py
Run Code Online (Sandbox Code Playgroud)
结果:
请输入您的电话(或机器人令牌)
如果我提供我的 API ID,它最终会抛出错误:
telethon.errors.rpcerrorlist.PhoneNumberInvalidError: 电话号码无效(由 SendCodeRequest 引起)
为什么?我希望客户端启动时不会出错。
PS:我的 API ID 是 7 位数字。
我有一个$HOME/.aws/credentials这样的文件:
[config1]
aws_access_key_id=accessKeyId1
aws_secret_access_key=secretAccesskey1
[config2]
aws_access_key_id=accessKeyId2
aws_secret_access_key=secretAccesskey2
Run Code Online (Sandbox Code Playgroud)
所以我期望通过此配置,terraform将选择第二个凭据:
terraform {
backend "s3" {
bucket = "myBucket"
region = "eu-central-1"
key = "path/to/terraform.tfstate"
encrypt = true
}
}
provider "aws" {
profile = "config2"
region = "eu-central-1"
}
Run Code Online (Sandbox Code Playgroud)
但是当我尝试时terraform init它说它没有找到任何有效的凭据:
正在初始化后端...
错误:找不到 AWS 提供商的有效凭证源。有关为 AWS 提供商提供凭证的更多信息,请参阅https://terraform.io/docs/providers/aws/index.html
作为解决方法,我在凭据文件中进行了更改config2,default并profile从块中删除了该字段provider,因此它可以工作,但我确实需要使用类似于第一种方法的方法。我在这里缺少什么?
我正在尝试从 Python 3.8 Lambda 函数发布到 KMS 加密的 SNS 主题。我的 lambda 代码是:
import os
import boto3
sns = boto3.client('sns')
def handler(event, context):
message = 'Hello world'
response = sns.publish(
TopicArn='<My topic ARN>',
Message=message,
)
Run Code Online (Sandbox Code Playgroud)
如果 SNS 未加密,则代码可以完美运行......
...但是当我通过以下选项加密 SNS 主题时:
执行 lambda 时出现以下错误:
{“errorMessage”:“调用发布操作时发生错误 (KMSNotFound):keyId aws/sns 无效(服务:AWSKMS;状态代码:400;错误代码:NotFoundException;请求 ID:d81234100-9cb4-4af2-0032-c4a568a955f4 )", "errorType": "KMSNotFoundException", "stackTrace": [ " 文件 \"/var/task/lambda.py\",第 10 行,处理程序\n boto3.client('sns').publish(\ n", " 文件 \"/var/runtime/botocore/client.py\", 第 316 行,在 _api_call\n 返回 self._make_api_call(operation_name, kwargs)\n", " 文件 \"/var/runtime/botocore /client.py\",第 626 行,在 _make_api_call\n 中引发 error_class(parsed_response, operation_name)\n" ] …
我正在尝试通过以下方式将日期范围划分为各个日期:
private static void splitDates(LocalDate dateFrom, LocalDate dateTo) {
while (dateFrom.isBefore(dateTo) || dateFrom.isEqual(dateTo)) {
System.out.println(dateFrom);
dateFrom.plusDays(1L);
}
}
Run Code Online (Sandbox Code Playgroud)
而且我不知道为什么dateFrom.plusDays(1L)不起作用,因为日期保持不变,所以循环变为无限。