标签: aws-cdk

使用 AWS CDK 为 lambda 指定自定义角色

我意识到它很新,但我没有看到任何语言的示例如何为使用 AWS CDK 创建的 lambda 指定角色。

我试图这样做

const cdk       = require('@aws-cdk/cdk');
const lambda    = require('@aws-cdk/aws-lambda');
const iam       = require('@aws-cdk/aws-iam');

const path      = require('path');

class MyStack extends cdk.Stack {
    constructor (parent, id, props) {
            super(parent, id, props);

            //
            // Create a lambda...
            const fn = new lambda.Function(this, 'MyFunction-cdktest', {
                runtime: lambda.Runtime.NodeJS810,
                handler: 'index.handler',
                code: lambda.Code.directory( path.join( __dirname, 'lambda')),
                role: iam.RoleName('lambda_basic_execution')
            });

    }
}

class MyApp extends cdk.App {
        constructor (argv) {
                super(argv);

                new MyStack(this, 'hello-cdk');
        }
}

console.log(new MyApp(process.argv).run());
Run Code Online (Sandbox Code Playgroud)

为了尝试为函数指定现有的 IAM …

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

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

错误:找不到模块“index”\n需要堆栈:\n- /var/runtime/index.mjs

我正在尝试通过 CDK 部署在打字稿中实现的 lambda。

我能够成功部署 lambda,但是当我测试它时,出现以下错误:

{
  "errorType": "Runtime.ImportModuleError",
  "errorMessage": "Error: Cannot find module 'index'\nRequire stack:\n- /var/runtime/index.mjs",
  "trace": [
    "Runtime.ImportModuleError: Error: Cannot find module 'index'",
    "Require stack:",
    "- /var/runtime/index.mjs",
    "    at _loadUserApp (file:///var/runtime/index.mjs:996:17)",
    "    at async UserFunction.js.module.exports.load (file:///var/runtime/index.mjs:1031:21)",
    "    at async start (file:///var/runtime/index.mjs:1194:23)",
    "    at async file:///var/runtime/index.mjs:1200:1"
  ]
}
Run Code Online (Sandbox Code Playgroud)

lambda 在 CDK 中声明如下:

    const postImages = new lambda.Function(scope, utils.prefixed('post_images'), {
        runtime: lambda.Runtime.NODEJS_18_X,
        handler: 'index.lambdaHandler',
        code: lambda.Code.fromAsset('./sd_service/post_images')
    })
Run Code Online (Sandbox Code Playgroud)

的内容./sd_service/post_images看起来像这样:

在此输入图像描述

索引.ts:

import { Context, APIGatewayEvent, APIGatewayProxyResult } from 'aws-lambda';

export …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-lambda aws-cdk

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

使用 AWS CDK 部署多个 API Gateway 阶段

API网关有阶段的概念(如:devtestprod),并通过AWS控制台部署多个阶段是非常简单的。

是否可以使用 AWS CDK 定义和部署多个阶段?

我试过了,但到目前为止似乎不可能。以下是一个非常基本的堆栈示例,该堆栈构建了一个 API 网关RestApi来为 lambda 函数提供服务:

export class TestStack extends cdk.Stack {
  constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
    super(scope, id, props);

    // Define stage at deploy time; e.g: STAGE=prod cdk deploy
    const STAGE = process.env.STAGE || 'dev'

    // First, create a test lambda
    const testLambda = new apilambda.Function(this, 'test_lambda', {
      runtime: apilambda.Runtime.NODEJS_10_X,    
      code: apilambda.Code.fromAsset('lambda'),  
      handler: 'test.handler',
      environment: { STAGE }
    })

    // Then, create the API construct, …
Run Code Online (Sandbox Code Playgroud)

aws-api-gateway aws-cdk

15
推荐指数
1
解决办法
4001
查看次数

如何解决:“无法解析要使用的 AWS 帐户。它必须在您定义 CDK 时或通过环境进行配置”

我正在尝试运行 CDK 命令来检查本地和远程堆栈的差异。

我正在使用以下命令。

cdk diff --profile saml
Run Code Online (Sandbox Code Playgroud)

我收到以下错误消息

Unable to resolve AWS account to use. It must be either configured when you define your CDK or through the environment
Run Code Online (Sandbox Code Playgroud)

我正在寻找解决此问题的方法。

amazon-s3 amazon-web-services aws-cli aws-lambda aws-cdk

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

AWS CDK - 如何向现有 S3 存储桶添加事件通知

我正在尝试修改AWS 提供的 CDK 示例以改为使用现有存储桶。其他文档表明支持导入现有资源。到目前为止,我无法使用 CDK 向现有存储桶添加事件通知。

这是我修改后的示例版本:

class S3TriggerStack(core.Stack):

    def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        # create lambda function
        function = _lambda.Function(self, "lambda_function",
                                    runtime=_lambda.Runtime.PYTHON_3_7,
                                    handler="lambda-handler.main",
                                    code=_lambda.Code.asset("./lambda"))

        # **MODIFIED TO GET EXISTING BUCKET**
        #s3 = _s3.Bucket(self, "s3bucket")
        s3 = _s3.Bucket.from_bucket_arn(self, 's3_bucket',
            bucket_arn='arn:<my_region>:::<my_bucket>')

        # create s3 notification for lambda function
        notification = aws_s3_notifications.LambdaDestination(function)

        # assign notification for the s3 event type (ex: OBJECT_CREATED)
        s3.add_event_notification(_s3.EventType.OBJECT_CREATED, notification)
Run Code Online (Sandbox Code Playgroud)

这会在尝试时导致以下错误add_event_notification

AttributeError: '_IBucketProxy' object has …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cdk

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

AWS CDK 生成的资源标识符非常糟糕且不可读。有任何解决这个问题的方法吗?

任何使用 AWS CDK 的人都会遭受可怕的资源标识符。

堆栈/嵌套堆栈名称示例:

在此处输入图片说明

或资源名称示例:

在此处输入图片说明

这些标识符读起来很糟糕。是否有任何解决方法来覆盖这些标识符?

我试图设置资源的 ID/名称/标识符/别名。然而,似乎 cdk 或 cloudformation 本身正在生成这些字符串。

谢谢你的建议!

amazon-web-services aws-cloudformation aws-cdk

13
推荐指数
1
解决办法
2136
查看次数

针对现有项目的 AWS CDK Init

我正在尝试在刚刚通过 Visual Studio 创建的新网站上初始化 AWS CDK。

\n

但是当我运行 init 命令时出现错误:cdk init无法在非空目录中运行

\n
\xe2\x9d\xaf cdk init app --language=csharp\n`cdk init` cannot be run in a non-empty directory!\n
Run Code Online (Sandbox Code Playgroud)\n

CDK Workshop使用从头开始的示例(在空目录中)。

\n

是否可以在现有解决方案/项目中初始化 CDK?

\n

c# amazon-web-services .net-core aws-cdk

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

使用 AWS CDK Pipelines 使 Cloudfront 缓存失效

作为 CDK 中 CodePipeline 的一部分,我希望最后一步使 Cloudfront 缓存失效。

这是我当前的部署操作步骤:

{
  stageName: 'Deploy',
  actions: [
    new codepipelineActions.S3DeployAction({
      actionName: 'S3Deploy',
      bucket: frontendCodeBucket, // See bucket config below
      input: buildOutput, // Output from Build step
    }),
  ]
}
Run Code Online (Sandbox Code Playgroud)

这是我的代码桶和 CF 分布:

const frontendCodeBucket = new s3.Bucket(this, 'FrontendBucketStaging', {
  websiteIndexDocument: 'index.html',
  encryption: s3.BucketEncryption.S3_MANAGED,
  blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
  bucketName: 'something',
  removalPolicy: RemovalPolicy.DESTROY,
});


const distribution = new cloudfront.CloudFrontWebDistribution(this, 'FrontendCloudfrontStaging', {
  originConfigs: [
    {
      s3OriginSource: {
        s3BucketSource: frontendCodeBucket,
        originAccessIdentity: oai,
      },
      behaviors : [ {isDefaultBehavior: true}]
    }
  ],
Run Code Online (Sandbox Code Playgroud)

我找不到任何方法通过 …

amazon-web-services amazon-cloudfront aws-cloudformation aws-cdk

13
推荐指数
2
解决办法
9001
查看次数

使用 CDK 定义具有服务发现功能的 ECS Fargate 集群,无需负载均衡器

我们使用CDK,并且开始在 ECS 服务中使用服务发现(因此,服务器到服务器而不是客户端到服务器)。这意味着我们不需要 ALB(至少目前,也许我们可以稍后重新考虑这个选择)。

\n

不幸的是,用于构建 ECS 服务 ( ecs_patterns.ApplicationLoadBalancedFargateService) 的 CDK 模式也会创建 ALB,因此我们不能按原样使用它,我们需要自己创建这些 CDK 步骤。

\n

这个想法基本上是从 AWS 将本教程从使用 AWS CLI移植到使用 CDK。

\n

问题是:是否有人已经这样做并想要分享它或者知道 CDK Patterns 没有该选项的原因?

\n

(如果没有人打算共享它,我们会这样做,然后当然会共享它;我认为这个选项应该立即出现在 CDK 中,这只是不浪费时间“只是”配置问题的问题\xe2\x80\x93\xc2\xa0除非有一些我们在这里看不到的东西...)。

\n

amazon-web-services amazon-ecs aws-cdk

13
推荐指数
1
解决办法
6422
查看次数

使用 aws-cdk 进行本地开发

是否可以使用 aws-cdk 部署到 localstack?想过从无服务器切换到 cdk,但除了 aws SAM 之外找不到任何其他本地测试选项。

aws-cdk

12
推荐指数
1
解决办法
2708
查看次数