-
Notifications
You must be signed in to change notification settings - Fork 32
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
Integrate with localstack
for testing AWS deployments
#145
Integrate with localstack
for testing AWS deployments
#145
Conversation
Important Auto Review SkippedAuto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the To trigger a single review, invoke the Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (invoked as PR comments)
Additionally, you can add CodeRabbit Configration File (
|
localstack
for testing AWS deployments
@marwan37 you'll need to add a step to the
Otherwise it won't run with PRs etc.. |
Update: I kept encountering failures with the new workflow file during the - name: Output Stack YAML Path
id: set_output
run: |
OUTPUT=$(terraform-bin output -raw stack-yaml-path)
echo "stack_yaml_path=$OUTPUT" >> $GITHUB_OUTPUT
working-directory: src/mlstacks/terraform/aws-modular
env:
terraform_wrapper: false An adjustment was also necessary to use an absolute path in the test script: - name: Run Tests to Verify Resource Provisioning
run: |
STACK_YAML_PATH="${{ steps.set_output.outputs.stack_yaml_path }}"
ABSOLUTE_PATH="${GITHUB_WORKSPACE}/src/mlstacks/terraform/aws-modular/${STACK_YAML_PATH}"
../../../../tests/integration/aws-modular/verify_stack.sh "$ABSOLUTE_PATH"
working-directory: src/mlstacks/terraform/aws-modular Finally, I simplified the integration test setup by replacing localstack-aws-integration-test:
uses: ./.github/workflows/aws-integration-test.yml
secrets: inherit Neither Python nor a specific OS is needed to run the test, and it can run concurrently with others. |
@marwan37 seems like one of the scripts needs to be made an executable? At least that seems to be the failure? |
Yep! Fixed and repushed. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looking good now, and passing, too. Might be worth to add a few words and a link to info about the use of an override file in the README.
https://developer.hashicorp.com/terraform/language/files/override
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
A few more small suggestions.
Co-authored-by: Alex Strick van Linschoten <[email protected]>
Co-authored-by: Alex Strick van Linschoten <[email protected]>
Co-authored-by: Alex Strick van Linschoten <[email protected]>
Co-authored-by: Alex Strick van Linschoten <[email protected]>
Following @strickvl's suggestion, removed the terraform destroy and related cleanup commands. These steps are unnecessary for our ephemeral instances and do not impact the repo's state. Co-authored-by: Alex Strick van Linschoten <[email protected]>
@marwan37 thanks as always for your contribution! |
Describe changes
I implemented a LocalStack integration for MLStacks to create a local testing environment for AWS deployments, addressing the objectives outlined in issue #136. This includes setting up LocalStack to emulate AWS services (e.g., S3, DynamoDB), creating a test environment within
tests/integration
for running integration tests, and adding a new workflow file in.github/workflows
to execute these tests. The aim was to enhance development efficiency and reliability by allowing local testing in a simulated AWS environment.Pre-requisites
Please ensure you have done the following:
accordingly.
develop
and the open PR is targetingdevelop
. If your branch wasn't based on develop readContribution guide on rebasing branch to develop.
Types of changes
change)
Detailed Description
Following the task description, I developed a POC using LocalStack to emulate AWS services relevant to MLStacks deployments, focusing on S3 and DynamoDB for
aws-remote-state
, and S3 with Skypilot enabled foraws-modular
. This involved:tests/integration
with subdirectories foraws-modular
andaws-remote-state
, encapsulating all LocalStack integration test configurations..tfvars
files and scripts (verify_stack.sh
) to dynamically configure and verify AWS resources provisioned via LocalStack.aws-integration-test.yml
) to automate setup, execution, and cleanup of LocalStack integration tests.docker-compose.localstack.yml
, not utilized in the workflow file, but available for developers to use and customize for quick LocalStack setup.tests/integration
directory to provide documentation for setting up, executing, and understanding the LocalStack integration tests within MLStacks.I propose integrating the
aws-integration-test.yml
workflow into the mainci.yml
, like this:This allows us to run LocalStack integration tests before proceeding with AWS-specific tests, and without cluttering the main CI pipeline.
Additional Context
This integration aims to provide a framework for future testing enhancements, and serves as a basis for LocalStack-based tests within MLStacks.
Note: This integration does not include EKS based services due to the limitations of LocalStack's Community Edition, as discussed with @strickvl. Future enhancements will be revisited upon the completion of issue #140.