-
Notifications
You must be signed in to change notification settings - Fork 4k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Elastic Beanstalk deploy action for CodePipeline #2516
Comments
Thanks for bringing this to our attention @kianris . We're not planning to work on Elastic BeanStalk in the very near future, but it's good to have this on our backlog. Thanks, |
+1 for this feature. Is there any workaround? How to achieve Elastic Beanstalk as deployment provider using CDK? |
To unblock yourself, you can create your own implementation of import codepipeline = require('@aws-cdk/aws-codepipeline');
import events = require('@aws-cdk/aws-events');
import { Construct } from '@aws-cdk/core';
export interface ElasticBeanStalkDeployActionProps extends codepipeline.CommonAwsActionProps {
applicationName: string;
environmentName: string;
}
export class ElasticBeanStalkDeployAction implements codepipeline.IAction {
public readonly actionProperties: codepipeline.ActionProperties;
private readonly props: ElasticBeanStalkDeployActionProps;
constructor(props: ElasticBeanStalkDeployActionProps) {
this.actionProperties = {
...props,
provider: 'ElasticBeanstalk',
category: codepipeline.ActionCategory.DEPLOY,
artifactBounds: { minInputs: 1, maxInputs: 1, minOutputs: 0, maxOutputs: 0 },
};
this.props = props;
}
public bind(_scope: Construct, _stage: codepipeline.IStage, _options: codepipeline.ActionBindOptions):
codepipeline.ActionConfig {
return {
configuration: {
ApplicationName: this.props.applicationName,
EnvironmentName: this.props.environmentName,
},
};
}
public onStateChange(_name: string, _target?: events.IRuleTarget, _options?: events.RuleProps): events.Rule {
throw new Error('unsupported');
}
} EDIT: actually, since the Action has an input, this needs to be something like: import codepipeline = require('@aws-cdk/aws-codepipeline');
import events = require('@aws-cdk/aws-events');
import { Construct } from '@aws-cdk/core';
export interface ElasticBeanStalkDeployActionProps extends codepipeline.CommonAwsActionProps {
applicationName: string;
environmentName: string;
input: codepipeline.Artifact;
}
export class ElasticBeanStalkDeployAction implements codepipeline.IAction {
public readonly actionProperties: codepipeline.ActionProperties;
private readonly props: ElasticBeanStalkDeployActionProps;
constructor(props: ElasticBeanStalkDeployActionProps) {
this.actionProperties = {
...props,
provider: 'ElasticBeanstalk',
category: codepipeline.ActionCategory.DEPLOY,
artifactBounds: { minInputs: 1, maxInputs: 1, minOutputs: 0, maxOutputs: 0 },
inputs: [props.input],
};
this.props = props;
}
public bind(_scope: Construct, _stage: codepipeline.IStage, options: codepipeline.ActionBindOptions):
codepipeline.ActionConfig {
options.bucket.grantRead(options.role);
return {
configuration: {
ApplicationName: this.props.applicationName,
EnvironmentName: this.props.environmentName,
},
};
}
public onStateChange(_name: string, _target?: events.IRuleTarget, _options?: events.RuleProps): events.Rule {
throw new Error('unsupported');
}
} |
I don't see an option to vote, so +1 for this feature. |
after adding own implementation of IAction. I am getting below error in deploy step of my pipeline
I am trying to add new role with assume role but my aws account user is not authorized to assume role. |
What you're probably missing is, in your public bind(scope: Construct, stage: codepipeline.IStage, options: codepipeline.ActionBindOptions):
codepipeline.ActionConfig {
options.role.addToPolicy(new iam.PolicyStatement({
resources: ['*'],
actions: ['elasticbeanstalk:CreateApplicationVersion'],
}));
} , similarly to what happens in different actions, example: aws-cdk/packages/@aws-cdk/aws-codepipeline-actions/lib/codedeploy/server-deploy-action.ts Lines 44 to 47 in b90905d
|
Thanks @skinny85 this helped me resolve access issue. |
Yeah. Adding permission solved my problem as well. I needed to add these premission as codepipeline deploy stage needed it to deploy to Elastic Beanstalk. This worked for me. options.role.addToPolicy(new iam.PolicyStatement({
resources: ['*'],
actions: [
'elasticbeanstalk:*',
'autoscaling:*',
'elasticloadbalancing:*',
'rds:*',
's3:*',
'cloudwatch:*',
'cloudformation:*'
],
})); |
I tried implement in .net, but doesn't work.
using Amazon.CDK;
using Amazon.CDK.AWS.CodePipeline;
using Amazon.CDK.AWS.Events;
using Amazon.CDK.AWS.IAM;
namespace CdkCicd
{
public class ElasticBeanStalkDeployAction : IAction
{
public IActionProperties ActionProperties { get; set; }
private readonly ElasticBeanStalkDeployActionProps Props;
public ElasticBeanStalkDeployAction(ElasticBeanStalkDeployActionProps props)
{
this.ActionProperties = new ActionProperties()
{
Provider = "ElasticBeanstalk",
Category = ActionCategory.DEPLOY,
ArtifactBounds = new ActionArtifactBounds()
{
MinInputs = 1,
MaxInputs = 1,
MinOutputs = 0,
MaxOutputs = 0
},
Inputs = new[] { props.Input }
};
this.Props = props;
}
public IActionConfig Bind(Construct scope, IStage stage, IActionBindOptions options)
{
options.Bucket.GrantRead(options.Role);
options.Role.AddToPrincipalPolicy(new PolicyStatement(new PolicyStatementProps()
{
Resources = new [] { "*" },
Actions = new[]
{
"elasticbeanstalk:*",
"autoscaling:*",
"elasticloadbalancing:*",
"rds:*",
"s3:*",
"cloudwatch:*",
"cloudformation:*"
},
}));
return new ActionConfig()
{
Configuration = new
{
ApplicationName = this.Props.ApplicationName,
EnvironmentName = this.Props.EnvironmentName,
}
};
}
public Rule OnStateChange(string name, IRuleTarget target = null, IRuleProps options = null)
{
throw new System.NotImplementedException();
}
}
}
using Amazon.CDK.AWS.CodePipeline;
namespace CdkCicd
{
public class ElasticBeanStalkDeployActionProps : CommonAwsActionProps
{
public string ApplicationName { get; set; }
public string EnvironmentName { get; set; }
public Artifact_ Input { get; set; }
}
}
var pipeline = new Pipeline(this, "cdkcicdstackPipeline", new PipelineProps()
{
PipelineName = "cdkcicdstack",
Stages = new[]
{
new Amazon.CDK.AWS.CodePipeline.StageProps()
{
StageName = "Source",
Actions = new []
{
new S3SourceAction(new S3SourceActionProps()
{
Bucket = bucket,
BucketKey = "Teste.zip",
Output = new Artifact_("SourceArtifact"),
ActionName = "Source"
})
}
},
new Amazon.CDK.AWS.CodePipeline.StageProps()
{
StageName = "Deploy",
Actions = new []
{
new ElasticBeanStalkDeployAction(new ElasticBeanStalkDeployActionProps()
{
Input = new Artifact_("SourceArtifact"),
ActionName = "Deploy",
ApplicationName = "AuthService",
EnvironmentName = "AuthService-Testing2"
})
}
},
},
});
|
Also would like to see a .net implementation of this workaround if anyone can translate the typescript example to C# |
@nsquires413 I try translate, but doesn't work |
Yeah I get the same |
require this feature +1 |
i added also the export interface ElasticBeanstalkDeployActionProps {
ebsApplicationName: string;
ebsEnvironmentName: string;
input: Artifact;
role?: IRole;
} then you can pass in the role from the pipeline itself pipeline.addStage({
stageName: 'Deploy',
actions: [
new ElasticBeanstalkDeployAction({
ebsEnvironmentName: elasticBeanstalk.environment.environmentName!!,
ebsApplicationName: elasticBeanstalk.application.applicationName!!,
input: buildOutput,
role: pipeline.role,
}),
],
}); while adding the pipeline.role.addManagedPolicy(ManagedPolicy.fromAwsManagedPolicyName('AWSElasticBeanstalkFullAccess')); So you dont need to do this @Jaimin-Patel30 options.role.addToPolicy(new iam.PolicyStatement({
resources: ['*'],
actions: [
'elasticbeanstalk:*',
'autoscaling:*',
'elasticloadbalancing:*',
'rds:*',
's3:*',
'cloudwatch:*',
'cloudformation:*'
],
})); and it will not create another policy in IAM. nothing too big but might help someone, i initially thought the pipline role would be injected in the |
I also was trying to implement this in python but didn't have luck. Do you guys have an estimate for when the Elastic Beanstalk Deploy Action might be available? |
Not really @rangat , sorry. What was the problem that you encountered? |
|
@kafka399 the main problem is that we don't have an L2 Construct Library for BeanStalk, which makes it challenging to support a good CodePipeline Action abstraction for it. I'd be glad to help someone with guidance on the matter, if they wanted to submit us a PR adding this feature. |
Hmm, you're right @Nemanjalj66 . I tried this: using Amazon.CDK;
using Amazon.CDK.AWS.Cognito;
using Amazon.CDK.AWS.IoT;
using Amazon.CDK.AWS.Route53;
using Amazon.CDK.AWS.CodeBuild;
using Amazon.CDK.AWS.CodeCommit;
using Amazon.CDK.AWS.CodePipeline;
using Amazon.CDK.AWS.CodePipeline.Actions;
namespace CsharpCognitoL1
{
public class ElasticBeanStalkDeployActionProps : CommonAwsActionProps
{
public string ApplicationName;
public string EnvironmentName;
public Artifact_ Input;
}
public class ElasticBeanStalkDeployAction : Amazon.CDK.AWS.CodePipeline.Actions.Action
{
private readonly ElasticBeanStalkDeployActionProps props;
public ElasticBeanStalkDeployAction(ElasticBeanStalkDeployActionProps props) : base(new ActionProperties
{
Provider = "ElasticBeanstalk",
Category = ActionCategory.DEPLOY,
ArtifactBounds = new ActionArtifactBounds { MaxInputs = 1, MinInputs = 1, MinOutputs = 0, MaxOutputs = 0 },
Inputs = new Artifact_[] { props.Input },
Role = props.Role,
ActionName = props.ActionName,
RunOrder = props.RunOrder,
VariablesNamespace = props.VariablesNamespace,
Owner = "Custom",
})
{
this.props = props;
}
protected override IActionConfig Bound(Construct scope, IStage stage, IActionBindOptions options)
{
options.Bucket.GrantRead(options.Role);
return new ActionConfig {
Configuration = new
{
ApplicationName = this.props.ApplicationName,
EnvironmentName = this.props.EnvironmentName,
},
};
}
}
public class CsharpCognitoL1Stack : Stack
{
internal CsharpCognitoL1Stack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
{
var sourceOutput = new Artifact_();
var buildOutput = new Artifact_();
new Pipeline(this, "Pipeline", new PipelineProps
{
Stages = new Amazon.CDK.AWS.CodePipeline.StageProps[]
{
new Amazon.CDK.AWS.CodePipeline.StageProps
{
StageName = "Source",
Actions = new IAction[]
{
new CodeCommitSourceAction(new CodeCommitSourceActionProps
{
ActionName = "Source",
Output = sourceOutput,
Repository = Repository.FromRepositoryName(this, "Repo", "my-repo"),
}),
},
},
new Amazon.CDK.AWS.CodePipeline.StageProps
{
StageName = "Build",
Actions = new IAction[]
{
new CodeBuildAction(new CodeBuildActionProps
{
ActionName = "Build",
Input = sourceOutput,
Outputs = new Artifact_[] { buildOutput },
Project = Project.FromProjectName(this, "Project", "my-build"),
}),
},
},
new Amazon.CDK.AWS.CodePipeline.StageProps
{
StageName = "Deploy_Application",
Actions = new IAction[]
{
new ElasticBeanStalkDeployAction(new ElasticBeanStalkDeployActionProps
{
ActionName = "Deploy",
ApplicationName = "applicationName",
EnvironmentName = "environmentName",
Input = buildOutput,
}),
},
},
},
});
}
}
} But it fails with the error:
I've raised an error to the JSII project: aws/jsii#2870, let's see what they say. |
Thank you for your answer @skinny85 ! |
Yeah, you're right @Nemanjalj66, I was able to reproduce that error... this looks like another JSII bug, unfortunately 😕. |
Apparently, you need to extend the However, I have tried it, and I still didn't work: using System;
using Amazon.JSII.Runtime.Deputy;
using Amazon.CDK;
using Amazon.CDK.AWS.Cognito;
using Amazon.CDK.AWS.IoT;
using Amazon.CDK.AWS.Route53;
using Amazon.CDK.AWS.CodeBuild;
using Amazon.CDK.AWS.CodeCommit;
using Amazon.CDK.AWS.CodePipeline;
using Amazon.CDK.AWS.CodePipeline.Actions;
using Amazon.CDK.AWS.Events;
namespace CsharpCognitoL1
{
public class ElasticBeanStalkDeployActionProps : CommonAwsActionProps
{
public string ApplicationName;
public string EnvironmentName;
public Artifact_ Input;
}
public class ElasticBeanStalkDeployAction : DeputyBase, IAction
{
private readonly ElasticBeanStalkDeployActionProps props;
public ElasticBeanStalkDeployAction(ElasticBeanStalkDeployActionProps props)
{
this.props = props;
}
public IActionProperties ActionProperties => new ActionProperties()
{
Provider = "ElasticBeanstalk",
Category = ActionCategory.DEPLOY,
ArtifactBounds = new ActionArtifactBounds() { MaxInputs = 1, MinInputs = 1, MinOutputs = 0, MaxOutputs = 0 },
Inputs = new Artifact_[] { props.Input },
Role = props.Role,
ActionName = props.ActionName,
RunOrder = props.RunOrder,
VariablesNamespace = props.VariablesNamespace,
Owner = "Custom"
};
public IActionConfig Bind(Construct scope, IStage stage, IActionBindOptions options)
{
options.Bucket.GrantRead(options.Role);
return new ActionConfig() {
Configuration = new
{
ApplicationName = props.ApplicationName,
EnvironmentName = props.EnvironmentName,
}
};
}
public Rule OnStateChange(string name, IRuleTarget target = null, IRuleProps options = null)
{
throw new Exception("Unsupported");
}
}
public class CsharpCognitoL1Stack : Stack
{
internal CsharpCognitoL1Stack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
{
var sourceOutput = new Artifact_();
var buildOutput = new Artifact_();
new Pipeline(this, "Pipeline", new PipelineProps
{
Stages = new Amazon.CDK.AWS.CodePipeline.StageProps[]
{
new Amazon.CDK.AWS.CodePipeline.StageProps
{
StageName = "Source",
Actions = new IAction[]
{
new CodeCommitSourceAction(new CodeCommitSourceActionProps
{
ActionName = "Source",
Output = sourceOutput,
Repository = Repository.FromRepositoryName(this, "Repo", "my-repo"),
}),
},
},
new Amazon.CDK.AWS.CodePipeline.StageProps
{
StageName = "Build",
Actions = new IAction[]
{
new CodeBuildAction(new CodeBuildActionProps
{
ActionName = "Build",
Input = sourceOutput,
Outputs = new Artifact_[] { buildOutput },
Project = Project.FromProjectName(this, "Project", "my-build"),
}),
},
},
new Amazon.CDK.AWS.CodePipeline.StageProps
{
StageName = "Deploy_Application",
Actions = new IAction[]
{
new ElasticBeanStalkDeployAction(new ElasticBeanStalkDeployActionProps
{
ActionName = "Deploy",
ApplicationName = "applicationName",
EnvironmentName = "environmentName",
Input = buildOutput,
}),
},
},
},
});
}
}
} Error:
|
Thank you again for the answer! I have tried it in my implementation and it also fails with the same exception as you mentioned. |
As a workaround for your .NET issue, you can fallback to raw overrides on your pipeline like this CfnPipeline cfnPipeline = pipeline.Node.DefaultChild as CfnPipeline;
cfnPipeline.AddPropertyOverride("Stages.2", new Dictionary<string, object>
{
{ "Name", "Deploy" },
{ "Actions", new object[]
{
new Dictionary<string, object>
{
{ "Name", "Deploy" },
{ "ActionTypeId", new Dictionary<string, object>
{
{ "Category", "Deploy" },
{ "Owner", "AWS" },
{ "Provider", "ElasticBeanstalk" },
{ "Version", "1" }
}
},
{ "Configuration", new Dictionary<string, string>()
{
{"ApplicationName", "<YOUR_BEANSTALK_APPLICATION_NAME>" },
{"EnvironmentName", "<YOUR_BEANSTALK_ENVIRONMENT_NAME>" }
}
},
{ "InputArtifacts", new object[]
{
new Dictionary<string, string>{
{ "Name", "<YOUR_INPUT_ARTIFACT_NAME>" }
}
}
},
{ "Namespace", "DeployVariables" }
}
}
}
}); |
The culprit is likely with this type of syntax: public IActionConfig Bind(Construct scope, IStage stage, IActionBindOptions options)
{
options.Bucket.GrantRead(options.Role);
return new ActionConfig() {
Configuration = new // <-- HERE
{
ApplicationName = props.ApplicationName,
EnvironmentName = props.EnvironmentName,
}
};
} Returning an anonymous object here ( |
This is brilliant @RomainMuller! I can confirm switching to dictionary works, like in this code: using System.Collections.Generic;
using Amazon.CDK;
using Amazon.CDK.AWS.CodeBuild;
using Amazon.CDK.AWS.CodeCommit;
using Amazon.CDK.AWS.CodePipeline;
using Amazon.CDK.AWS.CodePipeline.Actions;
public class ElasticBeanStalkDeployActionProps : CommonAwsActionProps
{
public string ApplicationName;
public string EnvironmentName;
public Artifact_ Input;
}
public class ElasticBeanStalkDeployAction : Amazon.CDK.AWS.CodePipeline.Actions.Action
{
private readonly ElasticBeanStalkDeployActionProps props;
public ElasticBeanStalkDeployAction(ElasticBeanStalkDeployActionProps props) : base(new ActionProperties
{
Provider = "ElasticBeanstalk",
Category = ActionCategory.DEPLOY,
ArtifactBounds = new ActionArtifactBounds { MaxInputs = 1, MinInputs = 1, MinOutputs = 0, MaxOutputs = 0 },
Inputs = new Artifact_[] { props.Input },
Role = props.Role,
ActionName = props.ActionName,
RunOrder = props.RunOrder,
VariablesNamespace = props.VariablesNamespace,
Owner = "Custom",
})
{
this.props = props;
}
protected override IActionConfig Bound(Construct scope, IStage stage, IActionBindOptions options)
{
options.Bucket.GrantRead(options.Role);
return new ActionConfig {
Configuration = new Dictionary<string, object>
{
{ "ApplicationName", this.props.ApplicationName },
{ "EnvironmentName", this.props.EnvironmentName },
},
};
}
}
public class MyStack : Stack
{
internal MyStack(Construct scope, string id, IStackProps props = null) : base(scope, id, props)
{
var sourceOutput = new Artifact_();
var buildOutput = new Artifact_();
new Pipeline(this, "Pipeline", new PipelineProps
{
Stages = new Amazon.CDK.AWS.CodePipeline.StageProps[]
{
new Amazon.CDK.AWS.CodePipeline.StageProps
{
StageName = "Source",
Actions = new IAction[]
{
new CodeCommitSourceAction(new CodeCommitSourceActionProps
{
ActionName = "Source",
Output = sourceOutput,
Repository = Repository.FromRepositoryName(this, "Repo", "my-repo"),
}),
},
},
new Amazon.CDK.AWS.CodePipeline.StageProps
{
StageName = "Build",
Actions = new IAction[]
{
new CodeBuildAction(new CodeBuildActionProps
{
ActionName = "Build",
Input = sourceOutput,
Outputs = new Artifact_[] { buildOutput },
Project = Project.FromProjectName(this, "Project", "my-build"),
}),
},
},
new Amazon.CDK.AWS.CodePipeline.StageProps
{
StageName = "Deploy_Application",
Actions = new IAction[]
{
new ElasticBeanStalkDeployAction(new ElasticBeanStalkDeployActionProps
{
ActionName = "Deploy",
ApplicationName = "applicationName",
EnvironmentName = "environmentName",
Input = buildOutput,
}),
},
},
},
});
}
} |
have you implemented now ? |
+1 for this feature. Hitting a roadblock trying to add a deployment stage to my pipeline. Is there anyway to do this in vanilla JS? const deployAction = {
actionName: 'DeployAction',
provider: 'ElasticBeanstalk',
category: ActionCategory.DEPLOY,
artifactBounds: { minInputs: 1, maxInputs: 1, minOutputs: 0, maxOutputs: 0 },
applicationName: environment.environmentName,
environmentName: environment.applicationName
};
deployStage.addAction(deployAction); Returns error:
|
@A-ndy-git you're missing the Also... use TS, seriously 😜. It will make your life so much easier. At least use it until you make this work, and then convert to JS after. But I have a feeling, after you see how much better is CDK in TS than in JS, you won't want to go back 😉. |
@skinny85 thanks for your quick reply :) - as much as I'd love to use TS, this would involve migrating my entire CDK project which I don't want to do (at this stage). EDIT - got there in the end, heres how its done: import { ActionBindOptions, ActionCategory, ActionConfig, ActionProperties, Artifact, IAction, IStage } from '@aws-cdk/aws-codepipeline';
import { IRuleTarget, Rule, RuleProps } from '@aws-cdk/aws-events';
import { IRole } from '@aws-cdk/aws-iam';
import { Construct } from '@aws-cdk/core';
export interface ElasticBeanstalkDeployActionProps {
id: string;
ebsApplicationName: string;
ebsEnvironmentName: string;
input: Artifact;
role?: IRole;
}
export class ElasticBeanstalkDeployAction implements IAction {
readonly actionProperties: ActionProperties;
private readonly props: ElasticBeanstalkDeployActionProps;
constructor(props: ElasticBeanstalkDeployActionProps) {
this.actionProperties = {
...props,
category: ActionCategory.DEPLOY,
actionName: `${props.id}-elasticbeanstalk-deploy-action`,
owner: 'AWS',
provider: 'ElasticBeanstalk',
artifactBounds: {
minInputs: 1,
maxInputs: 1,
minOutputs: 0,
maxOutputs: 0,
},
inputs: [props.input],
};
this.props = props;
}
bind(scope: Construct, stage: IStage, options: ActionBindOptions): ActionConfig {
options.bucket.grantRead(options.role);
return {
configuration: {
ApplicationName: this.props.ebsApplicationName,
EnvironmentName: this.props.ebsEnvironmentName,
},
};
}
onStateChange(name: string, target?: IRuleTarget, options?: RuleProps): Rule {
throw new Error('not supported');
}
} And use it via: const deployAction = new ElasticBeanstalkDeployAction({
id: 'your-app-name',
ebsEnvironmentName: environment.environmentName,
ebsApplicationName: application.applicationName,
input: sourceOutput,
role: pipeline.role,
});
deployStage.addAction(deployAction); |
This issue has received a significant amount of attention so we are automatically upgrading its priority. A member of the community will see the re-prioritization and provide an update on the issue. |
Add ElasticBeanstalk Deploy action for CodePipeline. closes #2516 ---- ### All Submissions: * [ ] Have you followed the guidelines in our [Contributing guide?](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) ### Adding new Unconventional Dependencies: * [ ] This PR adds new unconventional dependencies following the process described [here](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md/#adding-new-unconventional-dependencies) ### New Features * [ ] Have you added the new feature to an [integration test](https://github.com/aws/aws-cdk/blob/main/INTEGRATION_TESTS.md)? * [ ] Did you use `yarn integ` to deploy the infrastructure and generate the snapshot (i.e. `yarn integ` without `--dry-run`)? *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
|
…22135) Add ElasticBeanstalk Deploy action for CodePipeline. closes aws#2516 ---- ### All Submissions: * [ ] Have you followed the guidelines in our [Contributing guide?](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) ### Adding new Unconventional Dependencies: * [ ] This PR adds new unconventional dependencies following the process described [here](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md/#adding-new-unconventional-dependencies) ### New Features * [ ] Have you added the new feature to an [integration test](https://github.com/aws/aws-cdk/blob/main/INTEGRATION_TESTS.md)? * [ ] Did you use `yarn integ` to deploy the infrastructure and generate the snapshot (i.e. `yarn integ` without `--dry-run`)? *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
…22135) Add ElasticBeanstalk Deploy action for CodePipeline. closes aws#2516 ---- ### All Submissions: * [ ] Have you followed the guidelines in our [Contributing guide?](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md) ### Adding new Unconventional Dependencies: * [ ] This PR adds new unconventional dependencies following the process described [here](https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md/#adding-new-unconventional-dependencies) ### New Features * [ ] Have you added the new feature to an [integration test](https://github.com/aws/aws-cdk/blob/main/INTEGRATION_TESTS.md)? * [ ] Did you use `yarn integ` to deploy the infrastructure and generate the snapshot (i.e. `yarn integ` without `--dry-run`)? *By submitting this pull request, I confirm that my contribution is made under the terms of the Apache-2.0 license*
A new software.amazon.awscdk.services.codepipeline.Action for deploys to Elastic Beanstalk. Requires:
The text was updated successfully, but these errors were encountered: