我有这个 CDK 代码:
const logGroup = new LogGroup(this, 'MyAppLogGroup', {
logGroupName: 'myapp',
retention: RetentionDays.ONE_DAY
});
Run Code Online (Sandbox Code Playgroud)
当我运行 时cdk deploy,会在 CloudWatch 中创建日志组,但当我运行 时cdk destroy,它不会被删除。有什么方法可以启用此功能吗?
我正在尝试使用 CognitoUserPool 作为一个身份验证提供程序创建 Cognito FederatedIdentityPool。创建 UserPool 很简单:
const userPool = new cognito.CfnUserPool(this, 'MyCognitoUserPool')
const userPoolClient = new cognito.CfnUserPoolClient(this, 'RandomQuoteUserPoolClient', {
generateSecret: false,
userPoolId: userPool.userPoolId
});
Run Code Online (Sandbox Code Playgroud)
但是我不确定如何将其连接到身份池:
const identityPool = new cognito.CfnIdentityPool(this, 'MyIdentityPool', {
allowUnauthenticatedIdentities: false,
cognitoIdentityProviders: ?????
});
Run Code Online (Sandbox Code Playgroud)
根据IdentityProvider API 文档,它看起来有一个属性cognitoIdentityProviders,但是它接受一个cdk.Token/CognitoIdentityProviderProperty.
现在我尝试创建一个CognitoIdentityProviderProperty对象并传递它cognitoIdentityProviders: [{ clientId: userPoolClient.userPoolClientId }],但我收到以下异常:
1/2 | 09:48:35 | CREATE_FAILED | AWS::Cognito::IdentityPool | RandomQuoteIdentityPool Invalid Cognito Identity Provider (Service: AmazonCognitoIdentity; Status Code: 400; Error Code: InvalidParameterException; Request ID: 4d6d579a-6455-11e9-99a9-85159bc87779) …Run Code Online (Sandbox Code Playgroud) 我试图引用几个子网来创建 ec2 实例,但我有点卡住了。假设我有这个:
const vpc = new Vpc(this, 'gwc-vpc', {
cidr: "10.20.0.0/16",
maxAzs: 3,
subnetConfiguration: [
{
subnetType: SubnetType.PRIVATE,
name: 'gossipSubnet',
cidrMask: 24
},
{
subnetType: SubnetType.PRIVATE,
name: 'dbSubnet',
cidrMask: 24
},
{
subnetType: SubnetType.PUBLIC,
name: 'extSubnet',
cidrMask: 24
}
]
})
Run Code Online (Sandbox Code Playgroud)
例如,如何在 dbSubnet 中创建实例?更好的是,如果我想创建一个具有 2 个接口的 EC2 实例,每个接口位于不同的子网(dbSubnet 和 gossipSubnet)中,该怎么办?有任何想法吗?
谢谢!
我昨天刚开始玩 AWS CDK,发现了一些非常奇怪的东西。
首先,我将 TypeScript 用于我的 CDK 应用程序(我曾经cdk init --language typescript生成项目文件并尝试导入aws-ec2模块,所以这就是我所做的:
import cdk = require('@aws-cdk/core');
import ec2 = require('@aws-cdk/aws-ec2');
export class vpcStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
//.... all other codes go here....
Run Code Online (Sandbox Code Playgroud)
但是,以这种方式导入 aws-ec2 模块时,在尝试部署堆栈时出现此错误:
? Unable to compile TypeScript:
lib/cdk-type_script-stack.ts:2:22 - error TS2307: Cannot find module '@aws-cdk/aws-ec2'.
2 import ec2 = require('@aws-cdk/aws-ec2');
~~~~~~~~~~~~~~~~~~
Subprocess exited with error 1
Run Code Online (Sandbox Code Playgroud)
这很奇怪,因为这里的API 文档清楚地说明这是我应该在打字稿中导入aws-ec2模块的方式
我错过了什么吗?任何帮助将不胜感激,也提前致谢!
我正在尝试在单个堆栈中部署 S3 静态网站和 API 网关/lambda。
S3 静态站点中的 javascript 调用 lambda 来填充 HTML 列表,但它需要知道用于 lambda 集成的 API 网关 URL。
目前,我像这样生成了一个 RestApi ......
const handler = new lambda.Function(this, "TestHandler", {
runtime: lambda.Runtime.NODEJS_10_X,
code: lambda.Code.asset("build/test-service"),
handler: "index.handler",
environment: {
}
});
this.api = new apigateway.RestApi(this, "test-api", {
restApiName: "Test Service"
});
const getIntegration = new apigateway.LambdaIntegration(handler, {
requestTemplates: { "application/json": '{ "statusCode": "200" }' }
});
const apiUrl = this.api.url;
Run Code Online (Sandbox Code Playgroud)
但是在 cdk 部署上,apiUrl =
"https://${Token[TOKEN.39]}.execute-api.${Token[AWS::Region.4]}.${Token[AWS::URLSuffix.1]}/${Token[TOKEN.45]}/"
因此,直到静态站点需要该值之后,才会解析/生成 url。
如何计算/查找/获取 API 网关 URL 并更新 cdk …
我将 AWS CDK(使用 Python)用于在 Fargate 上运行的容器化应用程序。我想cdk deploy在 GitLab CI 进程中运行并将 git 标记作为环境变量传递,以替换在 Fargate 中运行的容器。我目前正在使用 CloudFormation ( aws cloudformation update-stack ...)做类似的事情。还有其他人以这种方式使用 AWS CDK 进行 CI/CD 吗?有没有更好的方法来做到这一点?
另外,我应该为这项工作使用什么作为我的基本图像?我在想我可以从 python 容器开始并安装节点,反之亦然。或者也许在某处我还没有找到预建的容器。
这是似乎运行良好的开始:
CDK:
image: python:3.8
stage: deploy
before_script:
- apt-get -qq update && apt-get -y install nodejs npm
- node -v
- npm i -g aws-cdk
- cd awscdk
- pip3 install -r requirements.txt
script:
- cdk diff
- cdk deploy --require-approval never
Run Code Online (Sandbox Code Playgroud)
编辑 2020-05-04:
CDK 可以在 期间构建 docker 镜像 …
amazon-web-services continuous-deployment gitlab gitlab-ci aws-cdk
我正在尝试为 CDK 构造编写一些测试,以验证定义为构造一部分的安全组规则。
构造看起来类似于以下内容。
export interface SampleConstructProps extends StackProps {
srcSecurityGroupId: string;
}
export class SampleConstruct extends Construct {
securityGroup: SecurityGroup;
constructor(scope: Construct, id: string, props: SampleConstructProps) {
super(scope, id, props);
// const vpc = Vpc.fromLookup(...);
this.securityGroup = new SecurityGroup(this, "SecurityGroup", {
vpc: vpc,
allowAllOutbound: true,
});
const srcSecurityGroupId = SecurityGroup.fromSecurityGroupId(stack, "SrcSecurityGroup", props.srcSecurityGroupId);
this.securityGroup.addIngressRule(srcSecurityGroup, Port.tcp(22));
}
}
Run Code Online (Sandbox Code Playgroud)
我想编写一个类似于以下内容的测试。
test("Security group config is correct", () => {
const stack = new Stack();
const srcSecurityGroupId = "id-123";
const testConstruct = …Run Code Online (Sandbox Code Playgroud) 当使用需要 IAM 策略更新的 CDK 部署任何更改时,您会收到以下消息:
This deployment will make potentially sensitive changes according to your current security approval level
接下来是要进行的策略更改列表,然后是确认对话框。总的来说,我认为这是一件好事,但不幸的是它使自动化部署变得困难。
是否可以设置隐藏标志或环境变量来跳过此确认?就像 Terraform 的旗帜一样-auto-approve。
是否可以在同一个项目中拥有两个 CDK 应用程序,如下所示:
from aws_cdk import core
from stack1 import Stack1
from stack2 import Stack2
app1 = core.App()
Stack1(app1, "CDK1")
app1.synth()
app2 = core.App()
Stack2(app2, "CDK2")
app2.synth()
Run Code Online (Sandbox Code Playgroud)
并部署它们?同步/异步?
是否可以在另一个应用程序中引用一个应用程序中的某些资源?
我正在尝试做一些看起来相当合乎逻辑且直接的事情。
我正在使用 AWS CDK 来配置 ecr 存储库:
repository = ecr.Repository(
self,
id="Repo",
repository_name=ecr_repo_name,
removal_policy=core.RemovalPolicy.DESTROY
)
Run Code Online (Sandbox Code Playgroud)
然后,我有一个 Dockerfile,它位于我的项目的根目录中,我试图将其推送到部署中的同一个 ECR 存储库。
我在相同的服务代码中执行此操作:
assets = DockerImageAsset(
self,
"S3_text_image",
directory=str(Path(__file__).parent.parent),
repository_name=ecr_repo_name
)
Run Code Online (Sandbox Code Playgroud)
部署正常并继续进行,并创建了 ECR 存储库,但映像被推送到默认位置aws-cdk/assets
如何让部署将我的 Dockerfile 发送到我希望它驻留的确切 ECR 存储库?
aws-cdk ×10
amazon-ec2 ×1
amazon-ecr ×1
aws-lambda ×1
docker ×1
gitlab ×1
gitlab-ci ×1
module ×1