>source

디렉터리를 압축하고 모든 콘텐츠와 함께 AWS Gamelift에 최신 버전으로 업로드하는 python 명령을 사용하여 AWS Gamelift 스크립트를 업데이트하는 데 문제가 있습니다.

from zipfile import ZipFile
import os
from os.path import basename
import boto3
import sys, getopt
def main(argv):
    versInput = sys.argv[1]
    #initializes client for updating script in aws gamelift
    client = boto3.client('gamelift')
    #Where is the directory relative to the script directory. In this case, one folder dir lower and the contents of the RealtimeServer dir
    dirName = '../RealtimeServer'
    # create a ZipFile object
    with ZipFile('RealtimeServer.zip', 'w') as zipObj:
        # Iterate over all the files in directory
        for folderName, subfolders, filenames in os.walk(dirName):
            rootlen = len(dirName) + 1
            for filename in filenames:
                #create complete filepath of file in directory
                filePath = os.path.join(folderName, filename)
                # Add file to zip
                zipObj.write(filePath, filePath[rootlen:])
    response = client.update_script(
        ScriptId=SCRIPT_ID_GOES_HERE,
        Version=sys.argv[1],
        ZipFile=b'--zip-file \"fileb://RealtimeServer.zip\"'
    )
if __name__ == "__main__":
   main(sys.argv[1])

다음과 같이 변경할 때마다 새 버전 번호를 제공하여 사용할 계획입니다.

python updateScript.py "0.1.1"

이것은 개발 속도를 높이기위한 것입니다. 그러나 client.update_script ()의 ZipFile 매개 변수에 문제가 있습니다.

컨텍스트를 위해 명령 줄에서 직접 AWS CLI를 사용하고 다음을 사용하여 문제없이 스크립트를 업데이트 할 수 있습니다.

aws gamelift update-script --script-id SCRIPT_STRING_ID_HERE --script-version "0.4.5" --zip-file fileb://RealtimeServer.zip

그러나 시도 할 때 파일의 압축을 풀지 못하기 때문에 무슨 일이 일어나고 있는지 잘 모르겠습니다.

botocore.errorfactory.InvalidRequestException: An error occurred (InvalidRequestException) when calling the UpdateScript operation: Failed to unzip the zipped file.

최신 정보:

ZipFile 매개 변수에 대한 추가 문서를 읽은 후 :

https://docs.aws.amazon.com/gamelift/latest/apireference/API_UpdateScript.html

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/gamelift.html#GameLift.Client.update_script

zip 파일의 base64로 인코딩 된 버전을 보내려고했습니다. 그러나 그것은 작동하지 않았습니다. 스크립트의 client_update 부분 앞에 다음 코드를 넣고 b64EncodedZip을 ZipFile 매개 변수로 사용했습니다.

with open("RealtimeServer.zip", "rb") as f:
        bytes = f.read()
        b64EncodedZip = base64.b64encode(bytes)

  • 답변 # 1

    https://github.com/boto/boto3/issues/2646에서 boto3 관리자의 도움을 받아 작동하도록 할 수있었습니다. (@swetashre에게 감사드립니다)

    다음은 코드이며 최대 5MB까지만 작동하며 그보다 큰 zip 파일을 업로드하려면 s3 버킷을 사용해야합니다.

    from zipfile import ZipFile
    import os
    from os.path import basename
    import boto3
    import sys, getopt
    def main(argv):
        versInput = sys.argv[1]
        #initializes client for updating script in aws gamelift
        client = boto3.client('gamelift')
        #Where is the directory relative to the script directory. In this case, one folder dir lower and the contents of the RealtimeServer dir
        dirName = '../RealtimeServer'
        # create a ZipFile object
        with ZipFile('RealtimeServer.zip', 'w') as zipObj:
            # Iterate over all the files in directory
            for folderName, subfolders, filenames in os.walk(dirName):
                rootlen = len(dirName) + 1
                for filename in filenames:
                    #create complete filepath of file in directory
                    filePath = os.path.join(folderName, filename)
                    # Add file to zip
                    zipObj.write(filePath, filePath[rootlen:])
        with open('RealtimeServer.zip','rb') as f:
            contents = f.read()
        response = client.update_script(
            ScriptId="SCRIPT_ID_GOES_HERE",
            Version=sys.argv[1],
            ZipFile=contents
        )
    if __name__ == "__main__":
       main(sys.argv[1])
    
    

  • 답변 # 2

    스크립트가 작동하지만 boto3 사용을 피하여 수행했습니다. 나는 그것을 좋아하지 않지만 작동합니다.

    os.system("aws gamelift update-script --script-id \"SCRIPT_ID_GOES_HERE\" --script-version " + sys.argv[1] + " --zip-file fileb://RealtimeServer.zip")
    
    

    AWS Gamelift 스크립트를 업데이트하기 위해 boto3를 사용하는 방법을 아는 사람이 있으면 알려주십시오.

관련 자료

  • 이전 javascript - 배열에서 중복 문자열을 한 번 제거
  • 다음 razor - html 속성의 blazor에서 비동기 메서드 호출