我正在使用 CDK/CloudFormation,最近在尝试创建新堆栈时开始收到此错误:
The maximum number of addresses has been reached.
Run Code Online (Sandbox Code Playgroud)
在 AWS 管理控制台中查看,VPC IP 地址的数量限制为 40 个,而列表中正好有 40 个 - 但其中一些既没有关联实例 ID,也没有设置关联 ID:
我的理解是,那些没有这些集合的东西不会被用于任何用途,因此希望使它们可用于克服堆栈创建时的错误。但不确定如何做到这一点 - “释放弹性 IP 地址”是否可以解决问题,或者它们是否需要保留在帐户中,但以其他方式标记为可重用?
amazon-web-services aws-cloudformation amazon-vpc elastic-ip aws-cdk
我正在部署一个将由 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) 我正在尝试使用cdk deploy my-stack 将我的堆栈部署到 aws 。在我的终端窗口中执行此操作时,它工作得很好,但是当我在管道中执行此操作时,我收到此错误:Need to Perform AWS requests for account xxx, but nocredentials has beenconfigured。我已运行aws configure并为我使用的 IAM 用户插入了正确的密钥。
再说一遍,它仅在我在终端中手动执行时才有效,但在管道执行时无效。有人知道我为什么会收到此错误吗?
我正在尝试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) 我的团队有一个在执行 IAM 角色下运行的管道。我们希望通过 CloudFormation 或 CDK 将代码部署到 AWS。
过去,我们会在创建/更新 CloudFormation 堆栈之前使用执行 IAM 角色将一些工件上传到 S3 存储桶。
我们最近切换到 CDK,并试图通过使用 CDK Deploy 获得尽可能多的自动化,但遇到了许多我们需要添加的权限项,而我们之前没有这些项(例如,cloudformation:GetTemplate) .
我们不想只授予 * (我们想遵循最小权限),但我找不到任何明确的记录列表。
CDK Deploy 是否有标准的权限列表?除了标准列表之外,还有什么“值得拥有的”吗?
我是 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)
如果我在代码中犯了任何错误,请纠正我。提前致谢 :)
当我运行时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) 我在构建我的应用程序时遇到了这个问题 -
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。请帮我解决这个问题。
嗨,我正在研究 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) // …
aws-cdk ×10
amazon-vpc ×2
node.js ×2
amazon-iam ×1
amazon-s3 ×1
aws-lambda ×1
docsy ×1
elastic-ip ×1
node-modules ×1
pipeline ×1
python ×1
python-venv ×1