标签: aws-cdk

如何解决AWS VPC弹性IP地址“已达到最大地址数”的问题?

我正在使用 CDK/CloudFormation,最近在尝试创建新堆栈时开始收到此错误:

The maximum number of addresses has been reached.
Run Code Online (Sandbox Code Playgroud)

在 AWS 管理控制台中查看,VPC IP 地址的数量限制为 40 个,而列表中正好有 40 个 - 但其中一些既没有关联实例 ID,也没有设置关联 ID:

弹性IP地址

我的理解是,那些没有这些集合的东西不会被用于任何用途,因此希望使它们可用于克服堆栈创建时的错误。但不确定如何做到这一点 - “释放弹性 IP 地址”是否可以解决问题,或者它们是否需要保留在帐户中,但以其他方式标记为可重用?

amazon-web-services aws-cloudformation amazon-vpc elastic-ip aws-cdk

41
推荐指数
3
解决办法
6万
查看次数

AWS CDK:如何创建可由多个委托人担任的 IAM 角色?

我正在部署一个将由 CloudFront 使用的 Lambda 函数。因此,该函数的执行角色需要由edgelambda.amazonaws.com 和lambda.amazonaws.com 承担。如果我手动执行此操作,该策略将如下所示:

{
    "Version": "2012-10-17",
    "Statement": [
    {
        "Effect": "Allow",
        "Principal": {
            "Service": [
                "edgelambda.amazonaws.com",
                "lambda.amazonaws.com"
            ]
        },
        "Action": "sts:AssumeRole"
    }
    ]
}
Run Code Online (Sandbox Code Playgroud)

在 AWS CDK 中进行设置时,该类iam.Role仅允许您指定一个初始假设主体,例如:

lambda_role = iam.Role(
    self,
    "lambda_redirect_role",
    assumed_by=iam.ServicePrincipal("edgelambda.amazonaws.com"),
    managed_policies=[
        iam.ManagedPolicy.from_aws_managed_policy_name("service-role/AWSLambdaBasicExecutionRole"),
        iam.ManagedPolicy.from_aws_managed_policy_name("AWSXrayWriteOnlyAccess")
    ],
)
Run Code Online (Sandbox Code Playgroud)

所以我试图找到添加第二个主体的最佳/最干净的方法。该文档说我可以使用假设_角色_策略来检索策略文档,然后对其进行操作。

所以我尝试过:

policy = lambda_role.assume_role_policy
policy.add_statements(
    iam.PolicyStatement(
        actions=["sts:AssumeRole"],
        effect=iam.Effect.ALLOW,
        principals=[
            iam.ServicePrincipal("lambda.amazonaws.com")
        ]
    )
)
Run Code Online (Sandbox Code Playgroud)

但这给了我这个不太理想的政策:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "edgelambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    },
    {
      "Effect": …
Run Code Online (Sandbox Code Playgroud)

aws-cdk

40
推荐指数
1
解决办法
4万
查看次数

需要对账户 xxx 执行 AWS 调用,但尚未配置凭证

我正在尝试使用cdk deploy my-stack 将我的堆栈部署到 aws 。在我的终端窗口中执行此操作时,它工作得很好,但是当我在管道中执行此操作时,我收到此错误:Need to Perform AWS requests for account xxx, but nocredentials has beenconfigured。我已运行aws configure并为我使用的 IAM 用户插入了正确的密钥。

再说一遍,它仅在我在终端中手动执行时才有效,但在管道执行时无效。有人知道我为什么会收到此错误吗?

pipeline amazon-web-services aws-cdk

33
推荐指数
2
解决办法
4万
查看次数

错误:在 NodeJS AWS Lambda 函数中找不到模块“aws-sdk”

我正在尝试S3通过aws-sdk我的 lambda 函数进行访问。

import S3 from 'aws-sdk/clients/s3';

const s3 = new S3();
const { Contents: results } = await s3.listObjects({ Bucket: process.env.DOCUMENTS_BUCKET_NAME! }).promise()
Run Code Online (Sandbox Code Playgroud)

我也使用命令成功部署了它cdk deploy。但是当我测试时,我收到以下错误

2022-11-23T15:53:40.891Z    undefined   ERROR   Uncaught Exception  
{
    "errorType": "Runtime.ImportModuleError",
    "errorMessage": "Error: Cannot find module 'aws-sdk'\nRequire stack:\n- /var/task/index.js\n- /var/runtime/index.mjs",
    "stack": [
        "Runtime.ImportModuleError: Error: Cannot find module 'aws-sdk'",
        "Require stack:",
        "- /var/task/index.js",
        "- /var/runtime/index.mjs",
        "    at _loadUserApp (file:///var/runtime/index.mjs:1000:17)",
        "    at async UserFunction.js.module.exports.load (file:///var/runtime/index.mjs:1035:21)",
        "    at async start (file:///var/runtime/index.mjs:1200:23)",
        "    at async file:///var/runtime/index.mjs:1206:1" …
Run Code Online (Sandbox Code Playgroud)

amazon-s3 amazon-web-services node.js aws-lambda aws-cdk

29
推荐指数
2
解决办法
5万
查看次数

何时使用 AWS CloudfrontWebDistribution 以及何时使用 AWS Cloudfront Distribution

我在aws-cdk中看到有两种构造:

每个都有不同的道具,看起来彼此不兼容。

我想知道该使用哪一个?

amazon-cloudfront aws-cdk

25
推荐指数
1
解决办法
4853
查看次数

使用 CDK Deploy 需要哪些 IAM 权限?

我的团队有一个在执行 IAM 角色下运行的管道。我们希望通过 CloudFormation 或 CDK 将代码部署到 AWS。

过去,我们会在创建/更新 CloudFormation 堆栈之前使用执行 IAM 角色将一些工件上传到 S3 存储桶。

我们最近切换到 CDK,并试图通过使用 CDK Deploy 获得尽可能多的自动化,但遇到了许多我们需要添加的权限项,而我们之前没有这些项(例如,cloudformation:GetTemplate) .

我们不想只授予 * (我们想遵循最小权限),但我找不到任何明确的记录列表。

CDK Deploy 是否有标准的权限列表?除了标准列表之外,还有什么“值得拥有的”吗?

aws-cloudformation amazon-iam aws-cdk

24
推荐指数
3
解决办法
6365
查看次数

AWS CDK 中堆栈和构造之间的区别

我是 CDK 的新手,对构造和堆栈之间的区别感到困惑。使用 CDK,我们可以定义可重用的云组件(称为 Construct),并且可以进一步将它们组合成堆栈或应用程序。请参阅下面来自 AWS 网站的图表,

在此输入图像描述

但是,我见过通过扩展 Construct 基类创建构造的类,以及通过扩展 Stack 基类创建 Stack 的类。稍后可以使用这两个子类来创建主堆栈。例如,请参阅下面的代码,我可以创建一个名为 HitCounter 类的 Construct 或 Stack,该类创建相同的资源集并在主 Stack 中以相同的方式使用它们。那么使用 Stack 或 Construct 有什么区别呢?

import * as cdk from '@aws-cdk/core';

export class HitCounterConstruct extends cdk.Construct {} // imagine this construct creates a bunch of related resources

export class HitCounterStack extends cdk.Stack {} // imagine this stack creates the same resources as the construct class above

// In main stack file App.ts

new HitCounterConstruct(cdk.App, "construct");
new HitCounterStack(cdk.App, "stack");
Run Code Online (Sandbox Code Playgroud)

如果我在代码中犯了任何错误,请纠正我。提前致谢 :)

amazon-web-services aws-cloudformation aws-cdk

22
推荐指数
1
解决办法
1万
查看次数

ModuleNotFoundError:没有名为 aws_cdk 的模块

当我运行时cdk deploy,出现以下错误:

Traceback (most recent call last):
  File "app.py", line 3, in <module>
    from aws_cdk import core
ModuleNotFoundError: No module named 'aws_cdk'
Run Code Online (Sandbox Code Playgroud)

我用 npm 安装了 cdk

npm install -g aws-cdk
Run Code Online (Sandbox Code Playgroud)

我通过以下方式激活了虚拟环境

source .env/bin/activate
Run Code Online (Sandbox Code Playgroud)

我使用的是python3.8。我安装了 aws_cdk 依赖项

pip install -r requirements.txt
Run Code Online (Sandbox Code Playgroud)

编辑 python 文件时,我能够导入 aws_cdk 并成功运行各个函数。我认为问题在于目录cdk/usr

> which cdk
/usr/local/bin/cdk
Run Code Online (Sandbox Code Playgroud)

我认为它使用的是我的 python/usr/bin而不是虚拟环境。如何让 cdk 在我的虚拟环境中使用 python?

编辑:

要求.txt

-e .
Run Code Online (Sandbox Code Playgroud)

python python-venv aws-cdk

21
推荐指数
3
解决办法
5万
查看次数

意外令牌 { ../node_modules/fs-extra/lib/mkdirs/make-dir.js:85 } catch {

我在构建我的应用程序时遇到了这个问题 -

2020-07-12 16:48:39 ....: 
                   ^
SyntaxError: Unexpected token {
    at createScript (vm.js:80:10)
    at Object.runInThisContext (vm.js:139:10)
    at Module._compile (module.js:617:28)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)..


   
                        BUILD FAILED 
Run Code Online (Sandbox Code Playgroud)

语法错误:意外标记 {

我无法理解是什么导致了它。我正在尝试将代码从 cfn 迁移到 cdk。请帮我解决这个问题。

amazon-web-services node.js node-modules aws-cdk docsy

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

如何在 aws cdk 中导入现有的 VPC?

嗨,我正在研究 aws cdk。我正在尝试获取现有的非默认 vpc。我尝试了以下选项。

vpc = ec2.Vpc.from_lookup(self, id = "VPC", vpc_id='vpcid', vpc_name='vpc-dev')
Run Code Online (Sandbox Code Playgroud)

这导致以下错误

[Error at /LocationCdkStack-cdkstack] Request has expired.
[Warning at /LocationCdkStack-cdkstack/TaskDef/mw-service] Proper policies need to be attached before pulling from ECR repository, or use 'fromEcrRepository'.
Found errors
Run Code Online (Sandbox Code Playgroud)

我试过的其他方法是

vpc = ec2.Vpc.from_vpc_attributes(self, 'VPC', vpc_id='vpc-839227e7', availability_zones=['ap-southeast-2a','ap-southeast-2b','ap-southeast-2c'])
Run Code Online (Sandbox Code Playgroud)

这导致

[Error at /LocationCdkStack-cdkstack] Request has expired.
[Warning at /LocationCdkStack-cdkstack/TaskDef/mw-service] Proper policies need to be attached before pulling from ECR repository, or use 'fromEcrRepository'.
Found errors
Run Code Online (Sandbox Code Playgroud)

我试过的其他方法是

vpc = ec2.Vpc.from_lookup(self, id = "VPC", is_default=True) // …

amazon-web-services amazon-vpc aws-cdk

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