'AWS'에 해당되는 글 3건

  1. 2014.07.14 #20140714-02 :: lgcodechallenger :: vsftpd 3.0.2 on ubuntu 14.04 LTS with AWS
  2. 2014.07.14 #20140714-01 :: lgcodechallenger :: apache 2.4.7 + django 1.5.8 on ubuntu 14.04 LTS with AWS
  3. 2012.02.23 [S3] key.copy와 bucket.copy_key에서 발생하는 NoSuchKey 에러

#20140714-02 :: lgcodechallenger :: vsftpd 3.0.2 on ubuntu 14.04 LTS with AWS

$ sudo su

# apt-get install vsftpd

# vi /etc/vsftpd.conf


anonymous_enable=NO

local_enable=NO

write_enable=YES

connect_from_port_20=NO

ascii_upload_enable=YES

ascii_download_enable=YES

chroot_local_user=YES


allow_writeable_chroot=YES

pasv_max_port=51000

pasv_min_port=50000


: wq


# sudo adduser design

# service vsftpd restart

# ufw allow 20

# ufw allow 21


# cd /home/design
# mkdir lgcc_media
# vi /etc/fstab
  /srv/django/lgcodechallenger/lgcc_media    /home/design/lgcc_media     none     default,bind     0     0
# mount lgcc_media


#20140714-01 :: lgcodechallenger :: apache 2.4.7 + django 1.5.8 on ubuntu 14.04 LTS with AWS

$ sudo su

# apt-get update

# vi ~/.bashrc

  export LANG="en_US.UTF-8"

  export LC_ALL="en_US.UTF-8"

  : wq

# source ~/.bashrc

# apt-get -y upgrade

# wget https://www.djangoproject.com/download/1.5.8/tarball/ --default-page=Django-1.5.8.tar.gz

# tar -vxzf Django-1.5.8.tar.gz

# cd Django-1.5.8

# sudo python setup.py install

# python -c "import django; print(django.get_version())"


# apt-get install -y apache2

# apache2 -version


# sudo aptitude install -y libapache2-mod-wsgi

# a2enmod wsgi


# sudo apt-get install -y git-core python2.7-mysqldb


# mkdir /srv/django

# cd /srv/django

# git clone https://github.com/ghilbut/lgcodechallenger.git

# cd lgcodechallenger/lgcc

# cp settings.py.example settings.py

# vi settings.py

  == do something ==


# vi /etc/apache2/sites-available/001-lgcc.conf


<VirtualHost *:80>

  ServerAdmin support@lgcodechallenger.com

  ServerName lgecodejam.com

  ServerAlias design.lgcodechallenger.com dev.lgcodechallenger.com


  DocumentRoot /var/www/html


  Alias /static/admin /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/

  Alias /static /srv/django/lgcodechallenger/lgcc_media/static/


  <Directory /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin>

    Require all granted

  </Directory>


  <Directory /srv/django/lgcodechallenger/lgcc_media/static>

    Require all granted

  </Directory>


  WSGIDaemonProcess lgcodechallenger.com user=ubuntu group=ubuntu processes=1 threads=10 python-path=/srv/django/lgcodechallenger:/usr/local/lib/python2.7/site-packages

  WSGIProcessGroup lgcodechallenger.com


  WSGIScriptAlias / /srv/django/lgcodechallenger/lgcc/wsgi.py


  <Directory /srv/django/lgcodechallenger/lgcc>

    Order allow,deny

    Allow from all


    <Files wsgi.py>

      Require all granted

    </Files>

  </Directory>


  ErrorLog ${APACHE_LOG_DIR}/error.log

  CustomLog ${APACHE_LOG_DIR}/access.log combined


</VirtualHost>

:wq


# a2dissite 000-default.conf

# a2ensite 001-lgcc.conf

# apachectl configtest

# service apache2 restart

[S3] key.copy와 bucket.copy_key에서 발생하는 NoSuchKey 에러


배경:

아마존의 클라우드 서비스를 프로젝트에 적용하면서, 프로젝트가 Python 기반의 장고이기에 AWS를 제어하기 위하여 boto를 사용하고 있다. 지금까지는 무탈하게 사용하여 왔으나, S3의 데이터를 다른 위치로 복사하는 기능을 구현하기 위하여 작업하던 중 난감한 에러를 만나게 되었다.
복사를 위하여 Key의 copy와 Bucket의 copy_key를 모두 사용하여 보았는데, 지속적으로 아래와 같은 에러를 발생하는 것이었다.

S3ResponseError: 404 Not Found

<Error>

<Code>NoSuchKey</Code>

<Message>The specified key does not exist.</Message>

<Key>/path/of/file/in/bucket</Key>

<RequestId>****************</RequestId>

<HostId>****************************************************************</HostId>

</Error>


특별히 사용법이 어려운 것도 아니고, 개인적으로 오픈소스를 무한 신뢰하는 성격이라서 boto를 최신 버전으로 업데이트까지 해가며 몇 시간을 삽질하다가 결국 boto의 함수를 직접 열어 보았다.


환경:
Mac OS X Lion
Python 2.6
boto 2.2.2


원인:
본인은 일반적으로 bucket의 key를 열 때, 키의 문자열을 다음과 같이 만들어 연다.
대부분의 API에서는 아래와 같이 사용했을 때, key도 바르게 열리고 문제가 발생하지 않는다.

keypath = os.path.join('/', project_id, filename)

 
그런데 문제는 copy와 copy_key API 내부에서 복사 리퀘스트를 날릴 때, bucket 이름과 key를 연결하여 인자로 날리는데, 위와 같이 key를 지정할 경우 'bucket//project_id/filename'으로 인자를 만들어 날리고, S3에서는 존재하지 않는 key라고 응답을 하는 것이다. 이런 황당할 때가...


해결:
코드를 아래와 같이 수정한다.

keypath = os.path.join(project_id, filename)

 
 

이걸 버그라고 신고해야하나 말아야 하나... ㅋ