我有一个创建了 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
我正在使用 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 …
https://docs.aws.amazon.com/cdk/api/v2/docs/aws-cdk-lib.aws_ec2.Instance.html
我找不到任何与之相关的东西。我想我需要使用 L1 构造?
有一个 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) 我有一个用于通过 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
我正在尝试使用AWS CDK& 作为第一步,我需要cdk按照以下链接安装 &
https://docs.aws.amazon.com/cdk/latest/guide/getting_started.html
我尝试安装相同的
脚步。
node --version=> v15.14.0npm --version => 7.11.2aws -version=> aws-cli/2.2.1 Python/3.8.8 Windows/10 exe/AMD64 提示/关闭`npm -g install typescriptaws configure(AWS AccessKey、秘密、区域)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
我构建了一个成功的 python CDK 堆栈,我想将其导出为 cloudformation 模板,有人可以指导我吗?
我找到了下面的内容,但它不在 python 中 https://wp-kyoto.net/en/create-cloudformation-template-using-aws-cdk-typescript/
我正在学习 AWS 云开发套件 (CDK)。
作为学习的一部分,我试图了解我应该如何正确处理生产和开发环境。
我知道AWS CDK提供了环境参数来允许将堆栈部署到特定帐户。
但是,如何为开发堆栈和生产堆栈提供特定的选项呢?AWS CDK 似乎没有默认提供它,或者我是否遗漏/误解了某些内容?
一个非常简单的例子是,我想要一个my-s3-bucket-dev为我的开发帐户调用的 S3 存储桶,以及一个my-s3-bucket-prod为我的生产帐户命名的 S3 存储桶。但是如何stage在 AWS CDK 中正确处理变量?
我知道我可以在cdk.json文件中添加参数,但同样,我不知道如何正确使用此文件来依赖于已部署的堆栈,即生产与开发。
感谢您的支持
我使用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) 我想要一个 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
我正在使用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 安全组的流量的入站规则设置。
amazon-web-services amazon-vpc typescript aws-security-group aws-cdk
我正在使用 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或类似的内容?
我已将 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?
aws-cdk ×13
amazon-ec2 ×2
aws-lambda ×2
amazon-iam ×1
amazon-vpc ×1
boto3 ×1
python ×1
python-3.x ×1
typescript ×1