【发布时间】:2021-07-24 01:15:15
【问题描述】:
我有一个非常简单的烧瓶项目,只有一个端点,我可以使用 Elastic Beanstalk 将其部署到 AWS 中
唯一暴露的端点是 S3 检索 csv 文件并以原始格式发布数据,此配置工作正常,所以我知道弹性 beanstalk 的角色和权限可以正常工作以到达 S3 存储桶。
from flask import Flask
from flask_restful import Resource, Api
import io
import boto3
import pandas as pd
application = Flask(__name__)
api = Api(application)
s3 = boto3.resource('s3')
bucket = 'my_bucket'
key = 'my_file.csv'
class Home(Resource):
def get(self):
try:
s3 = boto3.resource('s3')
obj = s3.Object(bucket, key).get()['Body']
data = pd.read_csv(io.BytesIO(obj.read()))
print("S3 Object loaded.")
except:
print("S3 Object could not be opened.")
print(data)
csv = data.to_csv(index=False)
return csv
#End points definition and application raise up
api.add_resource(Home, '/')
if __name__ == '__main__':
application.run(host='0.0.0.0')
现在我正在尝试将其移动到容器中,因此我创建了一个 Dockerfile 来封装最小的应用程序:
# syntax=docker/dockerfile:1
FROM python:3.8-slim-buster
WORKDIR /app
COPY requirements.txt requirements.txt
RUN pip3 install -r requirements.txt
COPY . .
CMD [ "python3", "-m" , "flask", "run", "--host=0.0.0.0"]
由于我没有额外的卷或任何额外的东西,我的 Dockerrun.aws.json 几乎是空的
{
"AWSEBDockerrunVersion": "1"
}
我缺少一些东西来获取从容器内部访问 S3 存储桶的权限?
【问题讨论】:
-
不确定,有什么问题?有任何错误消息吗?
-
我认为我可能错过了将权限从 EC2 实例传递到容器的某种方式,但我刚刚意识到我没有在 docker 文件中公开端口,这就是为什么它无法正确部署
标签: docker flask amazon-s3 amazon-elastic-beanstalk