标签: aws-cdk

依赖不能跨越阶段边界

我有一个创建了 S3Bucket 的 ApplicationStack:

export class ApplicationStack extends Cdk.Stack {
  public readonly websiteBucket : S3.Bucket;
  constructor(scope: Construct, id: string, props: ApplicationStackProps) {
        super(scope, id, props);
   // Amazon S3 bucket to host the store  website artifact
    this.websiteBucket = new S3.Bucket(this, "eCommerceWebsite", {
      bucketName: `${props.websiteDomain}-${account}-${region}`,
      websiteIndexDocument: "index.html",
      websiteErrorDocument: "error.html",
      removalPolicy: Cdk.RemovalPolicy.DESTROY,
      autoDeleteObjects: true,
      accessControl: S3.BucketAccessControl.PRIVATE,
      encryption: S3.BucketEncryption.S3_MANAGED,
      publicReadAccess: false,
      blockPublicAccess: S3.BlockPublicAccess.BLOCK_ALL,
    });

    // Create a dummy export.
    // https://www.endoflineblog.com/cdk-tips-03-how-to-unblock-cross-stack-references
    this.exportValue(this.websiteBucket.bucketArn);
    ...
    ...
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我还定义了ApplicationStage上面包含的内容ApplicationStack

export class ApplicationStage …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cloudformation aws-codepipeline aws-cdk

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

CDK:如何使用仅在部署时已知的值配置“userData”?

我正在使用 CDK v2 和 Typescript。

我希望我的堡垒机将内容记录到 Cloudwatch。我想要写入的特定 LogGroup 也是通过 CDK 创建的(以便我可以自定义保留)。

如何利用有关其他 AWS 资源(这些资源也是由 CDK 创建)的知识来自定义 userData 脚本 - 所以我不知道它们的名称?

我的 CDK 内容是通过 CDK 管道部署的。

这是我的 CDK 脚本:

export class StoBastion extends cdk.Stack {

  constructor(scope: Construct, id: string, props: cdk.StackProps){
    super(scope, id, props);

    // actual name: DemoStage-StoBastion-StoBastionLogGroup5EEB3DE8-AdkaWy0ELoeF
    const logGroup = new LogGroup(this, "StoBastionLogGroup", {
      retention: RetentionDays.TWO_WEEKS,
    });

    let initScriptPath = 'lib/script/bastion-linux2-asg-provision.sh';
    const userDataText = readFileSync(initScriptPath, 'utf8');

    const autoScalingGroup = new AutoScalingGroup(this, 'StoAsg', {
      ...   
      userData: UserData.custom(userDataText),
    })    
    
  }
}
Run Code Online (Sandbox Code Playgroud)

userData …

amazon-ec2 aws-cdk

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

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

获取 EIP 作为 aws-cdk 生成的 VPC 定义的输出

有一个 vpc 定义

 const vpc = new ec2.Vpc(this, 'SomeVPC', {
        cidr: '10.0.0.0/16',
        maxAzs: 2,
 });
Run Code Online (Sandbox Code Playgroud)

它在底层为 NAT 网关创建 2 个 EIP

"SomeVPCPublicSubnet1EIP58E3D6C5": {
  "Type": "AWS::EC2::EIP",
  "Properties": {
    "Domain": "vpc"
  }
}
Run Code Online (Sandbox Code Playgroud)

如何获取对它们的引用并通过导出CfnOutput?像这样的东西:

new CfnOutput(this, "ExternalIPOutput", {value: <some magic call to get SomeVPCPublicSubnet1EIP58E3D6C5.ref()>})
Run Code Online (Sandbox Code Playgroud)

aws-cloudformation aws-cdk

0
推荐指数
1
解决办法
1808
查看次数

如何使用 OpenAPI 为 AWS API Gateway 配置 CORS?

我有一个用于通过 CDK 部署的 api 的 OpenAPI 规范。规范看起来像:

openapi: 3.0.1
info:
  title: My API
  description: My REST API with CORS enabled
  version: 0.1.0

x-amazon-apigateway-cors:
  allowOrigins:
    - "*"
  allowCredentials: true
  exposeHeaders:
    - "x-apigateway-header"
    - "x-amz-date"
    - "content-type"
  maxAge: 3600
  allowMethods:
    - "*"
  allowHeaders":
    - "x-apigateway-header"
    - "x-amz-date"
    - "content-type"
    - "Authorization"

components:
  securitySchemes:
    lambda:
      type: "apiKey"
      name: "Authorization"
      in: "header"
      x-amazon-apigateway-authtype: "custom"
      x-amazon-apigateway-authorizer:
        authorizerUri: "{{my-lambda-authorizer}}"
        authorizerResultTtlInSeconds: 300
        type: "token" 

paths:
  /user/{id}:
    get:
      summary: Get info of specified user.
      parameters:
        - in: path …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services aws-cloudformation aws-lambda aws-api-gateway aws-cdk

0
推荐指数
1
解决办法
2012
查看次数

“cdk”未被识别为内部或外部命令

我正在尝试使用AWS CDK& 作为第一步,我需要cdk按照以下链接安装 &

https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html

我尝试安装相同的

脚步。

  1. node --version=> v15.14.0
  2. npm --version => 7.11.2
  3. aws -version=> aws-cli/2.2.1 Python/3.8.8 Windows/10 exe/AMD64 提示/关闭`
  4. npm -g install typescript
  5. aws configure(AWS AccessKey、秘密、区域)
  6. npm -g install aws-cdk

现在关闭所有 cmd 实例并运行

cdk --version 
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误

“cdk”未被识别为内部或外部命令

然后我将以下cdk路径添加到环境变量中

C:\Users\kgn-dev\AppData\Roaming\npm\node_modules\aws-cdk\bin\cdk

还是同样的问题。

如何运行cdk命令?

我使用的是 Windows 10

amazon-web-services aws-cdk

0
推荐指数
1
解决办法
4140
查看次数

将CDK导出到cloudformation模板-python

我构建了一个成功的 python CDK 堆栈,我想将其导出为 cloudformation 模板,有人可以指导我吗?

我找到了下面的内容,但它不在 python 中 https://wp-kyoto.net/en/create-cloudformation-template-using-aws-cdk-typescript/

aws-cdk

0
推荐指数
1
解决办法
1087
查看次数

在AWS CDK中识别生产和开发环境的正确方法是什么?

我正在学习 AWS 云开发套件 (CDK)。

作为学习的一部分,我试图了解我应该如何正确处理生产和开发环境。

我知道AWS CDK提供了环境参数来允许将堆栈部署到特定帐户。

但是,如何为开发堆栈和生产堆栈提供特定的选项呢?AWS CDK 似乎没有默认提供它,或者我是否遗漏/误解了某些内容?

一个非常简单的例子是,我想要一个my-s3-bucket-dev为我的开发帐户调用的 S3 存储桶,以及一个my-s3-bucket-prod为我的生产帐户命名的 S3 存储桶。但是如何stage在 AWS CDK 中正确处理变量?

我知道我可以在cdk.json文件中添加参数,但同样,我不知道如何正确使用此文件来依赖于已部署的堆栈,即生产与开发。

感谢您的支持

aws-cdk

0
推荐指数
1
解决办法
1664
查看次数

(cdk + boto3): 在 CDK 应用程序中使用 boto3

我使用ENV=<enviornment name> cdk synth --profile <PROFILE_NAME> --all- 现在我想在我的 CDK 应用程序中创建 SSM 秘密参数来针对不同的环境运行 CDK。这应该只在脚手架期间发生,但需要 boto3,因为没有 CloudFormation 等效项。如何将 CDK 身份验证与 boto3 一起重复使用?我使用 CDK 和 boto3 进行 Python 开发,并使用 MFA。有任何想法吗?

#1 试用 - 使用缓存的凭据

无法工作,因为 CDK 未缓存凭据:(

我遇到了一些使用 boto3 检索缓存凭据的方法。我仍然需要与 CDK 一起使用的配置文件,否则我会收到错误消息botocore.exceptions.NoCredentialsError: Unable to locate credentials。有人知道如何获取代码中使用的 AWS CDK 配置文件吗?也许是解决问题的第一步。

# By default the cache path is ~/.aws/boto/cache
cli_cache = os.path.join(os.path.expanduser("~"), ".aws/cli/cache")

# Construct botocore session with cache
session = botocore.session.get_session()
session.get_component("credential_provider").get_provider(
    "assume-role"
).cache = credentials.JSONFileCache(cli_cache)

# Create boto3 client …
Run Code Online (Sandbox Code Playgroud)

boto3 aws-cdk

0
推荐指数
1
解决办法
2246
查看次数

lambda 创建事件事件的权限:PutEvents

我想要一个 lambda 创建 EventBridge 事件,但在调用 lambda 时出现此错误:

User: arn:aws:sts::120293923901:assumed-role/MyApiOrdersPostFunct-I1QOYC7P1R0Z/MyApiOrdersPostFunct-SJtAeYoiaguW is not authorized to perform: events:PutEvents on resource: arn:aws:events:eu-north-1:120293923901:event-bus/MyApiEventBus because no identity-based policy allows the events:PutEvents action
Run Code Online (Sandbox Code Playgroud)

我添加了政策但没有改变。

这是 lambda 调用 eventbridge。

User: arn:aws:sts::120293923901:assumed-role/MyApiOrdersPostFunct-I1QOYC7P1R0Z/MyApiOrdersPostFunct-SJtAeYoiaguW is not authorized to perform: events:PutEvents on resource: arn:aws:events:eu-north-1:120293923901:event-bus/MyApiEventBus because no identity-based policy allows the events:PutEvents action
Run Code Online (Sandbox Code Playgroud)

这是 CDK 配置。有两个策略(attachInlinePolicy、addToRolePolicy),因为我测试了这两个策略。


import { APIGatewayProxyHandler, APIGatewayProxyResult } from 'aws-lambda';
import { EventBridgeClient, PutEventsCommand } from '@aws-sdk/client-eventbridge';

const eventBridge = new EventBridgeClient({ region: 'eu-north-1' });

export const post: APIGatewayProxyHandler = …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-iam aws-lambda aws-cdk aws-event-bridge

0
推荐指数
1
解决办法
6860
查看次数

将入站规则添加到安全组 aws cdk

我正在使用AWS Opensearch (Elasticsearch 6.8)AWS lambda。当收到事件时,lambda 会将记录插入到 Elasticsearch 中。下面是elasticsearch的定义方式:

this.loggingES = new opensearch.Domain(this, 'LogsES', {
    version: opensearch.EngineVersion.ELASTICSEARCH_6_8,
    domainName: "app-logs-es",
    vpc: this.loggingVPC,
    zoneAwareness: {
        availabilityZoneCount: 3,
    },
    enforceHttps: true,
    nodeToNodeEncryption: true,
    encryptionAtRest: {
        enabled: true
    },
    capacity: {
        masterNodes: 3,
        dataNodes: 3,
    }
});
Run Code Online (Sandbox Code Playgroud)

现在发生的情况是,在同一个 VPC 下创建了两个安全组,一个用于 ES,另一个用于 lambda。lambda 无法连接到 Elasticsearch,因为 elasticsearch 安全组没有允许来自 lambda 安全组的流量的入站规则设置。

有没有办法,我可以:

  • 定义一个只有一个安全组且VPC内所有组件都可以互相访问的VPC?
  • 或者在 CDK 本身中,我可以在 Elasticsearch SG 中设置入站规则以允许来自 lambda SG 的流量。

amazon-web-services amazon-vpc typescript aws-security-group aws-cdk

0
推荐指数
1
解决办法
3385
查看次数

CDK 的 CodePipeline 或 CodeBuildStep 留下了 S3 存储桶,有没有办法自动删除它?

我正在使用 CDK 创建一个 CloudFormation 堆栈,代码大致如下:

export class PipelineStack extends cdk.Stack {
    constructor(scope: Construct, id: string, props: PipelineStackProps) {
        super(scope, id, props)
        new pipelines.CodePipeline(this, id, {
            pipelineName: id,
            synth: new pipelines.CodeBuildStep("Synth", {
                    input: pipelines.CodePipelineSource.connection(props.githubRepo, props.repoBranch, {connectionArn: props.repoConnectionArn}),
                    installCommands: ["npm install -g aws-cdk"],
                    commands: ["npm ci", "npx cdk synth"],
                },
            ),
        })
    }
}
Run Code Online (Sandbox Code Playgroud)

该堆栈创建了一个 S3 存储桶,当我删除该存储桶时,该堆栈不会随之删除。我搜索了选项,但找不到任何可以控制该行为的选项。是否可以将 S3 存储桶标记为cdk.RemovalPolicy.DESTROY或类似的内容?

amazon-web-services aws-cdk

0
推荐指数
1
解决办法
979
查看次数

Python AWS CDK自定义资源仅在第一次执行

我已将 Python 3.8 lambda 函数连接为 cdk 堆栈中的自定义资源。堆栈运行并触发 lambda 执行。然而,在堆栈的后续更新中,它不会执行任何调用 lambda 自定义资源的操作。

这是拉姆达

def lambda_handler(event, context):
   print('lambda executed')
   print('request: {}'.format(json.dumps(event)))
   return { 'PhysicalResourceId': "1234" }
Run Code Online (Sandbox Code Playgroud)

这就是它在堆栈中的连接方式

from constructs import Construct
from aws_cdk import (
    Stack,
    custom_resources as cr,
    aws_lambda as _lambda,
    CustomResource
)

cust_res_lambda = _lambda.Function(
   self, 'crLambda',
   runtime=_lambda.Runtime.PYTHON_3_8,
   code=_lambda.Code.from_asset('my-resources'),
   handler='lambda.lambda_handler',
   function_name='cr_Lambda'
)
        
res_provider = cr.Provider(
   self,'crProvider',
   on_event_handler= cust_res_lambda
)
            
CustomResource(self, 'cust_res',service_token= res_provider.service_token,properties={"curr_account":"4563563","curr_region":"us-east-1", "res_id": ''})
Run Code Online (Sandbox Code Playgroud)

为什么我第二次部署 cdk 堆栈时没有调用自定义资源 lambda?

python python-3.x aws-cdk aws-cdk-custom-resource

0
推荐指数
1
解决办法
1303
查看次数