我正在尝试将托管策略添加到包含帐户 ID 的角色:
const role = iam.Role.fromRoleArn(
this,
'Role',
`arn:aws:iam::${cdk.Stack.of(this).account}:role/example-role`,
);
role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonDynamoDBFullAccess'));
role.addManagedPolicy(iam.ManagedPolicy.fromAwsManagedPolicyName('AmazonKinesisFullAccess'));
Run Code Online (Sandbox Code Playgroud)
在 aws 控制台上,我看不到添加到角色中的策略。
仅供参考,我aws-cli已使用正确的帐户登录。
我最近通过 CDK 在 AWS 上设置了一个应用程序。该应用程序由一个 Dockerized Nodejs 应用程序组成,该应用程序连接到 RDS 实例,并且还具有 Redis 缓存层。应用程序部署几天后,即使流量很小,成本也比我预期的要高得多。查看成本浏览器后,看起来一半的成本来自 NAT 网关。
在我当前的设置中,我创建了两个 VPC。一个用于应用程序堆栈,另一个用于 CodePipeline。我需要为管道添加一个,因为如果没有它,我在 CodeBuildAction 步骤期间尝试拉取 Docker 映像时会遇到速率限制。
我对网络部分不太满意,但我觉得涉及额外的资源。管道VPC有3个NAT网关和3个EIP。这些最终只是坐在那里等待下一次部署,这似乎是一种巨大的浪费。似乎为 CDK 中附加的 VPC 的每个构造分配了一个新的网关 + EIP。我可以让它重复使用同一个吗?有没有其他方法可以完全添加 VPC 并且不受 Docker 限制速率?
我还发现非常令人惊讶(我可能只是天真),NAT 网关到目前为止与我当前的 Fargate 任务成本同样昂贵。有没有一种替代方案可以满足我的目的,但成本要低一些?
无论如何,这是我的两个堆栈:
// pipeline-stack.ts
import { SecretValue, Stack, StackProps } from "aws-cdk-lib";
import { Construct } from "constructs";
import { Artifact, IStage, Pipeline } from "aws-cdk-lib/aws-codepipeline";
import {
CloudFormationCreateUpdateStackAction,
CodeBuildAction,
CodeBuildActionType,
GitHubSourceAction,
} from "aws-cdk-lib/aws-codepipeline-actions";
import {
BuildEnvironmentVariableType,
BuildSpec,
LinuxBuildImage,
PipelineProject,
} from "aws-cdk-lib/aws-codebuild";
import …Run Code Online (Sandbox Code Playgroud) 我的 AWS 环境中已存在一个 SNS 主题。我不想创建新的 SNS 主题,而是想简单地引用已经存在的主题并向其发布消息。
现在,我有以下内容:
const topic = new sns.Topic(this, 'AggregateSNS', {
contentBasedDeduplication: false,
displayName: 'Customer subscription topic',
fifo: true,
topicName: 'MySNSTopic',
//how to reference existing topics?
});
Run Code Online (Sandbox Code Playgroud)
我的理解是这将创建一个新的 SNS 主题,但正如我上面所说,我想引用现有的 SNS 主题。如何在 CDK 中引用现有的 SNS 主题?
我有一个 AWS Cdk 部署程序应用程序,它在 AWS 中部署了多个资源。该应用程序使用一个配置文件作为输入文件,并使用该文件在 Fargate 集群中部署多个 ecs 任务,并将它们放置在应用程序负载均衡器后面。
有什么方法可以获取我运行时正在部署的所有组件/AWS 服务cdk deploy --all。我试图在不使用单独的 boto3 函数的情况下了解 cdk 是否提供了任何方法。
我正在尝试将 AWS CDK 管道从账户 A(部署账户)部署到账户 B(工作负载账户)。作为我的 CDK 代码的一部分,我正在执行 VPC ID 的查找:
var lambdaVpc = Vpc.FromLookup(this, "VPC", new VpcLookupOptions{
VpcId = Vpc.id
});
Run Code Online (Sandbox Code Playgroud)
但是,当我的管道运行时,出现以下错误:
Could not assume role in target account using current credentials (which are for account ${DeploymentAccount})
User: arn:aws:sts::${DeploymentAccount}:assumed-role/te-cdk-pipeline-mis-servi-tecdkpipelinemisservicej-UPT0J1RO1RFR/AWSCodeBuild-7bcbd3a0-8159-454b-a886-18f8dd1df58c is not authorized to perform: sts:AssumeRole on resource:
arn:aws:iam::${WorkloadAccount}:role/cdk-hnb659fds-lookup-role-${WorkloadAccount}-ap-southeast-2 .
Please make sure that this role exists in the account. If it doesn't exist, (re)-bootstrap the environment with the right '--trust', using the latest version of the CDK CLI.
Run Code Online (Sandbox Code Playgroud)
我的工作负载帐户角色具有以下策略: …
我正在通过 CDK 在 AWS EventBridge 中创建自定义总线:
export class EventbridgeStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
const targetCoreBus = new events.EventBus(this, 'TargetCoreBus', {
eventBusName: 'TargetCoreBus',
});
targetCoreBus.grantPutEventsTo(new iam.AccountPrincipal('1234567890'));
}
}
Run Code Online (Sandbox Code Playgroud)
巴士制作得很好,但我假设线路
targetCoreBus.grantPutEventsTo(new iam.AccountPrincipal('1234567890'));
Run Code Online (Sandbox Code Playgroud)
将向总线添加策略,允许指定帐户将事件放入其中。但它似乎没有做任何事情,堆栈中没有合成任何新内容,也没有向总线添加任何策略。这是预期的吗,我做错了什么吗?
我有一个使用 typescript 的 CDK 应用程序。我想要快速开发,所以我一直在使用cdk watch. 每当我进行更改时,都会部署 cdk 堆栈。这很好用,但是,应用程序在部署后不会检测我的打字稿 lambda 源代码,但它会在我构建打字稿后检测 javascript 文件。我的印象是我不需要构建打字稿文件来部署 cdk 应用程序。
下面是我创建 lambda 的方法
const testLambda = new lambda.Function(this, 'TestLambda', {
runtime: lambda.Runtime.NODEJS_14_X,
handler: 'api/example/get.handler',
code: lambda.Code.fromAsset('src/')
});
Run Code Online (Sandbox Code Playgroud)
当我点击 API 时,我收到错误Cannot find module get,但如果我运行tsc然后点击 api,它将找到get.js创建的文件。
每次部署前都必须构建 tsc 文件吗?如果是这样,我如何检测打字稿文件中的更改,构建它们,然后部署 cdk 堆栈?
我正在开发一个 CDK 堆栈,用于配置需要访问 S3 和 DynamoDB 的 AWS Batch Fargate 作业。我授予了访问权限executionRole。但是当我运行 Job 时,它无法访问 s3,并显示以下错误消息:
无法从 EC2 实例元数据服务获取 IAM 安全凭证
这是代码:
import { ComputeEnvironment, ComputeResourceType, JobDefinition, JobQueue, PlatformCapabilities } from "@aws-cdk/aws-batch-alpha";
import { Duration, Stack, StackProps } from "aws-cdk-lib";
import { ITable } from "aws-cdk-lib/aws-dynamodb";
import { IVpc } from "aws-cdk-lib/aws-ec2";
import { ContainerImage } from "aws-cdk-lib/aws-ecs";
import { ManagedPolicy, PolicyDocument, PolicyStatement, Role, ServicePrincipal } from "aws-cdk-lib/aws-iam";
import { IBucket } from "aws-cdk-lib/aws-s3";
import { Construct } from "constructs"; …Run Code Online (Sandbox Code Playgroud) amazon-web-services typescript aws-batch aws-fargate aws-cdk
我的目标是通过 AWS CDK 启用区域 WebAcl 的日志记录。这似乎可以通过 Cloud Formation 实现,并且 CDK 中有适当的构造。但是,当使用以下代码创建日志组并将其链接到LoggingConfiguration时...
const webAclLogGroup = new LogGroup(scope, "awsWafLogs", {
logGroupName: `aws-waf-logs`
});
// Create logging configuration with log group as destination
new CfnLoggingConfiguration(scope, "webAclLoggingConfiguration", {
logDestinationConfigs: webAclLogGroup.logGroupArn, // Arn of LogGroup
resourceArn: aclArn // Arn of Acl
});
Run Code Online (Sandbox Code Playgroud)
...我在 期间遇到异常cdk deploy,指出 LogdestinationConfig 中的字符串不是正确的 Arn(日志消息中 Arn 的某些部分已被删除):
Resource handler returned message: "Error reason: The ARN isn't valid. A valid ARN begins with arn: and includes other …Run Code Online (Sandbox Code Playgroud) 已解决
按照下面 zessx 的评论,我最终通过添加export DOCKER_DEFAULT_PLATFORM="linux/amd64"到我的 zsh 配置文件中解决了问题。
cdk deploy我最近收到了一台用于工作的 MacBook Pro M2,但在使用时遇到了问题。有一个 numpy 导入问题特别与其“C 扩展”相关。
原始错误是:没有名为“numpy.core._multiarray_umath”的模块。
我看到一旦 cdk 部署开始,Docker Desktop 的第一层就是“ARCHITECTURE arm64”。我猜这至少是构建在实际尝试在 x64 AWS 架构上运行时遇到问题的部分原因。我是否无法在本地进行这样的构建?
谢谢!
我尝试了几个不同版本的 numpy 来导入
从同事的 x64 笔记本电脑部署相同的代码并运行。
aws-cdk ×10
amazon-iam ×3
typescript ×3
64-bit ×1
amazon-sns ×1
amazon-vpc ×1
arm64 ×1
aws-batch ×1
aws-fargate ×1
boto3 ×1
deployment ×1
docker ×1
python ×1