#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#

# TODO: remove AWS_ENDPOINT_URL and use FINERACT_AWS_ENDPOINT
AWS_EC2_METADATA_DISABLED=true
AWS_ENDPOINT_URL=http://localstack:4666
#FINERACT_AWS_ENDPOINT=http://localstack:4666
FINERACT_AWS_REGION_STATIC=us-east-1
FINERACT_AWS_CREDENTIALS_INSTANCE_PROFILE=false
#FINERACT_AWS_CREDENTIALS_ACCESS_KEY=localstack
#FINERACT_AWS_CREDENTIALS_SECRET_KEY=localstack
FINERACT_AWS_CREDENTIALS_PROFILE_NAME=default
FINERACT_AWS_CREDENTIALS_PROFILE_PATH=/etc/aws/credentials
FINERACT_AUTOCONFIGURE_EXCLUDE=
