标签: aws-cdk

使用 cdk 添加托管策略 aws

我正在尝试将托管策略添加到包含帐户 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已使用正确的帐户登录。

在此输入图像描述

amazon-web-services amazon-iam typescript aws-cdk

2
推荐指数
1
解决办法
6941
查看次数

删除不必要的AWS资源,VPC + NAT网关

我最近通过 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)

amazon-web-services amazon-vpc aws-cdk aws-nat-gateway

2
推荐指数
1
解决办法
1427
查看次数

引用 CDK 中已存在的 SNS 主题?

我的 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 主题?

amazon-web-services amazon-sns aws-cdk

2
推荐指数
1
解决办法
4453
查看次数

如何使用 aws cdk 列出所有部署的 aws 资源

我有一个 AWS Cdk 部署程序应用程序,它在 AWS 中部署了多个资源。该应用程序使用一个配置文件作为输入文件,并使用该文件在 Fargate 集群中部署多个 ecs 任务,并将它们放置在应用程序负载均衡器后面。

有什么方法可以获取我运行时正在部署的所有组件/AWS 服务cdk deploy --all。我试图在不使用单独的 boto3 函数的情况下了解 cdk 是否提供了任何方法。

python amazon-web-services boto3 aws-cdk

2
推荐指数
1
解决办法
3389
查看次数

无法承担查找角色

我正在尝试将 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)

我的工作负载帐户角色具有以下策略: …

amazon-web-services amazon-iam aws-cdk

2
推荐指数
1
解决办法
2948
查看次数

无法向 EventBridge 总线授予权限

我正在通过 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)

将向总线添加策略,允许指定帐户将事件放入其中。但它似乎没有做任何事情,堆栈中没有合成任何新内容,也没有向总线添加任何策略。这是预期的吗,我做错了什么吗?

userprincipal amazon-iam aws-cdk aws-event-bridge

2
推荐指数
1
解决办法
1425
查看次数

热重载时 CDK 未检测到 lambda 的打字稿文件

我有一个使用 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 堆栈?

typescript aws-cdk

2
推荐指数
1
解决办法
899
查看次数

如何向 Fargate JobDefinition 授予对 s3 和 DynamoDB 的访问权限?

我正在开发一个 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

2
推荐指数
1
解决办法
952
查看次数

为 AWS WAF WebAcl 启用日志在 ​​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)

amazon-web-services aws-cloudformation aws-cdk

2
推荐指数
1
解决办法
1533
查看次数

如何在 MacBook M2 arm64 上构建用于 AWS/x64 部署的映像?

已解决
按照下面 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 笔记本电脑部署相同的代码并运行。

deployment 64-bit docker arm64 aws-cdk

2
推荐指数
1
解决办法
2935
查看次数